1、 编译原理课程设计名: 编译代生编译原理课程设计名: 编译代生 成器设计成器设计 专业专业 计算机科学与技术计算机科学与技术 完成日期:完成日期:2013.6.22013.6.2 一、课程设计的目的一、课程设计的目的 编译原理课程兼有很强的理论性和实践性, 是计算机专业的一门非常重要的专业基础课 程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能 够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧, 融会贯通本课程所学 专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的 PASCAL 语言(EL 语言)的编译程序,提高学生设
2、计程序的能力,加深对编译理论知识的理 解与应用。 二、课程设计的要求二、课程设计的要求 1、 明确课程设计任务,复习编译理论知识,查阅复印相关的编译资料。 2、 按要求完成课程设计内容,课程设计报告要求文字和图表工整、思路清晰、算法正 确。 3、 写出完整的算法框架。 4、 编写完整的编译程序。 三、课程设计的内容三、课程设计的内容 课程设计是一项综合性实践环节, 是对平时实验的一个补充, 课程设计内容包括课程的 主要理论知识, 但由于编译的知识量较复杂而且综合性较强, 因而对一个完整的编译程序不 适合平时实验。 通过课程设计可以达到综合设计编译程序的目的。 本课程的课程设计要求学 生编写一个
3、完整的编译程序, 包括词法分析器、 语法分析器以及实现对简单程序设计语言中 的逻辑运算表达式、算术运算表达式、赋值语句、IF 语句、While 语句以及 dowhile 语句 进行编译,并生成中间代码和直接生汇编指令的代码生成器。 四、总体设计方案及详细设计四、总体设计方案及详细设计 总体设计方案: 1.总体模块 主程序 词法分析 程序 语法分析 程序 中 间 代 码 生成程序 2. 表 2.1 各种单词符号对应的种别码 单词符号 种别码 单词符号 种别码 bgin 1 : 17 If 2 := 18 Then 3 = 24 dight dight* 11 = 25 + 13 ; 26 14
4、( 27 * 15 ) 28 / 16 # 0 详细设计:详细设计: 4.14.1 界面导入设计界面导入设计 (1)一共三个选项: choice 1-cifafenxi choice 2-yufafenxi choice 3-zhongjiandaima (2)界面演示 图一 图二 图三 4.24.2 词法分析程序词法分析程序 (1)流程图设计 (2)(2)具体功能的具体设计具体功能的具体设计 1、cifafenxi( ) 首先设置 progn来接收输入的语句,以#来结束; 调用扫描子程序 scaner1( ),每一次得到一个类型码; 用 switch 判别相应输出; 直到 syn1=0 为止
5、。 2、扫描子程序 scaner1( )-扫描输入的语句 首先设置首先设置 3 个变量个变量: token1 用来存放构成单词符号的字符串; sum1 用来存放整型单词; syn1 用来存放单词符号的类型码。 有关有关 scaner1()中关键点解析:中关键点解析: while(ch= )|(ch=n) ch=progp+; ;忽略空格 if(ch=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0) 置初值 调用扫描子程序 输出单词二元组 输入串结束 结束 否 是 ch=progp+; ; 判别标识符 for(n=0;n=0) /扫描 void lrparser(); vo
6、id staBlock(int *nChain); /语句块 void staString(int *nChain); /语句串 void sta(int *nChain); /语句 void fuzhi(); /赋值语句 void tiaojian(int *nChain); /条件语句 void xunhuan(); /循环语句 char* E(); /Expresiion 表达式 char* T(); /Term项 char* F(); /Factor 因子 char *newTemp(); /自动生成临时变量 void backpatch(int p,int t); /回填 int merge(int p1,i