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

Flex / Bison: Configure yylineno to recognize '\r' as newline

有没有办法 configure/modify yylineno 将单个 \r(回车 return)字符识别为换行符?

最终,我想对 3 种不同类型的文件使用 yylineno

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

谢谢。

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

好消息是现在以 \r 结尾的文件非常少见。所以不处理它们的成本可能并不大。