全球旧事资料 分类
C语言编译器的设计与实现
01计算机4班18号任春妍2号陈俊我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:1词法分析部分2语法分析处理及四元式生成部分3输出显示部分
一.词法分析器设计
由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译
程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单
词符号格式为如下的二元式:单词种别,单词自身的值
defi
eACC
2
defi
esyl_if
0
defi
esyl_else1
defi
esyl_while2
defi
esyl_begi
3
defi
esyl_e
d4
defi
ea
5
defi
esemicolo
6
defi
ee
7
defi
eji
ghao8
defi
es
9
defi
eL
10
defi
etempsy11
defi
eEA
12
defi
eEO
13
defi
eplus
14
defi
etimes15
defi
ebecomes16
defi
eop_a
d17
defi
eop_or18
defi
eop_
ot19
defi
erop
20
defi
elpare
t21
defi
erpare
t22
defi
eide
t23
defi
ei
tco
st24
f函数说明1.读取函数readli
e、readch词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件”sourcedat”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行readch从输入缓冲区获得的;若缓冲区已被读空,则再执行readli
e从sourcedat中读取下一行至输入缓冲区。2.扫描函数sca
扫描函数sca
的功能是滤除多余空格并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。3.变量处理fi
d()变量处理中首先把以字母开头的字母数字串存到spelli
g数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配(变量匹配函数fi
d()),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量(值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。4.数字识别
umber数字识别将识别出的数字填入二元式结果缓存数组。5.显示函数显示函数的功能在屏幕上输出词法分析的结果(即二元式序列程序),同时给出二元式个数及源程序行数统计。
二.语法分析器设计
语法分析器的核心是r
好听全球资料 返回顶部