LL(1),LR(0),SLR(1)文法分析器

LL(1),LR(0),SLR(1)文法分析器

  1. 软件介绍

    该软件是一款集成的文法分析器,用户输入文法后能识别LL(1)文法,LR(0)文法和SLR(1)文法,并为用户提供分析表。
    开发环境:Windows 10
    开发工具:QT 5.9

  2. 界面介绍


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 使用方法

    1. 用户进入可执行程序文件夹,选择SyntaxAnalysis,点击运行软件。
    2. 用户开始输入文法:
      2.1 用户每次输入一条产生式,分别输入左部和右部,其中左部只能是一个非终结符,右部可以是一个候选式,也可以是以“|”符号分开的部分或全部候选式。
      2.2 用户每输入完成一次后,点击添加按钮,软件加入该产生式,用户可以在左边的窗口看见输入的产生式。
      2.3 用户重复2.1、2.2步骤直到确认输入完成。
    3. 用户点击分析按钮,软件开始分析该文法,并给出相应的分析结果。
      3.1 左边的窗口会给出这个文法是否为LL(1)文法,LR(0)文法和SLR(1)文法。
      3.2 右边的窗口会给出这个文法的first集,follow集,select集。
      3.3 如果分析成功,该软件会抛出对应文法的分析表。
    4. 用户可以点击重置按钮,继续输入新的文法然后分析。
  4. 使用说明(注意事项)
    1.用户输入
    1.1对于用户的输入和系统输出要说明的是,该系统规定了一部文法字典可以接收的一系列文法符号。具体如下:
    非终结符:26个大写字母是用户可以输入的。不接受大写字母加一瞥,如:A’。
    终结符:26个小写字母以及+、-、*、/、{、}、[、]、(、)、=、逗号、分号是用户可以输入的。
    空串ε:以字符@代替。
    候选式分隔符:|。
    除了上述的符号,其余的输入占时是不接受的。
    1.2 用户输入一个非终结符及开始符号时,无需考虑其候选式是否应该唯一,该软件将根据用户的输入决定是否自动拓展文法,拓展后的文法的开始符固定为S’。
    2.分析表
    2.1.LL(1)分析表中的内容表示使用哪一个产生式。
    2.2.LR(0)分析表和SLR(0)分析表中行标题代表项目规范集的编号,也可以理解为DFA的状态编号。S和数字均代表跳转到相应状态,acc代表接受,项目代表使用该产生式进行规约,空白代表出错(注意:形如A->.的项目代表该产生式右部为空串ε的产生式)。
    3.关于文法类型的说明
    3.1.系统只能识别2型文法以上的文法,及左部只能式单一非终结符。
    3.2.用户可以输入含左递归和含回溯的文法。
    3.3.原则上该系统对每一种文法都要进行分析,但由于本人能力时间有限,对于含左递归(直接或间接)的文法,该系统只分析是否为LL(1)文法,并给出first集,follow集,select集,不再进行LR(0)文法和SLR(1)的分析。
    4.其他
    该软件仍然存在一些已知和未发现得缺陷与错误,欢迎用户提出与指正,本人将继续对这款软件进行改进。

*附:关于间接左递归文法的判断错误
对于课件中给出的文法:S->L=R|R
L->*R|i
R->L
其应该是没有左递归的,但由于算法问题被误判成了左递归
这是没有增加左递归判断的结果,根据与课件对比,这才是正确的。
在这里插入图片描述这是增加了左递归判断后的结果,由于判断了左递归,故后续LR和SLR便没能判断,而且求出的first集与follow集也是错的。
在这里插入图片描述
最后给两个运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值