Дополнительный аргумент грамматики дерева Antlr3 - PullRequest
0 голосов
/ 02 апреля 2019

Вот моя древовидная грамматика из antlr3:

tree grammar TExpr1;

options {
    tokenVocab=Expr;

    ASTLabelType=CommonTree;
    superClass=MyTreeParser;
}

@header {
package tb.antlr.interpreter;
import java.util.HashMap;
}
@members {
HashMap<String, Integer> memory = new HashMap<String, Integer>();
}

prog    : (e=expr {drukuj ($e.text + " = " + $e.out.toString());})* ;

expr returns [Integer out]
          : ^(PLUS  e1=expr e2=expr) {$out = $e1.out + $e2.out;}
        | ^(MINUS e1=expr e2=expr) {$out = $e1.out - $e2.out;}
        | ^(T e1=expr e2=expr e3=expr {$out = $e1.out * 3600 + $e2.out * 60 + $e3.out;}
        | INT                      {$out = getInt($INT.text);}
        ;

Ввод T состоит из двух или трех чисел.Я бы хотел, чтобы первый аргумент (e1) был необязательным.Как я могу это сделать?Я пытался перегрузить эту строку для двух и трех аргументов, но кажется, что она не работает в antlr.А вот код из файла грамматики:

time 
  : INT (CL INT (CL INT)? )? ->^(T INT*)
  ;

T :
  ;
...