【问题标题】:Flex(Lex) output not rightFlex(Lex) 输出不正确
【发布时间】:2012-05-10 04:34:52
【问题描述】:

所以我必须制作一个匹配数字、浮点数、符号和 cmets 的 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”的输出是这样的 another_variable ? 我知道一些 c/c++,对我来说这是 0 意义。

;comment

显然它需要最后 3 个字符 (

如果我只给它

;comment

输出是“评论:-->;评论

帮忙,谢谢!

【问题讨论】:

  • 这是输出到终端吗?什么外壳/终端?到文本文件?
  • 我正在使用 cygwin 编译它(在windwos上)。是的,输出是一个终端。

标签: c++ g++ lex


【解决方案1】:

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

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

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

无论如何,您可能希望将调试输出通过管道传输到一个文件中,以便您可以使用 od 之类的工具按字符检查它。

【讨论】:

  • 非常感谢。尽管我仍然不明白它是如何工作的,但非常感谢!!!
  • 您可能会被 Windows 和 Unix 之间换行符的不同所困扰。可以这么说,Cygwin 可能会分裂差异。顺便说一句, [^\s] 应该等同于 [^ \n\t\r] 为您的目的。
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多