gpt4 book ai didi

c++ - Flex 词法分析器输出修改

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:00 25 4
gpt4 key购买 nike

如何在 C++ 中使用 flex lexer 并修改 token 的 yytext值(value)?比方说,我有这样的规则:

"/*"    {
char c;
while(true)
{
c = yyinput();
if(c == '\n')
++mylineno;

if (c==EOF){
yyerror( "EOF occured while processing comment" );
break;
}
else if(c == '*')
{
if((c = yyinput()) == '/'){
return(tokens::COMMENT);}
else
unput(c);
}
}
}

我想获得 token tokens::COMMENT评论值介于 /* 之间和 */ .(上述解决方案将“/*”作为值。

另外,非常重要的是跟踪行号,所以我正在寻找支持它的解决方案。

编辑当然我可以修改yytextyyleng值(如 yytext+=1; yyleng-=1 ,但我仍然无法解决上述问题)

最佳答案

我仍然认为开始条件是正确的答案。

%x C_COMMENT
char *str = NULL;
void addToString(char *data)
{
if(!str)
{
str = strdup(data);
}
else
{
/* handle string concatenation */
}
}

"/*" { BEGIN(C_COMMENT); }
<C_COMMENT>([^*\n\r]|(\*+([^*/\n\r])))* { addToString(yytext); }
<C_COMMENT>[\n\r] { /* handle tracking, add to string if desired */ }
<C_COMMENT>"*/" { BEGIN(INITIAL); }

我引用了以下内容:
http://ostermiller.org/findcomment.html
https://stackoverflow.com/a/2130124/1003855

您应该能够使用类似的正则表达式来处理字符串。

关于c++ - Flex 词法分析器输出修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15836364/

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