




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
词法语法分析-编译原理课程设计关键词:设计要求:用C语言或其它高级语言对PASCAL子集编制一个一遍扫描的小型编译程序对词法分析,完成识别语言单词的任务。对语法分析,若输入串是文法的句子,则输出语法分析成功,否则,给出错误的行号,错误的性质。语法描述:文法: begin end ; | | := if then while do + | * | / | | ( ) | | | = | = | a | b | c | | x | y | z 0 | 1 | 2 | | 9 , | ; | ( | ) | 语言单词符号种别码:单词符号种别码单词符号种别码单词符号种别码Begin1+1323Then3*15=24While4/16=25Do5:=17;26End6:18(28L (L|d)*1020)29dd*1121#0例如:begin 输出:二元组(xyb , token 或Dac)x:=20;y:=10; 要求:有一定的查错能力,并且给出错误行号和类型 if x=18 then x:=x+1; 读入非法字符while y0 do y:=y-1; 整数32767end#(表示源程序结束)设计原理:将输入的程序存入一个文件中,再从文件中逐行读出,并对每一行的单词和运算符进行判断,合法就进入一个队列,非法字符则返回错误信息,词法分析做完了。然后就根据队列的先进先出的特点,进行语法分析。语法分析是通过一些文法识别函数来完成的,用这些文法识别函数来判断文法是否有错,若有错则返回出错报告,根据错误报告来确定错误的类型。因子项表达式条件语句分程序程序 语法调用关系图部分源程序:*#include main() int i=0;int m=0; char s50; char t50; int k=0; int j; char *keyWords= break,case,char,continue, do,double,else,enum,extern, float,for,goto,if,int,long; printf(请输入一行字符串:n); gets(s); while(si!=0) if(si=x20) i+; else if(si=a&si=A&si=a&si=A&si=0&si=9) tj=si; i+; j+; tj=0; for(k=0;k=0&si=9) j=0; while(0=si&si=9) tj=si; i+; j+; tj=0; printf(数字:); printf(%s,t); printf(n); else if(si=() printf(界符:%cn,si);i+;/*输出界符*/ else if(si=) printf(界符:%cn,si);i+;else if(si=,) printf(界符:%cn,si);i+;else if(si=;) printf(界符:%cn,si);i+;else if(si=+) printf(运算符:%cn,si);i+;else if(si=-) printf(运算符:%cn,si);i+;else if(si=*) printf(运算符:%cn,si);i+;else if(si=/) printf(运算符:%cn,si);i+;else if(si=) printf(界符:%cn,si);i+;else if(si=) printf(界符:%cn,si);i+;else if(si=) printf(运算符:%cn,si);i+; else if(si=) printf(运算符: %cn,si);i+; getch(); int TP();int F();/全局变量char inputString10;char ch;int i=0;/主函数void main()/int k=1;/while(k)cout本程序判断任意一输入串是否为文法GE的句子nendl;cout终结符有: “+ * ( ) i #”endl;cout请输入句子:n;cin.getline(inputString,sizeof(inputString);ch=inputStringi;if(E() coutninputString是GE的句子endl;else coutninputString不是GE的句子endl;/coutn重来请按1键endl;/cout退出请按其他键endl;/coutk;/if(k=1) continue;/else break;cin.ignore();return;/以下是各子函数的定义int E()if(!T() return 0;else if(EP() return 1; else return 0;int EP()if(ch=+)i+;ch = inputStringi;if(!T() return 0;else if(EP() return 1; else return 0;else if(ch=)|ch=#) return 1; else return 0;int T()if(!F() return 0;else if(TP() return 1; else return 0;int TP()if(ch=*)i+;ch = inputStringi;if(!F() return 0;else if(TP() return 1; else return 0;else if(ch=+|ch=)|ch=#) return 1; else return 0;int F()if(ch=i)i+;ch = inputStringi;else if(ch=()i+;ch = inputStringi;if(!E() return 0;else if(ch=)i+;ch=inputStringi;else return 0;else return 0;*设计体会:本次实验对我来说,有一定的难度,在基本掌握理论和算法之后,却还是感觉无从下手,关键是不知道怎样用语言表达出来,这充分地暴露出语言知识掌握不足。我去请教了同班的同学,好象他们和我的问题差不多,都不知道该如何去实现。后来,我在搞懂了同学的思想和算法后,参考了他定义的类,并对里面的部分细节做了修改,也添补了其中的一些不足之处,才得以完成这次实验。编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体过程。一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年3D打印的工业制造
- 工商银行2025淮南市秋招面试典型题目及参考答案
- 2025行业政策环境分析报告
- 邮储银行2025营口市数据分析师笔试题及答案
- 建设银行2025楚雄彝族自治州秋招笔试EPI能力测试题专练及答案
- 邮储银行2025咸阳市秋招笔试英语题专练及答案
- 工商银行2025牡丹江市秋招英文面试题库及高分回答
- 交通银行2025景德镇市信息科技岗笔试题及答案
- 交通银行2025自贡市小语种岗笔试题及答案
- 交通银行2025黔东南苗族侗族自治州秋招笔试性格测试题专练及答案
- 2025年中国航空油料集团招聘笔试模拟题与解析
- 人教版(2024)八年级上册英语Unit 3 Same or Different 教案
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人备考练习题库及答案解析
- 广东省深圳市福田区红岭实验学校(上沙)2025-2026学年八年级上学期开学考试英语试卷(含答案)
- 走心!学校庆祝第41个教师节暨表彰大会校长高水平致辞
- 2025年适老化家居市场分析报告
- 2025年信息系统管理员技术水平考核试题及答案解析
- 社区宣传工作知识培训课件
- 瑜伽相关知识培训课件
- 犬猫免疫知识培训内容课件
- 2025年中国移动式皮带输送机市场调查研究报告
评论
0/150
提交评论