c – Bison&rec2c:获取当前行号
作者:互联网
我正在处理PHP语法,我想将行号传递给我的函数
我有类似的东西:
internal_functions_in_yacc:
T_ISSET '(' isset_variables ')'
| T_EMPTY '(' variable ')'
| T_INCLUDE expr { observers.IncludeFound($2); }
| T_INCLUDE_ONCE expr { observers.IncludeFound($2); }
| T_EVAL '(' expr ')'
| T_REQUIRE expr { observers.IncludeFound($2); }
| T_REQUIRE_ONCE expr { observers.IncludeFound($2); }
;
现在我想通过行号,比如
T_REQUIRE_ONCE expr { observers.IncludeFound($2,$line_number_here); }
有没有办法知道野牛解析的令牌的行号?或者它是否需要在lexing中完成?
编辑
我发现lexing是用rec2c而不是lex完成的.
解决方法:
如果是line numbers are enabled,则可以使用@n
访问它们,其中n是令牌位置.
T_REQUIRE_ONCE expr { observers.IncludeFound($2,@2.first_line); }
编辑:
要扩展答案,%location是链接中的指令,用于启用野牛中的行号.词法分析器仍然负责增加行号并且需要%选项yylineno.
Lex档案:
\n { yylloc->lines(yyleng); yylloc->step(); }
标签:yacc,bison,c 来源: https://codeday.me/bug/20190902/1790799.html