【发布时间】:2014-08-21 00:15:30
【问题描述】:
我正在使用上述正则表达式来识别 Flex 中的多行 cmets:
[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/] { /* DO NOTHING */ }
但在我看来,flex/bison 没有正确返回行计数器。 例如:
输入:
1 ___bqmu7ftc
2 // _qXnFEgQL9Zsyn8Ohtx7zhToLK68xbu3XRrOvRi
3 /* "{ output 6 = <=W if u7 do nN)T!=$||JN,a9vR)7"
4 -758939
5 -31943.6165480
6 // "RND"
7 '_'
8 */
9 [br _int]
输出:
1 TK_IDENT [___bqmu7ftc]
4 [
4 TK_IDENT [br]
4 TK_IDENT [_int]
4 ]
该行应该是 9 而不是 4。
有什么想法吗?
【问题讨论】:
-
您需要包含更多代码 :) 我只能说,当我包含
%option yylineno时,标识符、运算符和空格的模式,并打印 yylineno 和返回令牌,它工作正常。
标签: c compiler-construction flex-lexer