其他分享
首页 > 其他分享> > c – Bison&rec2c:获取当前行号

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