美文网首页
实验二、语法设计——基于LL(1)文法的预测分析表法

实验二、语法设计——基于LL(1)文法的预测分析表法

作者: 弱冠而不立 | 来源:发表于2020-06-06 22:43 被阅读0次

一、实验目的
通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证。通过对基于LL(1)文法的预测分析表法模拟程序实验,使学生掌握确定的自上而下的语法分析的实现技术,及具体实现方法。通过本实验加深对语词法分析程序的功能及实现方法的理解 。
二、实验环境
供Windows系统的PC机,可用C++/C#/Java/python等编程工具编写
三、实验内容
1、自己定义一个LL(1)文法

示例如(仅供参考) G[E]:
E →TE'
E' → +TE' | ε
T →FT'
T' → *FT' | ε
F → i | ( E )

2、构造其预测分析表,如

image.png

3、LL(1)文法的预测分析表的模型示意图

4、预测分析控制程序的算法流程

5、运行结果,示例如下

四、实验方式与要求

概要设计(总体设计思想)

我采用了JavaScript语言作为主体代码逻辑支持,然后用HTML显示输入控件,让用户可以自定义测试自己的输入字符串是否可以被接受。

在线预览:基于LL(1)文法的预测分析表法

源码地址:https://github.com/navelorange1999/compilation_principle/blob/master/LL(1).html

详细设计(程序主流程、存储格式、关键函数的流程图、核心代码)

1. 程序主流程

2. 存储格式

3. 关键函数的流程图

l 根据预测分析表,判断输入串是否被该文法接受

4. 核心代码

l 初始预测分析表:

l 根据预测分析表,判断输入串是否被该文法接受

结果分析(输入与输出结果)

总结(设计亮点+实验体会)

主要是依赖于HTML与JS的可视化便捷程度,来达到一种直观的构建并识别的效果,同时采用了JS中的Map数据类型,将预测分析表的一行当作一个整体,进而方便得出产生式右部然后再入栈进行下一步递归,直到符合出口条件,否则抛出异常。本次实验并没有让用户自定义文法,而是程序中直接初始化了预测分析表,所以代码量就没有实验一那么多,但还是能够直观地体会LL(1)文法的分析过程,对其也有了更深入的了解。

相关文章

网友评论

      本文标题:实验二、语法设计——基于LL(1)文法的预测分析表法

      本文链接:https://www.haomeiwen.com/subject/ctzftktx.html