gpt4 book ai didi

c - Flex 无法正确计算多行注释的行数

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:52 24 4
gpt4 key购买 nike

我正在使用上面的正则表达式来识别 Flex 中的多行注释:

[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/]       { /* 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。

有什么想法吗?

最佳答案

我不知道您是如何生成问题中的测试输出的,但这是一个(几乎)最小的示例,说明如何使用 yylineno。它对我来说很好用:

%{
#define ID 257
%}

%option yylineno
%option noinput nounput noyywrap

%%

[[:space:]]+ { /* DO NOTHING */ }
"//".* { /* DO NOTHING */ }
[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/] { /* DO NOTHING */ }
[[:alpha:]_][[:alnum:]_]* { return ID; }
. { return *yytext; }

%%

int main(int argc, char** argv) {
for (;;) {
int token = yylex();
switch (token) {
case 0: printf("%4d: %s\n", yylineno, "EOF"); return 0;
case ID: printf("%4d: %-4s[%s]\n", yylineno, "ID", yytext); break;
default: printf("%4d: %c\n", yylineno, token); break;
}
}
}

关于c - Flex 无法正确计算多行注释的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25416437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com