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 ')'
 ;

最新更新