编译原理课设 (中版)

更新时间:2023-05-10 01:35:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

编译原理课程设计

简单编译器

学 院(系):电子信息与电气工程学部 学 生 姓 名:李梦珂 学 号:201181216 班 级:电计1101 同 组 人 :宫丽迪 电计1101 201181306

陈笛 电计1101 201181326

大连理工大学

Dalian University of Technology

目 录

1 词法分析 ............................................................... 2

1.1 实验目的 ......................................................... 2 1.2 实验要求 ......................................................... 2

1.2.1待分析的简单的词法 .......................................... 2 1.2.2 各种单词符号对应的种别码: ................................. 2 1.2.3 词法分析程序的功能: ....................................... 3 1.3 词法分析程序的算法思想: ......................................... 3

1.3.1 主程序示意图: ............................................. 3 1.3.2 扫描子程序的算法思想: ..................................... 4 1.3.3 词法分析程序的C语言程序源代码: ........................... 6 1.3.4 结果分析: ................................................. 6 1.3.5 总结: ..................................................... 7

2 语法分析 ............................................................... 8

2.1 实验目的 ......................................................... 8 2.2实验要求 .......................................................... 8

2.2.1 待分析的简单语言的语法 ..................................... 8 2.2.2 实验算法结构 ............................................... 8 语法分析程序的算法思想 ............................................ 8 2.3 结果分析: ...................................................... 13 2.4 总结: .......................................................... 15 3 语义分析程序 .......................................................... 16

3.1 实验目的: ...................................................... 16 3.2 实验要求: ...................................................... 16 3.3 算法思想: ...................................................... 16

3.3.1 程序结构图 ................................................ 16 3.3.2 设置语义过程 .............................................. 20 3.3.3 函数lrparser 在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 ... 21 3.3.4 简单赋值语句的翻译文法 .................................... 21 3.4 结果分析 ........................................................ 22 3.5 总结: .......................................................... 25

1 词法分析(李梦珂 201181216 负责)

1.1 实验目的

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。

1.2 实验要求

设计、编制并调试一个词法分析程序,三人一组。 1.2.1待分析的简单的词法

(1)关键字:

int if then else while do read write 所有的关键字都是小写。 (2)运算符和界符

: := = + - ++ -- * / < <= != > >= = ; ( ) { } # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit*

(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。

1.2.2 各种单词符号对应的种别码:

表1.1 各种单词符号对应的种别码

1.2.3 词法分析程序的功能:

输入:所给文法的源程序字符串。

输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码;

token为存放的单词自身字符串; sum为整型常数。 例如:对源程序输入如下: {

Int x,y; X:=2*y; If(x>5)

Then x:=2*x+2/3; }#

后经词法分析输出如下序列:({ 35} (int 1)(x 10)(, 33)(y 10) (;26)(x 10)

1.3 词法分析程序的算法思想:

算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 1.3.1 主程序示意图:

主程序示意图如图1.1所示。其中初始包括以下两个方面: ⑴ 关键字表的初值。

关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:

Char *rwtab[6] = {“int”, “if”, “then”, “else”,“while”, “do”, “read”,”write”};

图1.1

(2)程序中需要用到的主要变量为syn,token和sum

1.3.2 扫描子程序的算法思想:

首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。扫描子程序主要部分流程如图1.2所示。

编译原理课程设计——简单编译器

图 1.2

1.3.3 词法分析程序的C语言程序源代码: 1.3.4 结果分析:

输入如下:

{

Int x,y; X:=2*y; If(x>5)

Then x:=2*x+2/3; }#

后经词法分析输出如下序列:({ 35} (int 1)(x 10)(, 33)(y 10) 如图1.3所示:

图1.3

(;26)(x 10)

1.3.5 总结:

词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过本试验的完成,更加加深了对词法分析原理的理解。

2 语法分析

2.1 实验目的

编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。

2.2实验要求

利用C语言编制递归下降分析程序,并对简单语言进行语法分析。 2.2.1 待分析的简单语言的语法

用扩充的BNF表示如下: ⑴<程序>::=<声明><语句串>; ⑵<语句串>::=<语句>{;<语句>} ⑶<语句>::=<赋值语句> ⑷<赋值语句>::=ID:=<表达式> ⑸<表达式>::=<项>{+<项> | -<项>} ⑹<项>::=<因子>{*<因子> | /<因子> ⑺<因子>::=ID | NUM | (<表达式>) 2.2.2 实验算法结构

输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。

例如: 输入 {

int a,x,b;

a:=9;

x:=2*3; b:=a+x } 输出 success!

语法分析程序的算法思想 (1)主程序示意图如图2.1所示。

图2.1 语法分析主程序示意图

(2)递归下降分析程序示意图如图2.2所示。

图2.2 递归下降分析程序示意图

(3)语句串分析过程示意图如图2.3所示。

图2-3 语句串分析示意图

(4)statement语句分析程序流程如图2.4、2.5、2.6、2.7所示。

图2.4 statement语句分析函数示意图

2.5 expression表达式分析函数示意图

图 2.6 term分析函数示意图 图2.7 factor分析过程示意图

2.3 结果分析:

输入 后输出success! 如图2.8所示:

图2.8

输入 后输出 error 如图2.9所示:

图2.9

2.4 总结:

通过本次试验,了解了语法分析的运行过程,主程序大致流程为:“置初值” 调用scaner函数读下一个单词符号 调用IrParse 结束。递归下降分析的大致流程为:“先判断是否有声明” 不是则“出错处理”,若是则“调用scaner函数” 调用语句串分析函数 “判断是否为end” 不是则“出错处理”,若是则调用scaner函数 “判断syn=0&&kk=0是否成立”成立则说明分析成功打印出来。不成立则“出错处理”。

3 语义分析程序

3.1 实验目的:

通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。

3.2 实验要求:

采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。

3.3 算法思想:

3.3.1 程序结构图

(1)主程序示意图如图3.1所示。

图3.1 语法分析主程序示意图

(2)递归下降分析程序示意图如图3.2所示。 (3)语句串分析过程示意图如图3.3所示。

图3.2递归下降分析程序示意图

图3.3 语句串分析示意图

(4)statement语句分析程序流程如图3.4、3.5、3.6、3.7所示。

图3.4 statement语句分析函数示意图 图3.5 expression表达式分析函数示意图

图 3.6 term分析函数示意图

图2-7 factor分析过程示意图

3.3.2 设置语义过程

(1)emit(char *result,char *ag1,char *op,char *ag2) 该函数的功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: struct

{ char result[8]; char ag1[8]; char op[8]; char ag2[8];

本文来源:https://www.bwwdw.com/article/2hxe.html

Top