私は比較的単純なlex/flexファイルを持っており、それが適切にトークン化されていることを確認するために、flexのデバッグフラグを使用して実行しています。残念ながら、私は常に2つの問題のいずれかに遭遇しています-フレックスが生成するプログラムが2、3のトークンの後で静かに停止するか、文字と文字列を認識するために使用しているルールが呼び出されず、デフォルトのルール代わりに呼び出されます。
誰かが私を正しい方向に向けることができますか?フレックスファイルとサンプル入出力を添付しました。
編集:生成されたレクサーが特定のルール「cdr」の後に停止することがわかりました。これはより詳細ですが、はるかに混乱します。ショートした変更済みlexファイルを投稿しました。
/* lex file*/
%option noyywrap
%option nodefault
%{
enum tokens{
CDR,
CHARACTER,
SET
};
%}
%%
"cdr" { return CDR; }
"set" { return SET; }
[ \t\r\n] /*Nothing*/
[a-zA-Z0-9\\!@#$%^&*()\-_+=~`:;"'?<>,\.] { return CHARACTER; }
%%
サンプル入力:
set c cdra + cdr b + () ;
生成されたパーサーを介して入力を実行することによる完全な出力:
--(end of buffer or a NUL)
--accepting rule at line 16 ("set")
--accepting rule at line 18 (" ")
--accepting rule at line 19 ("c")
--accepting rule at line 18 (" ")
--accepting rule at line 15 ("cdr")
何かご意見は?生成されたプログラムは、入力の半分の後であきらめています!(参考までに、ファイルの内容を生成されたプログラムにリダイレクトして入力を行っています)。