これは実際的な問題よりも「原理的に」問題のほうが多いです。 Yaccがプロダクションを減らし、定義されているレクサーから新しいトークンを読み込む順序です。それはのようなプロダクションのセットが指定されると、単一のものにINTEGER BEGIN INTEGER_VALUE
を低減する前に、縮小の順序はYaccで定義されていますか?
INTEGER_BEGIN
INTEGER_VALUE
LESS_THAN
INTEGER_BEGIN
INTEGER_VALUE
yaccは、その意味論の中に、レクサーからLESS_THAN
トークンを読み取ることができます:それは、私はトークンの次のセットを持っていた場合は、次のとおりです。
expr : expr LESS_THAN expr
| integer
integer : INTEGER_BEGIN INTEGER_VALUE
セマンティックアクションで定義されている場合、この変更のルールを実行しますか?
これが起こったかどうかを知る方法はありますか? –
http://www.gnu.org/software/bison/manual/html_node/Default-Reductions.htmlには、既定の縮小のセマンティクスについての詳細な説明が記載されています。注意したように、レクサーの呼び出しが遅れます。 –
bisonのいくつかのバージョンでは、デフォルトのリダクションになっているかどうかを確認するアクションで 'if(yychar == YYEMPTY)'をチェックできます(先読みは読み込まれていません)。 –