编译原理-C++编译器课程设计报告.doc

编译原理-C++编译器课程设计报告.doc

ID:58371110

大小:167.00 KB

页数:27页

时间:2020-04-30

编译原理-C++编译器课程设计报告.doc_第1页
编译原理-C++编译器课程设计报告.doc_第2页
编译原理-C++编译器课程设计报告.doc_第3页
编译原理-C++编译器课程设计报告.doc_第4页
编译原理-C++编译器课程设计报告.doc_第5页
资源描述:

《编译原理-C++编译器课程设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译器的设计与分析学号:姓名:李博专业:计算机科学与技术__课程:编译原理指导教师:闫红实验目的本实验设计的小型编译程序涉及到编译前端的三个阶段:词法分析、语法分析和语义分析生成中间代码 ((四元式),编译程序的重点放在中间代码生成阶段。编译程序的输出结果包括词法分析后的二元式序 列、变量名表;语法分析后的状态栈分析过程显示;语义分析生成中间代码后的四元式程序。整个程序 分为三个部分:(1)词法分析部分(2)语法分析、语义分析及四元式生成部分(3)输出显示部分实验要求:本程序仅考虑由下面产生式所定义的程序语句:S→ifBthenSelseS

2、whileBdoS

3、beginLend

4、AL→

5、S;L

6、SA→i:=EB→B∧B

7、B∨B

8、~B

9、(B)

10、Iropi

11、i其中,各个非终结符的含义是:S---语句L—语句串A—赋值句B---布尔表达式E---算术表达式各个终结符的含义:i---整型变量或常数,布尔变量或常数;rop---为六种关系运算符的代表;;---起语句分隔作用;:=---赋值符号~--逻辑非运算符;∧----逻辑与运算符;∨---逻辑或运算符;规定程序是由一条语句或由begin和end嵌套起来的复合语句组成的,并且规定的语句末加上#@表示程序结束。下面是符合规定的程序示例:beginA:=A+B*C;C:=A+2;whileABdoifM=NT

12、HENC:=DelsewhileA<=DdoA:=Dend#@实验内容:第一部分:词法分析一.词法分析的功能:输入:所给文法的源程序字符串输出:1.二元组(单词种别,单词符号的属性值)构成的序列2.关键字:{(相当于Pascal语言中的begin),if,else,while,}(相当于Pascal语言中的end)所有的关键字都是小写字母.3.运算符:+,-,*,/,=,<,<=,==,>,>=,<>,&&,

13、

14、,!4.界符:逗号,分号,左圆括号,右圆括号,#5.常数:在这里只涉及到int型常量6.其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义:ID=letter(le

15、tter

16、digit)*NUM=digitdigit*7.空格由空白,制表符和换行符组成,空格一般用来分隔ID,NUM,运算符,界符和关键字,词法分析阶段通常会被过滤掉。二.词法分析程序设计单词内部码编码号IfSy_if0thenSy_then1elseSy_else2whileSy_while3beginSy_begin4DoSy_do5endSy_end6andop_and39Orop_or40notop_not41+Plus34*Times36:becomes38;Semicolon8(lparent48)rparent49AccAcc-2=rop423.自动机转换图三.程序实现数

17、据结构:structnTab{inttc;intfc;}nTab2[200];intLabel=0;structrWords{charsp[10];intsy;};structrWordsResWords[10]={{"if",Sy_if},{"do",Sy_do},{"else",Sy_else},{"while",Sy_while},{"then",Sy_then},{"begin",Sy_begin},{"end",Sy_end},{"and",op_and},{"or",op_or},{"not",op_not}};structaa{intsy1;intpos;}buf[1000

18、],n,n1,E,sstack[100],ibuf[100],stack[1000];voidReadLine(){charch1;Pline=Line;ch1=cfile.get();while(ch1!=''){*Pline=ch1;Pline++;ch1=cfile.get();}*Pline='';Pline=Line;}voidReadch(){if(ch==''){ReadLine();Lnum++;}ch=*Pline;Pline++;}voidScan(){while(ch!='@'){switch(ch){case'':break;case'a':case'

19、b':case'c':case'd':case'e':case'f':case'g':case'h':case'i':case'j':case'k':case'l':case'm':case'n':case'o':case'p':case'q':case'r':case's':case't':case'u':case'v':case'w':case'x':case'y':case'z':Identifer();break;case'

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。