複雑な言語から特定の文法要素を取得したいので、flex と bison を使用してフィルターを作成しようとしています。私の計画は、flex + bison を使用して文法を認識し、関心のある要素の場所をダンプすることです。(次に、スクリプトを使用して、ダンプされた場所に従ってテキストを取得します。)
flex は bison-locations と呼ばれる bison 機能をサポートできることがわかりましたが、それが正確にどのように機能するか. 私はフレックスドキュメントで例を試しました.yyllocはフレックスによって自動的に設定されていないようです.私はいつも(1,0)-(1,0)
. flex は各トークンの位置を自動的に計算できますか? そうでない場合、実装するためにどのインターフェイス関数が定義されていますか? 例はありますか?
ツールに関するより良い解決策はありますか?
よろしく、 ケビン
編集:
yylex のインターフェースは次のようになります。
int yylex(YYSTYPE * yylval_param,YYLTYPE * yylloc_param );
bison のマニュアルでは、yylloc_param を正しく設定するためにレクサーがどのように実装する必要があるかを指定していません。私にとって、各トークンの列番号を手動で追跡するのは困難です。