简单编译器编译原理课设.doc
文本预览下载声明
编译原理课程设计
简单编译器
目 录
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*
空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
1.2.2 各种单词符号对应的种别码:
表1.1 各种单词符号对应的种别码
单词符号 种别码 单词符号 种别码 int 1 ++ 17 If 2 -- 18 Then 3 := 19 else 4 20 while 5 != 21 do 6 = 22 read 7 23 write 8 = 24 lettet(letter|digit)* 10 == 25 dight dight* 11 ; 26 = 12 ( 27 + 13 ) 28 - 14 \ 30 * 15 ! 31 / 16 : 32 , 33 { 35 } 36
1.2.3 词法分析程序的功能:
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
例如:对源程序输入如下:
{
Int x,y;
X:=2*y;
If(x5)
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 词法分析
显示全部