添加if-else并执行语法

时间:2016-02-04 16:54:25

标签: if-statement while-loop antlr conditional-statements

大家好我用这个小语法来实现一个简单的计算器,但我需要 将IF - ELSE和DO WHILE添加到我的语法中,但我不知道如何处理跳转,我真的不知道我需要添加这个新函数。

grammar Calculadora;


@header {
   import java.util.HashMap;
}


@members {
   HashMap memory = new HashMap();
}


prog : stat+ 
     ;

stat : expr ';'            { System.out.println($expr.value); }
     | ID '=' expr ';'     { memory.put($ID.text, new Integer($expr.value)); 
                             System.out.println($ID.text + " = " + $expr.value); }
     ;

expr returns [int value]
    : e=multExpr { $value = $e.value; }
      ( '+' e=multExpr { $value += $e.value; }
        | 
        '-' e=multExpr { $value -= $e.value; }
      )*
    ;

multExpr returns [int value]
        : e=atom { $value = $e.value; } 
          ( '*' e=atom { $value *= $e.value; } )*
        ; 

atom returns [int value]
    : INT { $value = Integer.parseInt($INT.text); }
    | ID  { Integer v = (Integer)memory.get($ID.text);
            if ( v != null ) $value = v.intValue();
            else System.err.println("variable no definida " + $ID.text); }
    | '(' expr ')' { $value = $expr.value; }
    ;


ID : ('a'..'z'|'A'..'Z')+ 
   ;

INT : '0'..'9'+ 
    ;

NEWLINE : '\r'? '\n' 
        ;

WS : (' '|'\t')+ { skip(); } 
   ;

0 个答案:

没有答案