Flex / Bison:配置yylineno以识别' \ r'作为换行符

时间:2017-05-31 23:52:24

标签: bison flex-lexer yacc lex

有没有办法配置/修改yylineno以将单个\r(回车)字符识别为换行符?

最后,我想将yylineno用于3种不同类型的文件:

  • \n:类似Unix的
  • \r\n:基于Windows(将被识别为单个换行符,而不是两个换行符,即\r + \n
  • \r:例如经典Mac OS

我知道我可以定义自己的变量来跟踪Flex中的行号,并在每次找到换行符(\r|\n|\r\n)时将其递增,但我更喜欢如果可用,请使用内置的Flex功能。

谢谢。

1 个答案:

答案 0 :(得分:2)

坏消息是flex没有这个功能。行计数根本不可配置,它取决于模式的静态分析,以查看哪些可能与换行符匹配。如果换行符序列长度超过一个字节,那是不可能的,因为换行符序列可以分成两个单独的标记。 (如果要实现自己的行计数器,请务必考虑这一事实。最简单的解决方案是确保令牌在\r序列\r\n之后无法结束。)

好消息是\r - 终止文件现在非常罕见。因此,不处理它们的成本可能不会很大。