《编译原理实验报告(词法分析器语法分析器).docx》由会员分享,可在线阅读,更多相关《编译原理实验报告(词法分析器语法分析器).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编 译 原 理 实 验 报 告 实验一 一、实验名称:词法分析器的设计 二、实验目的:1,词法分析器能够识别简单语言的单词符号 2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。 三、实验要求:给出一个简单语言单词符号的种别编码词法分析器 四、实验原理: 1、词法分析程序的算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其 基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 2、程序流程图 (1)主程序 (2)扫描子程序 输入要分析的语句 判断读入字符是否为“#” 调用扫描、分析程序 输出单词符号二元组 结束 Token清空
2、Get() 当前字符= 标示符 常数 表中查找 结束 Error() 基本字 用户标示符 输出二元式 结束 3、各种单词符号对应的种别码 单词符号 种别码 助记符 内码值 while 1 while - if 2 if - else 3 else - switch 4 switch - case 5 case - 标识符 6 id id在符号表中的 位置 常数 7 num num在常数表中的 位置 + 8 + - - 9 - - * 10 * - = 11 relop LE 11 relop LT = 11 relop EQ = 12 = - ; 13 ; - 五、实验内容: 1、实验分析 编
3、写程序时,先定义几个全局变量a、token(均为字符串数组),c,s( char型),i,j,k (int型),a用来存放输入的字符串,token另一个则用来帮助识别单词符号,s用来表示正 在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否#,若是表示字符串输入分 析完毕,结束分析程序,若否则通过 int digit(char c)、int letter(char c)判断其是数字, 字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行, 还要通过函数int lookup(char token)来判断标识符和保留字。 2 实验词法分析器源程序: #i
4、nclude #include #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) E-0|1|2|3|9 根据此文法编写程序时,算术表达式的求解过程需要用到算术符号的优先判断,定义两个字符串 数组optr、opnd用来模拟栈,存放算术符和操作数,用a来存放表达式字符串,在分析时还要通 过函数int f(char c)和int g(char c),判断运算符之间的优先关系,根据不同情况作各种不同 操作。流程图如下: 输入算数表达式,以#结束 初始化loptr1
5、=# 用get()取一个待分析字符s Optr1和s是否同时为 判断S是否为运算量 存入opnd get() 其他情况 errorFloptrjg(s) 当前字符栈optr 栈顶元素出栈 结束 2,实验程序源代码: #include char a21,optr10,op,s; int opnd10,i,j,k,x1,x2,x3; int operand(char s) if(s=48)&(s=57) return 1; else return 0; int f(char s) 心得体会: 通过本次实验,我更加深刻的学习到了很多: 1、通过实验我对词法分析和语法分析原理有了更深刻的理解。 2、而且对词法分析和语法分析在实践中的应用有了深入的掌握。 3、更加熟悉了构造词法分析程序和语法分析程序的手工方式的相关原理,能够实现对词法 分析程序所提供的单词符号序列进行相应的语法检查和结构分析,达到了学以致用的目的。