【问题标题】:Is it possible to create a LL parser using BNF grammar?是否可以使用 BNF 语法创建 LL 解析器?
【发布时间】:2015-08-11 22:33:46
【问题描述】:

我在 google 上查看是否可以使用 BNF 语法创建 LL 解析器,但我在 wikipedia 上看到他们使用类似的东西

S → F
S → ( S + F )
F → a

这不是 BNF 语法。是否可以使用 BNF 语法来创建 LL 解析器,或者您必须只使用 LL 语法?

谢谢

【问题讨论】:

  • 是的,这绝对是可能的。 BNF 只是您可以使用的几种规范格式之一 - 实际上,它更多的是个人喜好问题。
  • 您有指导我使用 BNF 语法创建 LL 解析器的教程吗?在谷歌上没有找到:/ 谢谢
  • 唉,我没有。如果您在非 BNF 中有一个特定的语法示例,但您不知道如何转换,请在此处发布有关该问题的问题,并且很可能有人能够提供帮助。
  • 我目前正在尝试重新编码终端外壳的一部分,并且我已经拥有 BNF 语法。否则,我正在寻找解释如何使用 BNF 语法创建 LL 解析器的教程
  • 你对LL解析了解多少?你熟悉 FIRST 和 FOLLOW 集吗?

标签: parsing grammar bnf ll


【解决方案1】:

是的,你可以。 BNF 只是一种表示上下文无关文法的符号。大致 ::= 是箭头,出现在左侧的 <symbol> 是非终结符,“文字”是终结符(参见 here

考虑到并非所有上下文无关文法都是 LL(1),有些文法没有 LL 解析器。

如果您使用解析器生成器,您会很快发现您的语法是否为 LL。但如果不是,可能很难纠正(尤其是如果您没有语言理论背景)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多