Я знаю, что есть несколько постов с похожим названием. Большинство ссылок на мертвый сайт - и в любом случае у меня есть более конкретный вопрос.
Я пытаюсь преобразовать EBNF в спецификации XPath в прямой BNF, поэтому что я могу легко создать файл грамматики, совместимый с Bison.
Прошло много времени с тех пор, как я это делал, и я не помню, к какой стороне производства относится рекурсия. Я думал, что это слева, но мой "прямой" перевод дает мне синтаксические ошибки с простыми выражениями XPath, когда они проходят через синтаксический анализатор, созданный Bison.
Так что, если кто-то может меня подшутить и взвесить - значит, я не гонюсь за призраком:
В правиле Expr
ниже:
Expr::=
ExprSingle ("," ExprSingle)*
Это правильный перевод? (поместив рекурсию слева):
Expr::=
Expr "," ExprSingle
| ExprSingle