この単純なパーサーを Lemon を使用してコンパイルしようとすると、競合が発生しますが、どのルールが間違っているのかわかりません。binaryexpression または callexpression を削除すると、競合がなくなります。
%left Add.
program ::= expression.
expression ::= binaryexpression.
expression ::= callexpression.
binaryexpression ::= expression Add expression.
callexpression ::= expression arguments.
arguments ::= LParenthesis argumentlist RParenthesis.
arguments ::= LParenthesis RParenthesis.
argumentlist ::= expression argumentlist.
argumentlist ::= expression.
[編集] LParenthesis に左側の結合性を追加すると、競合が解決されました。ただし、それが正しいことかどうかは知りたいです。一部の文法 (fe C++) では、構築演算子 '()' と呼び出し演算子 '()' の優先順位が異なることがわかりました。だから私は正しいことについて確信が持てません。