Antlr语法和AST

时间:2017-02-11 05:21:30

标签: antlr

grammar Poly;
options     
    {
    output=AST;
    ASTLabelType=CommonTree;
    }
poly
: 
     term(TLK^ term)*
;   
term 
: 
    a=ID b=INT -> ^($a $b)*
;
INT:'0'..'9';
ID:'a'..'z';
TLK:('PUSH'|'POP');
Semi : ';' {skip();};
Space  : ' ' {skip();};

这是我的语法文件......我的输入是

PUSH t 6;POP t 7;PUSH t 8;

但它将输出视为

(PUSH (POP (t 6) (t 7)) (t 8))

......并将命令保留为

  

第1行:0无关输入' PUSH'期待身份证

为什么我的第一个PUSH不包含在树中?

1 个答案:

答案 0 :(得分:0)

假设您从k :=0 for i ←1 to n c←a[i] k←k+1 规则开始,其右侧的第一个元素是poly,这是一个ID后跟INT,而不是term

PUSH

为了匹配您提供的输入,您可能需要这样:

poly
: 
     term(TLK^ term)*
;