【问题标题】:BNF syntax for simple mini language简单迷你语言的 BNF 语法
【发布时间】:2016-02-12 22:34:30
【问题描述】:

自大学以来已经有 20 年了,哈哈,但我终于遇到了对一个简单的迷你解析器的需求。记得学校的 BNF 哈哈,然后是自上而下的递归解析器或类似的东西。因此,我正在尝试在 BNF 中为我的迷你语言建模……一些无意义的示例说明我的目标:

length > 5
(length > 5)
(length > 5) or (length < 2)
((length > 5) and (length < 7)) or length = 0
not (length > 5)

你基本上可以有一个带或不带括号的表达式,用和/或在它们前面加上 not。很明显,某些事情在开头没有意义,比如 or 等​​等。

到目前为止,我想出了这个:

<syntax>                 :: <not> <expressionSyntax> | <expressionSyntax>
<not>                    :: "not"
<expressionSyntax>       :: "(" <expression> ")" <expressionRepeatSyntax> | <expression> <expressionRepeatSyntax>
<expressionRepeatSyntax> :: ( <andOr> <expressionSyntax> )*
<andOr>             :: "and" | "or"
<expression>             :: need to finish this...

syntax 是前导 not 或没有它,expressionSyntax 是带有可选括号的表达式和可选的表达式堆叠。

我在正确的轨道上吗?绝对看起来不正确的一件事是我不能用这种语法堆叠非表达式:

not (length > 5) 和 not (length > 7)

因为在我的第一次通过时,您似乎只能拥有一个不是一开始的。

【问题讨论】:

    标签: bnf


    【解决方案1】:

    我不认为语法会按照你想要的方式工作。

    查看本教程,其中详细介绍了布尔表达式的 BNF 语法http://compilers.iecc.com/crenshaw/tutor6.txt。第一页的一个例子:

     <b-expression>::= <b-term> [<orop> <b-term>]*
     <b-term>      ::= <not-factor> [AND <not-factor>]*
     <not-factor>  ::= [NOT] <b-factor>
     <b-factor>    ::= <b-literal> | <b-variable> | (<b-expression>)
    

    它可能不包含您想要的可剪切粘贴形式的确切语法,但它应该包含创建它所需的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2012-09-02
      • 2011-08-23
      • 2016-07-14
      • 2011-06-05
      相关资源
      最近更新 更多