ANTLR 算术和比较表达式语法 ANTLR

ANTLR arithmetic and comparison expressions grammer ANTLR

如何向我的代码添加关系操作

谢谢

我的密码是

grammar denem1;  
options {    
  output=AST;    
}    

tokens {    
  ROOT;    
}

parse    
  :  stat+ EOF -> ^(ROOT stat+)    
  ;

stat    
  :  expr ';'     
  ;

expr    
  : Id Assign expr -> ^(Assign Id expr)        
  | add    
  ;

add    
  :  mult (('+' | '-')^ mult)*    
  ;

mult    
  :  atom (('*' | '/')^ atom)*    
  ;

atom
  :  Id
  |  Num
  |  '('! expr ')' !
  ;

Assign  :   '=' ;

Comment : '//' ~('\r' | '\n')* {skip();};

Id      : 'a'..'z'+;

Num     : '0'..'9'+;
    
Space   : (' ' | '\t' | '\r' | '\n')+ {skip();};

像这样:

...

expr    
  : Id Assign expr -> ^(Assign Id expr)
  | rel
  ;

rel
  : add (('<=' | '<' | '>=' | '>')^ add)?
  ;

add    
  : mult (('+' | '-')^ mult)*
  ;

...

如果可能,请使用 ANTLR v4 而不是旧的 v3。在 v4 中,您可以简单地这样做:

stat    
 : expr ';'     
 ;

expr
 : Id Assign expr
 | '-' expr
 | expr ('*' | '/') expr
 | expr ('+' | '-') expr
 | expr ('<=' | '<' | '>=' | '>') expr
 | Id
 | Num
 | '(' expr ')'
 ;