Antlr4 вычисление минимума и максисума

Рейтинг: 1Ответов: 1Опубликовано: 17.02.2015

Имеется два правила: союзом AND вычисляется минимум, OR максимум.

Пример 1

Правило: 12 AND 40
Результат: 12

Пример 2 Правило: 12 OR 40
Результат: 40

Написал грамматику на antlr4

grammar ANDOR;
rule:
    x1 = (INT | DOUBLE) ' AND ' x2 = (INT | DOUBLE) 
    |
    x1 = (INT | DOUBLE) ' OR ' x2 = (INT | DOUBLE);
INT : [0-9]+;
DOUBLE : INT '.' INT;

Как произвести вычисление выше указанным способом?

Ответы

▲ 1Принят

Проблема решена. Может быть, кому-нибудь пригодится.

Изменена грамматика

grammar ANDOR;  
rule returns [double value]:
   x1=digest ' AND ' x2=digest {
       if($x1.value > $x2.value)
           returns $value = $x2.value;
       else
           returns $value = $x1.value;
       }
   |
   x1=digest ' OR ' x2=digest {
       if($x1.value < $x2.value)
           returns $value = $x2.value;
       else
           returns $value = $x1.value;
       }; 
digest returns[double value]:
   INT    {$value = Integer.valueOf($INT.text);}
   |
   DOUBLE {$value = Double.valueOf($DOUBLE.text);}; 
INT : [0-9]+; DOUBLE : INT '.' INT;

Добавлен следующий метод

public class MainClass {
    public static void main(String[] args) {
        CharStream charStream = new ANTLRInputStream("1 OR 34");
        ANDORLexer andorLexer = new ANDORLexer(charStream);
        CommonTokenStream tokens = new CommonTokenStream(andorLexer);
        ANDORParser andorParser = new ANDORParser(tokens);
        System.out.println(andorParser.rule().value); // print the value

    }
}