【问题标题】:Is This Valid BNF Grammar?这是有效的 BNF 语法吗?
【发布时间】:2014-10-29 10:05:13
【问题描述】:

我刚刚写了一些 BNF,我是个菜鸟,所以我想和你们核实一下这是否是有效的语法,以及提供的输入是否可以运行?

BNF:

<expr> -> <id>  <id> + <id> +  | <id>  <id> + <id> - | <id>  <id> - <id> + | <id>  <id> - <id> -
<id> ->  A | B | C

我的后缀输入:

A B + C -

这行得通吗?提前致谢。

【问题讨论】:

    标签: bnf


    【解决方案1】:

    符号和表达式之间的有效分隔符是::=,而不是-&gt;。 详情请查看wikipedia

    无论如何,更好的语法应该是这样的:

    <expr> ::= <id> [ <id> [ <operator> ]? ]{2}
    <operator> ::= '-' | '+'
    <id> ::= [ '0' .. '9' | 'A' .. 'Z' | 'a' .. 'z' ]+
    

    【讨论】:

    • 我当前的代码可以使用::=吗?我试图找出我是否有正确的想法。我现在并没有真正想写出漂亮的语法。
    • 我不知道。 BNF 是一种标准,就像您定义协议但在此处用于语言语法时一样。你用的是什么解析器?
    • 我没有使用解析器。我现在实际上正在学习 BNF,而我的教授只是让我们编写语法而不进行测试。我正在做的特定问题是“在 BNF 中为仅涉及变量 A、B 和 C 的后缀加法和减法表达式编写语法。”。
    • 那么,没有任何代码可以使用::=“工作”,因为没有代码。定义 BNF 语法后,您将编写代码(例如创建简单的LL parsers)。
    • 那么我有什么办法知道我的 BNF 是否是作业问题的有效答案?
    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多