1、输出二元式基本字用户标示符结束Get()3、各种单词符号对应的种别码单词符号种别码助记符内码值while1-if2else3switch4case5标识符6idid在符号表中的位置7numnum在常数表中的位置+89*10=11relopLELT=EQ12;13五、实验内容:1、实验分析编写程序时,先定义几个全局变量a、token(均为字符串数组),c,s( char型),i,j,k(int型),a用来存放输入的字符串,token另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否#,若是表示字符串输入分析完毕,结束分析程序,若否则通过int d
2、igit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token)来判断标识符和保留字。2 实验词法分析器源程序:#include int i,j,k;char c,s,a20,token20=0;int letter(char s) if(s=97)&(sE+E|E-E|E*E|E/E|(E)0|1|2|3|9根据此文法编写程序时,算术表达式的求解过程需要用到算术符号的优先判断,定义两个字符串数组optr、opnd用来模拟栈,存放算术符和
3、操作数,用a来存放表达式字符串,在分析时还要通过函数intf(charc)和intg(charc),判断运算符之间的优先关系,根据不同情况作各种不同操作。流程图如下:2,实验程序源代码:#include=57) return 1;else return 0;int f(char s)switch(s)return 4;return 6;return 2;) default:return 0;int g(char s)return 3;return 5;return 7;void get()s=ai;i+;printf(请输入表达式(以#结束):i=0;doi+;while(ai!i=j=k=1
4、;optrj=while(!(optrj=)&(s=)if(operand(s) opndk=s-48;k+;else if (f(optrj)g(s) op=optrj; j-; x1=opndk-1; x2=opndk-2; k=k-2; switch(op) case x3=x1+x2;x3=x1*x2; opndk=x3; k+;(%c,%d,%d,%d)n,op,x2,x1,x3); else j-; 3实验结果:心得体会:通过本次实验,我更加深刻的学习到了很多:1、通过实验我对词法分析和语法分析原理有了更深刻的理解。2、而且对词法分析和语法分析在实践中的应用有了深入的掌握。3、更加熟悉了构造词法分析程序和语法分析程序的手工方式的相关原理,能够实现对词法分析程序所提供的单词符号序列进行相应的语法检查和结构分析,达到了学以致用的目的。