Flex词法器输出修改
Flex lexer output modification
如何在c++中使用flex lexer并修改令牌的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
,但我仍然不能解决上述问题)
我仍然认为启动条件是正确的答案。
%x C_COMMENT
char *str = NULL;
void addToString(char *data)
{
if(!str)
{
str = strdup(data);
}
else
{
/* handle string concatenation */
}
}
"/*" { BEGIN(C_COMMENT); }
<C_COMMENT>([^*nr]|(*+([^*/nr])))* { addToString(yytext); }
<C_COMMENT>[nr] { /* handle tracking, add to string if desired */ }
<C_COMMENT>"*/" { BEGIN(INITIAL); }
我使用了以下引用:
http://ostermiller.org/findcomment.html
https://stackoverflow.com/a/2130124/1003855
您应该能够使用类似的正则表达式来处理字符串
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- 当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
- 如何修改Lambda表达式以将输出放入文本文件
- 打开一个文件,修改每个字符,然后执行反向操作不输出原始文件
- 我在让我的代码输出整个链表时遇到问题.它只是输出我修改过的一些文本文件,而不是整个东西
- 修改视频帧并将其发送回视频输出流
- Delphi 2007 EXE和C++DLL:调试输出:027D4FF8处的堆块在027D5009处修改,超过了请求的9
- 修改 gettext .pot 文件输出以排除空字符串或仅包含空格的字符串
- DUMPBIN 实用程序修改了名称输出
- 两个窗口-一个由线程随机输出修改
- c++.valgrind输出:Syscall param open(filename)指向不可修改的字节
- C++ 修改此输出
- 未修改 CUDA 内核函数输出变量
- 修改排列算法以防止重复打印输出的策略
- 输出声明Heap在释放后被修改,但没有添加到Heap中
- Flex词法器输出修改
- 不要修改程序,打印一些值作为输出 - 不寻常的(?)家庭作业