C LEX-yylineno返回1
我在网上尝试了很多解决方案。我尝试过的解决方案之一是通过以下链接: 但它们似乎都不适用于我生成符号表的代码。C LEX-yylineno返回1,c,lex,C,Lex,我在网上尝试了很多解决方案。我尝试过的解决方案之一是通过以下链接: 但它们似乎都不适用于我生成符号表的代码。 yylineno值不会更改。它继续显示1 我在输入文件中提供的输入是: 这是我的代码片段: 另外,我说的是莱克斯,不是亚克。虽然相似,但我已经尝试过了 但是这个解决方案对我不起作用 其他问题表明Flex能够通过%选项yylineno指令自动管理yylineno。然而,与经典的Lex相比,这是Flex中的一个扩展 假设您无法升级到Flex, 您可能需要替换您的规则 \n { } 与 另
yylineno
值不会更改。它继续显示1
我在输入文件中提供的输入是:
这是我的代码片段:
另外,我说的是莱克斯,不是亚克。虽然相似,但我已经尝试过了
但是这个解决方案对我不起作用 其他问题表明Flex能够通过
%选项yylineno
指令自动管理yylineno
。然而,与经典的Lex相比,这是Flex中的一个扩展
假设您无法升级到Flex,
您可能需要替换您的规则
\n { }
与
另一方面,在格式字符串末尾使用换行符打印效果最好。当换行符被“打印”时,缓冲输出通常会被刷新,因此在打印换行符之后的换行符之前,输出不一定会出现。计划在格式字符串的末尾写换行符,除非有不完整的行。只有当您需要将输出增加一倍空格时(或者您担心其他人不愿意用换行符结束输出),才需要在开始处换行。在您认为合适时,您有责任推进行计数器@KerrekSB没有定义任何自动函数来扫描行号并将其返回给我们吗?您可能需要将
\n{}
替换为\n{yylineno++;}
。此外,打印效果最好的是在结尾处有换行符(换行符“打印”时缓冲输出通常会被刷新,因此在您打印换行符之后的输出之前,输出不一定会出现)。@Kay我说的是lex。虽然类似,但解决方案并不适用me@JonathanLeffler谢谢你的建议!它起作用了。
%%
{pound}{includekey}{openarrow}{alpha}+{closearrow}
{printf("\n %s : Preprocessor Directive at line no: %d!", yytext, yylineno); newfunction(yytext,"Preprocessor",yyleng);}
{mainkey}{openpara}{closepara} {printf("\n %s : Main function found at line no: %d! ", yytext, yylineno); newfunction(yytext,"main",yyleng);}
{alpha}[{underkey}|{alpha}|{digit}]+{openpara}{closepara} {printf("\n %s : Userdefined function without parameters found at line no: %d!", yytext, yylineno);newfunction(yytext, "function",yyleng);}
{conditional} {printf("\n %s : If statement encountered at line no: %d!", yytext, yylineno);newfunction(yytext,"if", yyleng);}
{control} {printf("\n %s : Control statement encountered at line no: %d!", yytext, yylineno);newfunction(yytext,"control", yyleng);}
{datatypes} {printf("\n %s : Datatype found at line no: %d!", yytext, yylineno);newfunction(yytext, "datatype", yyleng);}
{alpha}* {printf("\n %s : Variable found at line no: %d!", yytext, yylineno);newfunction(yytext, "variable", yyleng);}
{operators} {printf("\n Operator %s found at line no: %d!", yytext, yylineno );}
\n { }
. {printf("\n Unexpected character!");}
%%
\n { }
\n { yylineno++; }