フレックスでは、正規表現の1つの一致に対して複数のトークンを返す必要があります。これを行う方法はありますか?FLEX:一度に複数のトークンを返す方法はありますか?
7
A
答えて
0
すべて一致しますか?正規表現関数または文字列関数を使用していますか?グローバルフラグを使用します。
フレックスに関しては、私はあなたがそれを行うことはできないと思います。一度に1つのパターンで一致するかどうかをテストして、おそらく範囲外です。なぜそれが欲しいのですか?最適化として?スコープの問題?
2
返されるトークンのキューを作成し、yylex()
の冒頭にトークンをチェックして戻します。
-1
通常、これはスキャナの上にあるパーサによって処理されます。これにより、よりクリーンなコードが提供されます。
%option noyywrap
%top {
#define TOKEN_LEFT_PAREN 4711
#define TOKEN_RIGHT_PAREN 4712
#define TOKEN_NUMBER 4713
}
%x PAREN_STATE
%%
"(" BEGIN(PAREN_STATE); return TOKEN_LEFT_PAREN;
<PAREN_STATE>{
[0-9]+ return TOKEN_NUMBER;
")" BEGIN(INITIAL); return TOKEN_RIGHT_PAREN;
.|\n /* maybe signal syntax error here */
}
%%
int main (int argc, char *argv [])
{
int i;
while ((i = yylex()))
printf ("%d\n", i);
return 0;
}
これをある程度までエミュレートすることができますが、文法が複雑になると非常に乱雑になります。
関連する問題
- 1. MySQLストアドプロシージャから一度に複数の行を返す方法
- 2. matplotlibで複数のxlabelsを一度に割り当てる方法はありますか?
- 3. 複数のエントリを一度にHashMapに挿入する方法はありますか?
- 4. Flexアコーディオンコンポーネント:複数のナビゲーションコンテンツを一度に開くことができますか?
- 5. 複数のタグを使ってAndroid adbシェルlogcatを一度にフィルタリングする方法はありますか?
- 6. PHPフォームを使用して一度に複数の画像をulploadする方法はありますか?
- 7. Cでトークンを数える方法はありますか?
- 8. vimから複数のファイルを一度に開く方法はありますか?
- 9. エンティティフレームワークで一度に複数の値をクエリする方法はありますか?
- 10. 複数のアトリビュートを一度に見つけて削除する方法はありますか?
- 11. Microsoftグラフ - 一度に複数の電子メールを更新する方法はありますか?
- 12. Javaで複数のスレッドで一度に各スレッドを停止する方法はありますか?
- 13. 一度に複数の文字を置換()する方法はありますか?
- 14. GitKrakenで複数のファイルを一度に選択してステージングする方法はありますか?
- 15. ng-bootstrap Datepicker:一度に複数の日付を選択する方法はありますか?
- 16. 一度に複数のyamlファイルを素早く編集する方法はありますか?
- 17. 複数行のASCIIテキストを一度に1行ずつ印刷する方法はありますか?
- 18. サブクエリで複数の結果を返す方法はありますか?
- 19. 複数のリストを一度に繰り返し処理する方が良い
- 20. FlexでOpenLayersを使用する方法はありますか?
- 21. mongoDBで複数のテーブルを一度にインデックスする方法は?
- 22. 一度に複数のWindowsフォームをプログラミングする方法は?
- 23. 複数の「アレイ」を一度にフィルタリングする方法は?
- 24. 一度に複数の写真をアップロードする方法は?
- 25. Jisonレクサーで複数のトークンを返す方法
- 26. 複数のストリームを繰り返し処理し、一度に1つの要素を読み取る方法はありますか?
- 27. Cの関数から複数の変数を返す方法はありますか?
- 28. 一度に複数の値をリストに挿入する方法
- 29. 複数回のPythonコードを繰り返します - それを凝縮する方法はありますか?
- 30. ブーリアンに基づいて一連の数値を返すよりエレガントな方法はありますか?
正直言って、私はかなりフレックスしていて、わかりません。私は正規表現と文字列のマッチングを組み合わせて使用していると思っていました。 {INT} {yylval.Int = ATOI(yytext); INTを返す;}私が欲しいもの 一度に2つのトークンを返すことができるようになる。ここで は "(" \t \t {L_PARENを返す}例 あります。 – Eburetto