Flex(Lex)输出不对

时间:2012-05-09 18:08:28

标签: c++ g++ lex

所以我必须制作一个与数字,浮点数,符号和注释匹配的flex程序。 正则表达式在文件中。

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”的输出像这样&lt; - bol: - &gt; another_variable? 我知道一些c / c ++,对我来说这是有道理的。

同样适用于&lt; - ment: - &gt ;;评论

显然它需要最后3个字符(&lt; - )并将它们置于前3个(Com)之上,但为什么呢?

如果我只给它

;comment

输出是“评论: - &gt ;;评论&lt; - ”,一旦我在它之后插入一个新行,它就会再次混乱。我也尝试使用printf和使用ECHO,但结果是一样的。

帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我怀疑在识别的注释或符号后面的换行符序列的一部分被捕获到yytext中,因此在调试跟踪中回显。

尝试将\ r添加到字符类中,如下所示:

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

在任何情况下,您可能希望将调试输出传递到文件中,以便您可以使用od之类的工具以字符方式检查它。