2011-07-12 8 views
1

bison/yacc GLR-parserで 'expected token'を取得するには?bison/yacc GLR-parserで 'expected token'を取得するには?

こんにちは、私はやっているプロジェクトで

、いくつかのあいまいなgramar there'er。だから、私は%glr-parserを使ってシフト/コンフリクトを解決しようとしています。

私は非GLRパーサーを使用していましたが、構文エラーを検出すると、yystate(グローバル変数)を使用して "予想されるトークン"を取得できますが、GLRパーサーに切り替えた後、グローバル変数ではありません。

私の質問は、構文エラーがあるときにGLR-parserで "期待されたトークン"を得るためにとにかくありますか?

+0

これを解決しましたか? – haroldcampbell

答えて

1

有効なyystateという情報がGLRパーサーに存在しないため、「期待されるトークン」という単純な解決策はありません。

デフォルトのLALRパーサーとGLR解析アルゴリズムの違いを理解しなければならない理由を知りたい。これはここによく書かれています:http://www.delorie.com/gnu/docs/bison/bison_11.html。基本的に、GLR(Generalized LR)は複数の同時スレッドを実行し、それぞれが異なる曖昧な選択肢を試してマッチを検索します。それらのどれも一致しない場合、構文解析は失敗し、構文エラー状態になります。したがって、1つの期待トークンは存在できませんが、多くの予想トークンが存在する可能性があります。それがあいまいである理由です。 bisonパーサーの仕組みを説明している良い文書は、http://www.cs.uic.edu/~spopuri/cparser.htmlです。これはGLR以外の解析でyystate変数の機能を説明しています。

GLRパーサーにとってより良いエラーメッセージを生成する方法は、@ riciの答えであるAdditional syntax error message on GLR parser when syntax is ambiguousで最も詳しく説明されています。多くの点でこの質問は実際にはその質問と重複しています。

なぜ同じ問題について両者が尋ねているのか、あまりにも明白ではないので、重複として閉じられていません。

関連する問題