我知道有几个帖子的标题相似。大多数链接到一个死网站 - 无论如何我有一个更具体的问题。

我正在尝试将 EBNF in the XPath spec 转换为直接的 BNF,以便我可以轻松创建与 Bison 兼容的语法文件。

我已经有一段时间没有这样做了,我不记得递归属于生产的哪一边。我认为它是左边的 - 但是当我通过 Bison 生成的解析器运行纯简 XPath 表达式时,我的“直接”翻译给了我语法错误。

因此,如果有人可以幽默我并权衡 - 所以我不是在追逐鬼魂:

在下面的 Expr 规则中:

Expr::=
    ExprSingle ("," ExprSingle)*

这是正确的翻译吗? (将递归放在左边):
Expr::=
    Expr "," ExprSingle
    | ExprSingle

最佳答案

没关系....

你可以把递归放在右边,它应该可以工作,但是你会让解析器“做更多的工作”,因为它必须跟踪递归的脊椎,这样做它必须使用更多的堆栈位置。

关于parsing - 将 EBNF 转换为 LALR 解析器的 BNF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9059602/

10-12 15:21