我知道有几个帖子的标题相似。大多数链接到一个死网站 - 我还有一个更具体的问题。
我正在尝试将EBNF in the XPath spec转换为直接BNF,这样我就可以轻松创建一个兼容Bison的语法文件。
我已经做了一段时间了,我不记得递归属于哪一方。我认为这是左边的 - 但是当我们通过Bison生成的解析器运行时,我的“直接”翻译使用普通的XPath表达式给出了语法错误。
所以如果有人可以幽默我并且权衡 - 所以我不是在追逐鬼魂:
在以下Expr
规则中:
Expr::=
ExprSingle ("," ExprSingle)*
这是正确的翻译吗? (将递归放在左侧):
Expr::=
Expr "," ExprSingle
| ExprSingle
答案 0 :(得分:4)
那很好......
你可以把递归放在右边,它应该可以工作,但你会让解析器“做更多的工作”,因为它必须跟踪递归的主干,并且这样做它必须使用更多的堆栈位置。
答案 1 :(得分:0)
您的翻译将按照规则Expr
进行递归,并接受其他Expr
的生产形式。
正确的翻译应该是:
Expr::=
ExprSingle Expr1
Expr1::=
Expr1 "," ExprSingle | ε