RecursiveSubroutine
介绍
编译原理语法分析——递归下降子程序类,C++实现。
实验说明
一、实验目标
分别采用自顶向下和自底向上两种语法分析方法,编制一个语法分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析实验内容。
二、实验内容
选取一种自顶向下语法分析方法(递归子程序、LL分析法)和一种自底向上语法分析法(算符优先分析、LR分析方法)设计语法分析器,并对简单语言进行语法分析。
2.1 待分析的简单语言的语法
用扩充的BNF表示如下:
⑴::=beginend
⑵::={;}
⑶::=
⑷::=ID:=
⑸::={+ | -}
⑹::={* | /
⑺::=ID | NUM | ()
用上下文无关文法表示如下:
P→begin SList end
SList→S{;S}
S→A
A→ID:=E
E→E+T|E-T|T
T→T*F|T/F|F
F→(E)|ID|NUM
2.2 实验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。
例如:
输入 begin a:=9; x:=23; b:=a+x end #
输出 success!
输入 x:=a+bc end #
输出 error
三、实验报告
实验结束需要提交实验报告,实验报告需要包含自顶向下和自底向上两种分析程序算法(可以用流程图表示)和源代码,以及测试结果截图以及相关分析(需要设计至少10个不同的测试用例)。两种不同算法用两个文档分别保存。
实验过程
改为LL(1)文法
P→begin SList end
SList→S{;S}
S→A
A→ID:=E
E→TE’
E’→BTE’|
B→+|-
T→FT’
T’→CFT’|
C→*|/
F→(E)|ID|NUM
递归子程序
参看项目代码
开发工具
VS
依赖
参与贡献
Fork 本仓库
新建 Feat_xxx 分支
提交代码
新建 Pull Request
码云特技
使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目