📄 calc.g
字号:
options { language=Cpp;}class CalcParser extends Parser;options { buildAST = true; // uses CommonAST by default// ASTLabelType = "antlr.CommonAST";}expr : mexpr (PLUS^ mexpr)* SEMI! ;mexpr : atom (STAR^ atom)* ;atom: INT ;class CalcLexer extends Lexer;WS_ : (' ' | '\t' | '\n' | '\r') { _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; } ;LPAREN: '(' ;RPAREN: ')' ;STAR: '*' ;PLUS: '+' ;SEMI: ';' ;protectedDIGIT : '0'..'9' ;INT : (DIGIT)+ ;class CalcTreeWalker extends TreeParser;options { buildAST = true;// ASTLabelType = "antlr.CommonAST";}expr:! #(PLUS left:expr right:expr) { if ( #right->getType()==INT && atoi(#right->getText().c_str())==0 ) // x+0 { #expr = #left; } else if ( #left->getType()==INT && atoi(#left->getText().c_str())==0 ) // 0+x { #expr = #right; } else { // x+y #expr = #(PLUS, left, right); } } | #(STAR expr expr) | i:INT ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -