0

Lex を使用して、C プログラムで特定の入力文字列を解析しています。これまでのところすべてが機能していますが、元の入力文字列で一致したトークンの範囲を知りたいです。これは可能ですか?

yytext は一致したトークンを提供しますが、元の文字列のトークンの範囲は提供しません。トークンは入力文字列に複数回存在する可能性がありますが、毎回有効であるとは限らないため、単純に最初/最後などを検索することはできません。入力文字列でのトークンの出現 - 次の例が示すように、一致の正確な範囲を知る必要があります。

入力例: 「5 分後に牛乳を買うようリマインドして」

token "min":  range 27-30 (and not 2-5)

yy_buffer_state は既に調べましたが、必要な情報が保持されていないようです。

4

1 に答える 1

1

基本的に、各フレックス ルールで += strlen(yytext) をカウントします。キーワードや変数などに一致するルールでは、必要な範囲 (私はそれらを座標と呼びます) が必要です int start = count; カウント += strlen(yytext); int end = count の場合、start と end は座標です。

于 2013-04-02T23:41:52.447 に答える