编译原理实验语义分析_「编译原理」LL(1)文法分析,简单优先分析

首先我们来介绍一下LL(1)文法分析。

LL(1)文法是一种自顶向下的分析方式,是从非终结符到终结符的分析方式,这种方式和我们之前说的LR(0)分析方式是刚好相反的,在我们使用LR(0)分析方式的时候。我们可以看到这个符号栈是由开始空的而后变为终结符之后再变为非终结符的过程。

下面介绍一下用LL(1)文法进行分析句子的过程。

首先要写出FIRST集和FOLLOW集。

之后根据FIRST集和FOLLOW集来进行预测分析表的构造

预测分析表构造的时候若FIRST集没有推出ε那么就可以直接在预测分析表的FIRST集的位置填入原非终结符所对应的定义项。如果推出了ε,那么就要在FOLLOW集的位置填入ε。

当然,我们要注意的一个地方就是如果表中的一个空格中填入了两个元素(select集交集非空),那么就说明这个文法不适合用LL(1)文法来分析,就要改变分析方式。


下面讲一下具体的分析过程

符号栈的开始是非终结符S

输入串的栈中的内容是输入串的从尾部逐个输入栈。

之后我们要从之前填好的预测分析表中来找到对应的规则,从这个非终结符开始,将非终结符变为终结符和非终结符的和。之后,一旦这个符号栈和这个输入串的栈的栈顶相同,那么就可以进行弹出栈顶元素。因为我们弹出的结果肯定是终结符,所以剩下的结果肯定是一个非终结符。当栈顶的元素被不断地弹出之后,之后如果这个符号栈和输入串的栈均为空的时候,就可以表明现在的分析是成功的。

876ad496bce2dee5b91838db0d36d7cd.png

之后我们来介绍一下简单优先分析

简单优先分析是按照终结符和非终结符之间的优先关系来确定句柄的。

这里首先给出优先关系的定义,这里的优先关系的定义要在原先的“>”,“

当两个符号直接连在一块的时候例如……XYZ……则XYZ的优先关系相等。如果Y还可以继续向下推,则有XZ

若两个都能继续向下推,由于我们从最左下角的句柄开始进行规约,所此时左边推出的优先级要大于右边的优先级。关于句柄的概念我们在下一章的算符优先分析中再进行介绍。

这里知道了关系之后我们就可以根据它们的关系来构造关系矩阵表。简单优先分析的关系矩阵中是出现过得所有的元素,包含终结符和非终结符。

从文法的第一个句子开始向后找关系,之后把关系矩阵写出来,需要注意的是这里的大于号和小于号是不能交换的比如A>B并不等于B

简单优先分析方法的步骤

首先这里分为符号栈,关系,输入串栈,规则,四个对应的

符号栈开始为#,输入串的栈为我们要分析的字符串的逆序入栈。当关系为小于和等于的时候输入栈的栈顶弹出进入符号栈,关系为大于的时候进行规约。

我们直接查表来进行比较要注意,此时文法的开始符号的旁边有这个“#”,也可以由此得到“#”和文法开始符号之间的关系。

在进行规约的时候,我们要在后面的规则中写出对应的文法。之后一直是这个过程直到规约到文法的初始符。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 编译程序的工作过程通常是词法分析、语法分析语义分析、代码生成、代码优化。编译程序的这些过程的执行先后就构成了编译程序的逻辑结构,但是这些逻辑结构不一定是按照某一个固定顺序的,也有可能是按照平行或者互锁的方式执行的。 本次课程设计是就简单优先文法原理来做一个简单优先分析器。简单优先分析文法的基本思想是对一个文法按一定的原则求出该文法所有符号包括终结符和非终结符之间的优先关系,按照这种关系确定规约过程中的句柄,它的规约过程实际上是规范规约。在算法实现过程中,主要使用visual C++进行编程。 关键字 简单优先关系 大于关系 小于关系 等于关系 Abstract Compiler of the process is usually lexical analysis, grammar analysis, semantic analysis, code generation, code optimization. Compiler of the implementation of these processes have posed a compiler on the logical structure, but these may not necessarily be in accordance with the logical structure of a fixed order, may also be in accordance with the parallel or interlocking approach to the implementation of the. This course is designed on the simple principle of priority to do a simpegrammar priority Analyzer。Simple grammar priority of the basic idea of a grammar obtained by certain principles of the grammar, including all the symbos at the end and at the end of the non-priority, according to this relationship in the process of determining the statute handler, it is actually the process of regulating the Statute of the Statute. In the algorithm process, the main use of visual C programming. Key Words Simple priority relations Over relations Less than relations Equal relations 目 录 摘要…………………………………………………………………………………………2 一、概述……………………………………………………………………………………4 (一)实验环境与开发工具 ………………………………………………………‥4 (二)简单优先文法简介 ……………………………………………………………4 (三)基本概念 ………………………………………………………………………4 (四)优先关系 ………………………………………………………………………4 二、需求分析 ……………………………………………………………………………5 (一)总体功能需求 …………………………………………………………………5 (二)系统的主要功能函数 …………………………………………………………5 (三)系统的设计思想 ………………………………………………………………6 三、详细设计 ……………………………………………………………………………7 (一)等于关系模块 …………………………………………………………………7 (二)小于关系模块 …………………………………………………………………8 (三)大于关系模块 …………………………………………………………………10 (四)句子识别模块 …………………………………………………………………12 四、测试结果………………………………………………………………………………16 、小结……………………………………………………………………………………19 六、参考文献 ……………………………………………………………………………20 附录 源程序 ………………
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值