




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 实 验 报 告课程名称: 编译原理 专业班级: 信息安全1302 学 号: 姓 名: 指导教师: 报告日期: 2015年11月13日 计算机科学与技术学院目录实验一:词法分析11.实验目的12.实验要求12.1待分析的简单语言的词法12.2各种单词符号对应的种别码12.3词法分析程序的功能23.算法思想23.1 主程序示意图:23.2扫描子程序的算法思想34.实验程序设计说明及实现35.实验结果与分析6实验2:语法分析71.实验目的72.实验要求72.1待分析的简单语言的语法72.2实验要求说明73语法程序的算法思想74实验设计95实验程序设计说明及实现106实验结果与分析15实验总结15参考资料16实验一:词法分析1. 实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。2. 实验要求2.1待分析的简单语言的词法(1)关键字:如:begin ,if,then,while,do,end,void,int,char,float,long,short,switch case,defualt,return,continue 所有的关键字都是小写。(2)运算符和界符:= + - * / = ; ( ) , #(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。2.2各种单词符号对应的种别码如下表所示:表 1 各种单词符号对应的种别码2.3词法分析程序的功能输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串;sum为整型常数。 例如:对源程序begin x:=9; if x9 then x: = 2 * x + 1 / 3 ; end #的源文件,经过词法分析后输出如下序列: (1,begin) (10,x) (18,:=) (11,9) (26,;) (2,if)3. 算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。3.1 主程序示意图: 主程序示意图如图1所示。其中初始包括以下两个方面:(1)关键字表的初值。 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下: Char * rwtab6 = “begin”, “if”, “then”, “while”,“do”, “end”,, ;结束否置初值调用扫描子程序输出单词二元组输入串结束?是图 Error! Main Document Only. 词法分析主程序示意图(2)程序中需要用到的主要变量为syn, token和sum3.2扫描子程序的算法思想首先设置3个变量:token用来存放构成单词符号的字符串。 sum用来整型单词。syn用来存放单词符号的种别码。扫描子程序主要部分流程如图2所示。图 2 词法分析程序流程4. 实验程序设计说明及实现首先将输入端的字符串读入然后进行前期的处理,如去掉空白符号。之后在一个字符一个字符的进行处理,判断下一个字符串所属类型,然后给出相应类型的种别码,返回给主函数进行输出。其中主要部分就是分类属性的判断以及判断之后不同属性种别码的赋值,这就是整个程序中的主要部分。代码如下:#include #include void expression();charprog80, token8;charch;intsyn, p, m, n, kk;char*rwtab6 = begin, if, then, while, do, end ;int num() if (ch = 0) return 1;else return 0;int letter() if (ch = A) | (ch = a)return 1;else return 0;void scaner() for (n = 0; n 8; n+) tokenn = NULL;ch = progp+; m = 0;while (ch = ) ch = progp+;if (letter() while (letter() | num() tokenm+ = ch;ch = progp+;tokenm+ = 0; p-; syn = 10;for (n = 0; n 6; n+)if (strcmp(token, rwtabn) = 0) syn = n + 1;break;elseif (num() while (num() tokenm+ = ch;ch = progp+;tokenm+ = 0;p-; syn = 11;elseswitch (ch) case) syn = 21;tokenm+ = ch;else if (ch = =) syn = 22;tokenm+ = ch;else syn = 20;p-;break;case:tokenm+ = ch;ch = progp+;if (ch = =)syn = 24;tokenm+ = ch;else syn = 23;p-;break;case:tokenm+ = ch;ch = progp+;if (ch = =) syn = 18;tokenm+ = ch;else syn = 17;p-;tokenm+ = 0;break;case+:syn = 13; token0 = ch; break;case-:syn = 14; token0 = ch; break;case*:syn = 15; token0 = ch; break;case/:syn = 16; token0 = ch; break;case;:syn = 26; token0 = ch; break;case=:syn = 25; token0 = ch; break;case):syn = 28; token0 = ch; break;case(:syn = 27; token0 = ch; break;case#:syn = 0; token0 = ch; break;default:syn = -1;void main() p = 0;printf(n Please input string : n);do scanf(%c, &ch);progp+ = ch; while (ch != #);p = 0;do scaner(); switch(syn) case 11: printf(11,%s)n,&token);break; case -1: printf(errorn);break; default:printf(%d,%s)n,syn,&token); while(syn != 0);5. 实验结果与分析输入语句:begin x:=9; if x9 then x: = 2 * x + 1 / 3;end #回车输出结果如下:分析:由上术图中结果可知,结果正确。实验2:语法分析1. 实验目的编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。2. 实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1待分析的简单语言的语法用扩充的BNF表示如下: (1):=beginend (2):=; (3):= (4):=ID:= (5):=+ | - (6):=* | / (7):=ID | NUM | ()2.2实验要求说明输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。例如: 输入 begin a:=9; x:=2*3; b:=a+x end # 输出 success! 输入 x:=a+b*c end # 输出 error3语法程序的算法思想(1)主程序示意图如图3所示。图 Error! Main Document Only.语法分析主程序示意图 (2)各子函数示意图如下图 4 递归下降分析程序示意图(左)与语句串分析示意图(右)图 5 statement语句分析函数示意图(左)和expression表达式分析示意图(右)图 6 term分析函数示意图(左)和factor分析过程示意图(右)4 实验设计(1)数据结构的设计 本程序中主要功能是完成文法正确性的判断,因此没有特别的需要使用到结构体等数据结构。本程序中主要使用了一个数组rwtab用于存放语法关键字begin,if,then,while,do,end。 (2)算法设计 首先程序读入用户输入的文法语句,然后使用scaner函数进行字符串的分离处理,即读出一个一个单独的字符串,然后使用递归下降的分析方式进行语法分析。(3)在进行语法分析实验的时候,在主程序部分设计了一个选择,即输入一段语句后回车,会出现,选择进行语法分析还是词法分析。5实验程序设计说明及实现#include #include void expression();charprog80, token8;charch;intsyn, p, m, n, kk;char*rwtab6 = begin, if, then, while, do, end ;int num() if (ch = 0) return 1;else return 0;int letter() if (ch = A) | (ch = a)return 1;else return 0;void scaner() for (n = 0; n 8; n+) tokenn = NULL;ch = progp+; m = 0;while (ch = ) ch = progp+;if (letter() while (letter() | num() tokenm+ = ch;ch = progp+;tokenm+ = 0; p-; syn = 10;for (n = 0; n 6; n+)if (strcmp(token, rwtabn) = 0) syn = n + 1;break;elseif (num() while (num() tokenm+ = ch;ch = progp+;tokenm+ = 0;p-; syn = 11;elseswitch (ch) case) syn = 21;tokenm+ = ch;else if (ch = =) syn = 22;tokenm+ = ch;else syn = 20;p-;break;case:tokenm+ = ch;ch = progp+;if (ch = =)syn = 24;tokenm+ = ch;else syn = 23;p-;break;case:tokenm+ = ch;ch = progp+;if (ch = =) syn = 18;tokenm+ = ch;else syn = 17;p-;tokenm+ = 0;break;case+:syn = 13; token0 = ch; break;case-:syn = 14; token0 = ch; break;case*:syn = 15; token0 = ch; break;case/:syn = 16; token0 = ch; break;case;:syn = 26; token0 = ch; break;case=:syn = 25; token0 = ch; break;case):syn = 28; token0 = ch; break;case(:syn = 27; token0 = ch; break;case#:syn = 0; token0 = ch; break;default:syn = -1;void factor() if (syn = 10 | syn=11)scaner();else if (syn = 27) scaner();expression();if (syn = 28)scaner();else printf()errorn); kk = 1;else printf(表达式错误n); kk = 1;return;void term() factor();while (syn = 15|syn=16) scaner();factor();return;void expression() term();while (syn = 13|syn=14) scaner();term();return;void statement() if (syn = 10) scaner();if (syn = 18) scaner();expression();else printf(赋值号错误n); kk = 1; else printf(输出语句错误n); kk = 1; return;void yucu() statement();while (syn = 26) scaner();statement();return;void lrparser() if (syn = 1) scaner();yucu();if (syn = 6) scaner();if (syn = 0) & (kk = 0)printf(sucessn);else if (kk != 1)printf(缺end错误n);kk = 1;elsep
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乳制品健康宣传活动创新创业项目商业计划书
- 电商平台用户画像深度挖掘创新创业项目商业计划书
- 老年婚恋交友平台创新创业项目商业计划书
- 线上购物线下试妆创新创业项目商业计划书
- 水利工程维修养护数字孪生管理创新创业项目商业计划书
- 电商供应链可视化管理系统创新创业项目商业计划书
- 汽车赛事直播服务创新创业项目商业计划书
- 辐射核安全知识培训内容课件
- 2025年数字货币对货币政策传导机制影响的金融科技视角研究
- 2025年文化与科技融合趋势下的数字文化内容创作创新模式研究报告
- 儿童动漫消费偏好-洞察及研究
- 2025年12345热线考试题库
- 2025年森工集团面试题目及答案
- 2025年教育综合知识试题及答案
- 网络接入管理办法
- 隧道二衬安全注意事项
- 绿色矿山培训课件
- 银行科技架构管理办法
- 110接处警课件培训
- 大模型时代:生成式AI发展与科技创新范式
- 黄浦区2024-2025学年六年级下学期期末考试数学试卷及答案(上海新教材沪教版)
评论
0/150
提交评论