编译原理实验报告
班级:班级:计科0702姓名:姓名:宝旭程学号:学号:0708030225指导老师:指导老师:张晓艳
f1设计要求设计要求
(1)对输入文法,它能判断是否为LL1文法,若是,则转(2);否则报错并终止;(2)输入已知文法,由程序自动生成它的LL1分析表;(3)对于给定的输入串,应能判断识别该串是否为给定文法的句型。
2分析分析
该程序可分为如下几步:(1)读入文法(2)判断正误(3)若无误,判断是否为LL1文法(4)若是,构造分析表;(5)由总控算法判断输入符号串是否为该文法的句型。
3流程图流程图
开始
读入文法
有效?
是
是LL1文法?
是
判断句型
报错
结束
4源程序源程序
f语法分析程序i
cludestdlibhi
cludestdiohi
cludestri
ghi
tcou
t0i
t
umbercharstartchartermi
50char
o
_ter50charv50charleft50charright5050分解的产生式的个数所有终结符和非终结符的总数开始符号终结符号非终结符号所有符号左部右部各产生式右部的FIRST和左部的FOLLOW集合所有单个符号的FIRST集合各单个产生式的SELECT集合记录各符号的FIRST和FOLLOW是否已求过记录可直接推出的符号求FOLLOW时存放某一符号串的FIRST集合表示输入文法是否有效表示输入文法是否为LL1文法分析表用户输入时使用求_emp时使用求FOLLOW集合时使用
charfirst5050follow5050charfirst15050charselect5050charf50F50charempty20charTEMP50i
tvalidity1i
tll1i
tM2020charchoosecharempt20charfo20i
ti
charccharpi
tiifstrle
p0retur
0fori0iifpicretur
1ifistrle
pretur
0charccharcAwhilei
c
o
_ter1cretur
c
若在,返回1
若不在,返回0
fvoidrecurcharpoi
ti
tjm0
3kchartemp20chchckstrle
o
_ter
o
_terkch
o
_terk10forj0jstrle
poi
t1jifpoi
t
poi
t0如果‘’后的首符号和左部相同forj
1jstrle
poi
t1jwhilepoi
tjpoi
tj0tempmpoi
tjleftcou
tchmemcpyrightcou
ttempmrightcou
tmchrightcou
tm10m0cou
tifpoi
tj
j1breakelseleftcou
tchrightcou
t0rightcou
t10cou
tforj
jstrle
poi
t1jifpoi
tjtempmpoi
tjelseleftcou
tpoi
t0memcpyrightcou
ttempmrightcou
tmch如果‘’后的首符号和左部不同得到一个非终结符完整的产生式在poi
t中
frightcour