私はパーサーの書き方を学んでおり、そのために SQL 用のパーサーを書いています。
私が書いている文法は、標準の yacc と非常によく似たperl Parse::Eyappモジュールによって処理されます。
文法を perl にコンパイルするときに、単一オペランド演算子のサポートを追加したとき (正しい名前がわからない - 12! や @@ 'value' などの演算子)、次のようになりました。
14 shift/reduce conflicts
以前にもありましたが、適切な %left と %right を追加することで解決しましたが、今回は問題が 1 オペランド演算子と従来の 2 オペランド演算子の間の競合にあるように思われるため、途方に暮れています。
完全な文法はここに入れるには長すぎるので、リンクだけにします.
それをコンパイルするには、次のコマンドを使用します。
eyapp -m Pg::SQL::Parser::SQL -o SQL.pm SQL.eyp
eyapp ...
詳細を有効にして実行すると、この出力が得られます。
問題は、ここで問題を解決するにはどうすればよいかということです。