《编译原理实验报告(词法分析器语法分析器)》由会员分享,可在线阅读,更多相关《编译原理实验报告(词法分析器语法分析器)(10页珍藏版)》请在装配图网上搜索。
1、编译原理实验报告实验一一、实验名称:词法分析器的设计二、实验目的:1,词法分析器能够识别简单语言的单词符号2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。三、实验要求:给出一个简单语言单词符号的种别编码词法分析器四、实验原理:1、词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。2、程序流程图(1)主程序输入要分析的语句调用扫描、分析程序输出单词符号二元组结束判断读入字符是否为“#”(2)扫描子程序Token清空当前字符=?标示符常数表中查找结束 Error()输。
2、出二元式基本字用户标示符结束Get()3、各种单词符号对应的种别码单词符号种别码助记符内码值while1while-if2if-else3else-switch4switch-case5case-标识符6idid在符号表中的位置常数7numnum在常数表中的位置+8+-9-*10*-#include #include int i,j,k;char c,s,a20,token20=0;int letter(char s)if(s=97)&(s=48)&(sE+E|E-E|E*E|E/E|(E)E-0|1|2|3|9根据此文法编写程序时,算术表达式的求解过程需要用到算术符号的优先判断,定义两个字符。
3、串数组optr、opnd用来模拟栈,存放算术符和操作数,用a来存放表达式字符串,在分析时还要通过函数intf(charc)和intg(charc),判断运算符之间的优先关系,根据不同情况作各种不同操作。流程图如下:输入算数表达式,以#结束初始化loptr1=#用get()取一个待分析字符sOptr1和s是否同时为#判断S是否为运算量Floptrjg(s)其他情况error()当前字符栈optr栈顶元素出栈结束存入opndget()2,实验程序源代码:#includechar a21,optr10,op,s;int opnd10,i,j,k,x1,x2,x3;int operand(char s。
4、)if(s=48)&(sg(s) op=optrj;j-;x1=opndk-1;x2=opndk-2;k=k-2;switch(op)case +:x3=x1+x2;break;case *:x3=x1*x2;break;default:break;opndk=x3;k+;printf(%c,%d,%d,%d)n,op,x2,x1,x3);else j-;get(); 3实验结果:心得体会:通过本次实验,我更加深刻的学习到了很多: 1、通过实验我对词法分析和语法分析原理有了更深刻的理解。2、而且对词法分析和语法分析在实践中的应用有了深入的掌握。3、更加熟悉了构造词法分析程序和语法分析程序的手工方式的相关原理,能够实现对词法分析程序所提供的单词符号序列进行相应的语法检查和结构分析,达到了学以致用的目的。