C-Minus词法分析和语法分析设计编译器编译原理毕业论文 下载本文

内容发布更新时间 : 2024/6/9 6:21:10星期一 下面是文章的全部内容请认真阅读。

编译原理课程设计报告

课题名称: C- Minus词法分析和语法分析设计

提交文档学生姓名: X X X 提交文档学生学号: XXXXXXXXXX 同组 成 员 名 单: X X X 指导 教 师 姓 名: X X

指导教师评阅成绩: 指导教师评阅意见: . .

提交报告时间:2015年6月10日

1. 课程设计目标

实验建立C-编译器。只含有扫描程序(scanner)和语法分析(parser)部分。

2. 分析与设计

C-编译器设计的整体框架,本实验实现扫描处理和语法分析程序(图中粗黑部分)。

2.1 、扫描程序scanner部分 2.1.1系统设计思想

设计思想:根据DFA图用switch-case结构实现状态转换。

惯用词法:

① 语言的关键字:else if int return void while

② 专用符号:+ - * < <= > >= == != = ; , ( ) [ ] { } * *

③ 其他标记是ID和NUM,通过下列正则表达式定义: ID = letter letter* NUM = digit digit*

letter = a|..|z|A|..|Z digit = 0|..|9

大写和小写字母是有区别的

④ 空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。

⑤ 注释用通常的C语言符号 * . . . * 围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套

说明:当输入的字符使DFA到达接受状态的时候,则可以确定一个单词了。初始状态设置为START,当需要得到下一个token时,取得次token的第一个字符,并且按照DFA与对此字符的类型分析,转换状态。重复此步骤,直到DONE为止,输出token类型。当字符为“”时,状态转换为SLAH再判断下一个字符,如果为“*”则继续转到INCOMMENT,最后以“*”时转到ENDCOMMENT状态,表明是注释,如果其他的则是字符停滞于当前字符,并且输出“”。 2.1.2程序流程图

源文件读取源文件一行输出读取一个字符否是否到达终态是赋值token输出token

2.1.3 各文件或函数的设计说明

扫描程序用到:scanner.、void、while、+、-、*、、<、<=、>、>=、==、!=、=、;、,、(、)、[、]、{、}、*、*、num、id、错误、结束 typedef enum {

ELSE = 1,IF,INT,RETURN,VOID,WHILE,

PLUS,MINUS,TIMES,OVER,LT,LEQ,GT,GEQ,EQ,NEQ,ASSIGN,SEMI,COMMA,LPAREN,RPAREN,