2012-05-09 259 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]。 –