2012-05-09 258 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++和對我來說這使得0感。

也是一樣< --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

你可能會被W​​indows和Unix之間換行符序列的差異絆倒。可以這麼說,Cygwin可能會分化這種差異。順便說一句,[^ \ s]應該相當於你的目的[^ \ n \ t \ r]。 –