【问题标题】:Antlr grammar and ASTAntlr 语法和 AST
【发布时间】:2017-02-11 05:21:30
【问题描述】:
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' 期望 ID

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

【问题讨论】:

    标签: antlr


    【解决方案1】:

    假设你从poly规则开始,它右边的第一个元素是term,这是一个ID后跟INT,而不是PUSH

    poly
    : 
         term(TLK^ term)*
    ; 
    

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

    poly
    : 
         (TLK^ term)*
    ; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      相关资源
      最近更新 更多