我在网上尝试了很多解决方案。我尝试过的解决方案之一来自此链接:Flex yylineno set to 1
但它们似乎都不适合我生成符号表的代码。
Source Count
Media 37
Paid 10
Organic 15
值不会发生变化。它继续显示1
我在输入文件中提供的输入是:
yylineno
这是我的代码段:
main()
while
varrrr
if
另外,我说的是lex,而不是yacc。虽然类似,但我试过yylineno has always the same value in yacc file 但解决方案对我没有用!
答案 0 :(得分:2)
其他问题表明Flex可以通过yylineno
指令自动管理%option yylineno
。然而,这是Flex与经典Lex相比的扩展。
假设您无法升级到Flex, 你可能需要更换你的规则
\n { }
与
\n { yylineno++; }
顺便说一句,打印最适合格式字符串末尾的换行符。当换行“打印”时,通常刷新缓冲输出 - 因此输出不一定会出现,直到你打印换行后。除非您的行不完整,否则计划在格式字符串的末尾写入换行符。只有当你需要对输出进行双倍空间处理时才需要开头的新行(或者你担心其他人已经习惯用换行符来结束输出)。