【发布时间】:2013-04-05 14:21:52
【问题描述】:
如何在 C++ 中使用弹性词法分析器并修改令牌的 yytext 值?
可以说,我有这样的规则:
"/*" {
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);
}
}
}
我想获得令牌tokens::COMMENT,其评论值在/* 和*/ 之间。
(上述解决方案将“/*”作为值。
另外,非常重要的是跟踪行号,所以我正在寻找支持它的解决方案。
编辑
当然我可以修改yytext和yyleng的值(比如yytext+=1; yyleng-=1,但是还是不能解决上面的问题)
【问题讨论】:
-
你有一个解析器从这里获取令牌。或者它只是词法分析器?您可以在解析器中轻松解决此问题。
-
我真的很想在词法分析器中解决它 - 有可能吗?
-
对不起,我的问题没有答案:(
-
@danilo2 好的。那么如何处理字符串呢?你有一些水池来存放它们吗?或者告诉我你是如何识别字符串文字的。
标签: c++ parsing token lexer flex-lexer