2012-02-28 66 views
3

我处理PHP语法和我想传递给我的函数的行号 我有类似: internal_functions_in_yacc:野牛和rec2c:获取当前行号

 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); } 

有没有办法知道野牛解析令牌的行号?或者这是必须要做的事情吗?

编辑

我发现词法使用rec2c不LEX完成。

回答

5

如果line numbers are enabled那么它们可以使用@n访问,其中n是令牌位置。

T_REQUIRE_ONCE expr { observers.IncludeFound($2,@2.first_line); } 

编辑:

为了扩大对答案%locations是,使行号野牛链接的指令。词法分析器仍然负责递增行号并要求%option yylineno

莱克斯文件:

\n  { yylloc->lines(yyleng); yylloc->step(); } 
+0

我已经检查词法分析器和它是写在rec2c不LEX。我必须编辑标签。关于rec2c的任何想法? – 2012-02-28 20:27:59

+0

不,我很抱歉,但如果它使用野牛,请检查文档以了解如何处理位置。它甚至可以为你做(我不知道,因为我从来没有使用它) – Joe 2012-02-28 20:29:29

+0

因为这已经揭示了真正的解决方案(虽然不是在rec2c),我会接受,只是在rec2c中找到类似的东西。 谢谢 – 2012-02-29 13:47:38