flexでいくつかの正規表現とルールを定義しました。次に、次のような正規表現を記述します。定義したルールのいずれにも一致しない入力がある場合は、その入力を単純に出力します。どのルールとも一致しないため、自動的に印刷されると思われるかもしれませんが、そうではありません。私の例を考えてみましょう。次の正規表現を定義しました。
[a-zA-Z_]+[a-zA-Z0-9_]* printf("%d tIDENT (%s)\n",lineNum,yytext);
このルールは識別子を定義します。識別子はアンダースコアまたは文字で始めることができ、文字、数字、およびアンダースコアの組み合わせです。
[0-9]+ printf("%d tPOSINT (%s)\n",lineNum,yytext,yytext);
このルールは正の整数を認識します。
これらが私の唯一のルールであり、入力がであると仮定します2a3
。これは識別子ではなく、整数でもありません。しかし、私の出力は2
整数を取り、次にa3
識別子を取ります。ただ2a3
、どのルールとも合わないので、そのまま印刷したいです。これどうやってするの?