《编译原理课程设计》报告。
minic编译器设计与实现。
分组序号:13
设计地点:微301、文理楼110
电子邮件:分组成绩:
任课教师:李村合。
2014 年 12 月19 日。
6. 2 测试程序2 9
6. 3 测试程序3 9
6. 5 测试结果2 13
6. 6 测试结果3 16
1 课程设计目的。
1)根据所掌握的编译原理课程的基本知识,编写出一个 minic 编译器;
2)增强阅读和编写程序的能力;
3)理解词法分析、语法分析和语义分析在编译程序中的作用;
4)掌握词法分析、语法分析和语义分析程序的实现方法;
5)实现 minic 编译器的编辑、编译、连接和运行。
2 课程设计内容。
用 mfc 编写一个可视化的 minic 编译器,要求界面美观,使用方便,能够实现自定义 minic语言的编译。
支持的语句和运算:
1)数据类型:int,char,void,float
2)语句:赋值(=)if, while,for
3)数**算:+,
4)关系运算:==
5)逻辑运算:&&
6)支持函数的定义、调用。
7)支持复合语句,即 {}包含的语句。
8)注释: c 类型的多行注释 /*和 c++ 类型的单行注释 //
3 课程设计原理。
minic 语言可以看成 c 语言的子集,它的编译程序是一个编译执行环境。
minic 的编译程序和目标程序的执行程序都是用 c++ 语言编写的,因此 minic 语言可在配备c 语言的任何机器上实现。它的编译过程采用从左到右扫描输入符号串,进行最左推导,再向右看一个符号的方式,以语法分析程序为核心,词法分析和汇编**生成程序都是独立的过程。当语法分析需要读取输入符号串时就调用词法分析程序;而当语法分析正确后,需要生成相应的目标**(老师只要求到汇编**,在本程序中则更进一步,是目标文件 .
obj 文件和可执行的目标文件 .exe 文件)时,则调用汇编**生成程序和创建exe文件程序。
用**管理程序建立变量、常量和过程标识符的说明与引用之间的信息联系。当源程序编译正确时,编译程序自动调用执行程序,对目标**进行执行,并按用户程序的要求输入数据和输出运行结果。
1)运行by13程序,打开文件。
2)选择菜单编译(c) -生成汇编**(g)。
3)选择菜单编译(c) -创建exe文件(b),生成可执行的目标文件。
4)选择菜单编译(c) -运行(r),出现如下图所示的结果。
4 系统需求分析。
minic 语言编译过程采用从左到右扫描输入符号串,进行最左推导,再向右看一个符号的方式,对源程序分别进行词法分析、语法分析、语义分析、中间**生成、目标**生成和可执行程序生成,此外,用**管理程序建立变量、常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析研究遇到的错误给出在源程序**错的位置和错误性质,它的工作过程如下所示:
输入源** ->词法分析 ->语法分析 ->汇编**生成 ->exe文件生成 ->运行。
4.1 minic 编译程序总体介绍。
该编译器的运行过程是编辑源文件保存后,生成汇编**时使用汇编**生成程序 casmcodegenerator 类,调用该类的成员函数gencodeseg() 来生成**段和genpreseg() 来生成数据段,最后调用emitcode();当然我们在汇编**生成时应该使用语义分析子程序 canalyzer 类对词法和文法出现的各种情况进行展开分析。
4.2 功能需求。
1)用 c++ 语言实现了类c语言,叫做 minic 语言;
2)使用 ll(1) 文法,从左到右扫描输入符号串,进行最左推导,再向右看一个符号;采用递归子程序法实现语法分析,并用 c++ 语言实现了词法分析器、语法分析器、汇编**生成器,能直接生成 intel 80x86汇编**。
3)在声明中实现了对静态常量、变量和函数声明的支持;赋值语句的 = 基本的数**算。
4)使用函数实现了对过程的调用;
5)使用 实现复合语句;
6)使用函数 read() 来同时读入一个或多个数据,使用函数 write() 来同时输出一个或多个数据,而函数 printf() 只能用来输出字符串;
7)在循环分支语句中实现了if语句, if……else……语句, for语句,while……语句;
8)关系表达式包括 ==等于)、!不等于)、<
4.3 用到的主要关键词:
关键字等用枚举类型囊括:
enum tokentype
关键字。_double, _int, _else, _case, _enum, _register, _typedef, _char, _const, _float, _for, _signed, _void, _sizeof, _volatile, _if, _while, _read, _write, _printf,操作符。
assign, plus, minus, times, div, mod,bitwise_and, bitwise_or, bitwise_not, logical_not, lt, gt,界符。
lparan, rparan, lbrace, rbrace, lsquare, rsquare, comma, dot, semi, colon,复杂操作符。
eqneqplus_plusminus_minus/* plus_assignminus_assigntimes_assigndiv_assign/* ngt/* nlt/* logical_andlogical_or/* 其他。
_eof, _id, _num, _string, _character, _label, _error, _none
4.4 汇编成可运行文件。
采用 intel 80x86 汇编语言,然后调用 masm 汇编成可执行文件(.exe),可在相应机型的机器上运行。
4.5 minic语言的文法。
1. 《程序》 →声明列表》
2. 《声明列表》 →声明列表》 《声明》 |声明》
3. 《声明》 →变量声明》 |函数声明》
4. 《变量声明》 →类型分类符》 id《类型分类符》 id '[数字》
5. 《数字》 →0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
6. 《类型分类符》 →int" |void" |char" |float"
7. 《函数声明》 →类型分类符》 id '(参数》 '复合声明》
8. 《参数》 →参数列表》 |void"
9. 《参数列表》 →参数列表》 '参数》 |参数》
10. 《参数》 →类型分类符》 id | 类型分类符》 id '[
11. 《复合声明》 →表达式声明》
12. 《局部声明》 →局部声明》 《变量声明》 |变量声明》
13. 《输入函数》 →read" '变量》 '
14. 《输出函数》 →write" '表达式》 '
15. 《显示函数》 →printf《字符串》
16. 《表达式声明》 →表达式》
17. 《表达式》 →变量》 `表达式》 |逻辑表达式1>
18. 《变量》 →a | b | c | z | a | b | c | z ..
19. 《逻辑表达式1> →逻辑表达式1> "逻辑表达式2> |逻辑表达式2>
20. 《逻辑表达式2> →逻辑表达式2> "简单表达式》 |简单表达式》
21. 《简单表达式》 →添加的表达式》 《关系操作》 《添加的表达式》 |添加的表达式》
22. 《关系操作》 →
23. 《添加的表达式》 →添加的表达式》 《加法操作》 |
24. 《加法操作》
25. →乘法操作》 《逻辑表达式3> |逻辑表达式3>
26. 《乘法操作》
编译原理课程设计大纲
编译原理 课程设计指导书。一 课程设计的目的 编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高...
编译原理课程设计教学大纲
学时 1周。一 地位 作用和目的。编译原理 是计算机专业的核心课程,为了学好这门课程,必须在掌握理论知识的同时,加强实践应用能力的培养。本课程设计的目的就是要达到理论与实际应用相结合,使学生充分理解课程理论内容和工具软件的实现技巧,掌握所涉及的典型数据结构 算法及方法,为今后在大型软件系统实践中设计...
编译原理课程设计心得体会
编译原理课程设计心得体会范文。发了学习的积极性。通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操。作系...