不良品分析程序与报告

關于不良品分析程序與回饋  王雄獅(LCD制技部)

一、說明:初步分析步驟

         1.將異常品初步分類成固定及非固定點.

          1-1.固定點:紀錄異常品模號及位置.

          1-2.非固定點:紀錄異常批號.

         2.于電測機、光桌及顯微鏡下將異常情況作初步分析

          2-1.確認異常品原因為前制程或后制程造成.

          2-2.無法確認異常品原因時勿下結論,只反映現象及初步分析內容

         3.回饋資訊

          3-1.異常批號

          3-2.異常照片(正常品與異常品比對、光桌或電測機為顯示情況)

二、細項分步驟

 

第二篇:语法分析程序报告

语法分析上机报告

020789 周磊

1. 目的:通过设计、编制、调试一个具体的语法分析程序,加深对语法分析原理的理解,并掌握算符优先分析方法,提高编写编译程序功能模块的能力。

2. 要求:使用C语言编写,提交实习报告一份,其中应包括:问题描述、详细设计、源程序代码和运行结果等。

3. 题目:给出算符优先文法G如下所示:

(1) E→E+T│E-T│T

(2) T→T*F│T/F│F

(3) F→P↑F│P

(4) P→(E)│i

(1) 写出该文法的优先关系矩阵;

编写一个算符优先语法分析器,输入为算术表达式,输出为语法分析结果。

(2)编写一个算符优先语法分析器,输入为算术表达式,输出为语法分析结果。

4.分析

该程序可分为如下几步:

(1)读入文法

(2)判断正误

(3)若无误,判断是否为算符优先文法

(4)若是,构造分析表;

(5)由总控算法判断输入符号串是否为该文法的句型。

5.流程图

语法分析程序报告

6. 源程序

# include "stdio.h" # include "malloc.h"

struct Lchar{ char char_ch; struct Lchar *next;

}Lchar,*p,*h,*temp,*top,*base;

int table[8][8]={{1,1,-1,-1,-1,1,-1,1},

{1,1,-1,-1,-1,1,-1,1},

{1,1,1,1,-1,1,-1,1},

{1,1,1,1,-1,1,-1,1},

{-1,-1,-1,-1,-1,-1,-1,0},

{1,1,1,1,0,1,0,1},

{1,1,1,1,0,1,0,1},

{-1,-1,-1,-1,-1,0,-1,-1}};

/*存储算符优先关系表,大于为1,小于或等于为-1,其它为0表示出错*/

char curchar;

char curcmp;

int right;/*设置开关项,当出错时为0*/

int i,j;

int k;/*比较字符在栈的位置*/

void push(char pchar)/*入栈函数*/

{

temp=malloc(sizeof(Lchar));

temp->char_ch=pchar;

temp->next=top;

top=temp;

}

void pop(void)/*出栈函数*/

{

if(top->char_ch!='#')

top=top->next;

}

int changchartoint(char ch)/*将字符转为数字,以得到算符优先值*/

{

int t;

switch(ch)

{

case '+':t=0;break;

case '-':t=1;break;

case '*':t=2;break;

case '/':t=3;break;

case '(':t=4;break;

case ')':t=5;break; case 'i':t=6;break; case '#':t=7;

}

return t;

}

void dosome(void) {

k=1;

for(;;)

{

curchar=h->char_ch; temp=top;

for(;;)

{

if(temp->char_ch=='N') {

temp=temp->next; k++;

}

else

{

curcmp=temp->char_ch; break;

}

}

printf("\n%d\t%d\t",table[i][j],k); temp=top;

for(;;)/*打印栈*/

{

printf("%c",temp->char_ch); if(temp->char_ch=='#') break;

else

temp=temp->next; }

printf("\t");

temp=h;

for(;;)/*打印待比较的字符*/ {

printf("%c",temp->char_ch);

if(temp->char_ch=='#')

break;

else

temp=temp->next;

}

i=changchartoint(curcmp);

j=changchartoint(curchar);

if(table[i][j]==0)/*算符优先值为空*/

{

printf("\n%d\t%d\t%c\t%c\terror1",table[i][j],k,curcmp,curchar); right=0;

break;

}

else/*算符优先值不为空*/

{

if(table[i][j]<0)/*算符优先值为-1,移进*/

{

if(curchar=='#')/*待比较字符为空*/

{

if(k==2)/*当前比较字符在栈的位置为两个元素*/ break;

else

{

printf("\n%d\t%d\t%c\t%c\terror2",table[i][j],k,curcmp,curchar);

right=0;

break;

}

}

push(curchar);

k=1;

curcmp=curchar;

h=h->next;

}

else/*算符优先值为1,归约*/

{

if(curcmp=='i')/*当前比较为i,出栈一次*/

pop();

else/*当前比较不为i,出栈三次*/

{

pop();

pop();

pop();

}

push('N');/*归约到N*/

k=1;

}

}

}

}

void main(void)

{

char ch;

right=1;

base=malloc(sizeof(Lchar));

base->next=NULL;

base->char_ch='#';

top=base;

h=malloc(sizeof(Lchar));

h->next=NULL;

p=h;

do{ /*输入待比较字符串,以'#'结束*/

ch=getch();

putch(ch);

if(ch=='i'||ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='#')

{

temp=malloc(sizeof(Lchar));

temp->next=NULL;

temp->char_ch=ch;

h->next=temp;

h=h->next;

}

else

{

temp=p->next;

printf("\nInput a wrong char!Input again:\n"); for(;;)

{

if (temp!=NULL)

printf("%c",temp->char_ch); else

break;

temp=temp->next;

}

}

}while(ch!='#');/*输入待比较字符串,以'#'结束*/ p=p->next;

h=p;

dosome();/*开始识别*/

if(right)

printf("\nOK!\n");

else

printf("\nError!\n");

getch();

}

7.程序运行结果显示

语法分析程序报告

运行语法分析.exe,输入待处理的算术表达式,如果输入有误,程序会自动报错,并且会自动保留已输入的正确部分。

语法分析程序报告

输入完成,按#号结束,产生运行结果。

相关推荐