2012-05-09 16 views
1

したがって、数値、浮動小数点数、記号、およびコメントと一致するflexプログラムを作成する必要があります。 正規表現はファイル内にあります。Flex(Lex)出力が正しくない

flex.lファイルhttp://pastebin.com/iuJ8WW6m

奇妙な部分が出力されます。

私はそれを与えているとしましょう:

0 0.0 323 323.4 1.3.4 

variable another_variable 

"string" 

;comment 

69 

これが出力されます:

Number: -->0<-- 
Float: -->0.0<-- 
Number: -->323<-- 
Float: -->323.4<-- 
Float: -->1.3<-- 
Number: -->4<-- 
Symbol: -->variable<-- 
<--bol: -->another_variable 
String: -->"string"<-- 
<--ment: -->;comment 
Number: -->69<-- 

なぜ、このような< "another_variable" で出力され--bol: - > another_variable ? 私はいくつかのc/C++を知っています。

同じことが< --mentのために行く: - >;

コメントどうやらそれが3最後の文字(< - )をとり、最初の3(COM)の上にそれらを置く、しかし、なぜ?それは、それが再び台無しにした後、私は新しい行を挿入するとすぐに、;:「 - - <コメント>コメントは、」私はそれを唯一

;comment 

出力が得られた場合

です。私もprintfとECHOを使って同じことを試みましたが、結果は同じです。

ヘルプ、ありがとうございます!

+0

この出力は端末に出力されていますか?どのシェル/ターミナルですか?テキストファイルですか? –

+0

私はそれをコンパイルするためにcygwinを使っています(windwos上)。そして、はい、出力は端末です。 – alex2005

答えて

0

認識されたコメントまたはシンボルに続く改行シーケンスの一部がyytextに取り込まれ、デバッグトレースにエコーバックされている可能性があります。これと同様に、文字クラスに\ rを追加

試してみてください。いずれにしても

SYMBOLS   [a-zA-Z][^\,\.\"\(\) \n\t\r]* 
COMMENTS  ";"[^\n\r]* 

あなたはそれのようなツールを使って、キャラクタ単位調べることができるように、あなたはあなたのデバッグ出力をファイルにパイプする場合がありますod。

+0

ありがとうございます。私はまだそれが動作する方法を理解していないにもかかわらず、束をありがとう! – alex2005

+0

あなたはおそらく、WindowsとUnixの間の改行シーケンスの違いに悩まされているでしょう。 Cygwinはおそらくその違いを分けるので、話す。ところで、[^ \ s]は[^ \ n \ t \ r]と同じでなければなりません。 –

関連する問題