# RecursiveSubroutine **Repository Path**: Meloor/RecursiveSubroutine ## Basic Information - **Project Name**: RecursiveSubroutine - **Description**: 编译原理语法分析——递归子程序类,C++实现。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-24 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RecursiveSubroutine #### 介绍 编译原理语法分析——递归下降子程序类,C++实现。 #### 实验说明 一、实验目标 分别采用自顶向下和自底向上两种语法分析方法,编制一个语法分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析实验内容。 二、实验内容 选取一种自顶向下语法分析方法(递归子程序、LL分析法)和一种自底向上语法分析法(算符优先分析、LR分析方法)设计语法分析器,并对简单语言进行语法分析。 2.1 待分析的简单语言的语法 用扩充的BNF表示如下: ⑴<程序>::=begin<语句串>end ⑵<语句串>::=<语句>{;<语句>} ⑶<语句>::=<赋值语句> ⑷<赋值语句>::=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 ##### 递归子程序 参看项目代码 #### 开发工具 VS2015 #### 依赖 词法分析器:[https://gitee.com/Meloor/LexicalAnalyzer](https://gitee.com/Meloor/LexicalAnalyzer) #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)