美文网首页
实验二、语法设计——基于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