我知道有几个帖子的标题相似。大多数链接到一个死网站 - 无论如何我有一个更具体的问题。
我正在尝试将 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/