程序测试与文法分析:LL(1)文法判定与属性文法实例

需积分: 0 1 下载量 89 浏览量 更新于2024-08-05 收藏 180KB PDF 举报
本资源是一份关于编译原理的测试试卷,包含四个题目,总分为30分。以下是每个部分的知识点总结: 1. **程序执行输出结果** (6分) - 题目考察了参数传递方式对程序行为的影响。在程序`programtest`中,给定的`CAL`子例程接受两个整数参数并进行操作。当参数传递方式分别是: - 传值:函数调用时复制值,原始变量不会改变,因此输出`j`保持为3,得2分。 - 传地址:函数接收的是变量地址,内部修改会影响原始变量,所以经过计算后`y`等于`y*y+y-x`,`x`不变,`j`最终为16,得2分。 - 传名:等同于传址,也是16,同样得2分。 2. **文法分析与LL(1)判断** (6分) - 文法`G(M)`是一个四元文法,涉及非终结符M、T、B和D。首先计算了每个非终结符的FIRST和FOLLOW集合,确认文法不含左递归。接着,检查FIRST集合和FOLLOW集合的交集,发现T和FOLLOW(T)的交集不为空,这意味着文法不是LL(1)文法,因为LL(1)文法要求FIRST集与FOLLOW集的交集为空。 3. **属性文法与语法树和属性计算** (4+2分) - 属性文法中的例子要求画出字符串`abc`的语法树,并计算属性。语法树展示了A、B、C的结构关系。属性计算规则表明,S.v最终会累积A.u和B.v的值,初始S.u=5,经过计算S.v的值为3*5 + 5 = 18。 4. **运行时DISPLAY表** (4分) - DISPLAY表在编程中用于跟踪程序执行的嵌套层次。它记录了当前过程的层次信息,以便在处理嵌套调用时追踪状态。在进入第i层过程时,DISPLAY表会包含i+1个单元,用于存储该过程及其调用栈的信息。这部分没有具体给出实际的DISPLAY表内容,但解释了其概念和作用。 综合来看,这份试卷涵盖了编译原理中的关键概念,如参数传递、文法分析、属性文法、语法树构建以及程序执行环境的管理。理解和掌握这些内容对于理解编译器设计和语言理论至关重要。