2014-02-14 22 views
0

我在想如何獲得語法中令牌的行號。假設我有以下語法:Jison/Bison在語法中獲取令牌的行號

S : expr MINUS expr { $$ = $1 -$3; } 
    ; 

如何獲取MINUS令牌的行號? 我不使用內jison詞法分析器,而是通過重寫詞法分析器從法文件傳遞:

parser.lexer = { 
    lex: function() { 
    var token = "MINUS"; 
    parser.lexer.yytext = "..."; 
    parser.lexer.yylineno = xx; 
    return token; 
    } 
} 

我意識到,我可以打電話給yylineno但如果語法中的不同的令牌有不同的行號和我只需要jison文件中特定標記的行號。 也許類似$1.yylineno? 非常感謝!

回答

3

Jison讓您使用@表示法訪問位置。請參閱「跟蹤位置」部分here。你上面減號的行號是@2.first_line

然後由您的詞法分析器來提供Jison期望的信息。