Antlr V3 编写的四则运算
这两天在研究antlr这个框架,至于这个鸟东西如何解释,大家可以到他的官网上去看,2.7.5版本的还有中文版的帮助文档。好,我们直接说事,antlr的词法规则文件的保存内容是.g 结尾的文件。
四则运算的.g文件是:
grammar SiZe;options{ backtrack=true;} @header { package com.iteye.kaobian;}@lexer::header{ package com.iteye.kaobian;}prog returns [double value=0] : e=highlevelexpr{$value=$e.value;}( '+' e=highlevelexpr{$value += $e.value;} | '-' e=highlevelexpr{$value -= $e.value;})*;highlevelexpr returns[double value]:e=atom{$value=$e.value;}( '*' e=atom{$value*=$e.value;} '/' e=atom{$value/=$e.value;})* ;atom returns[double value]: INT{$value = Double.parseDouble($INT.text);} | FLOAT{$value = Double.parseDouble($FLOAT.text);} | '(' prog ')' {$value=$prog.value;} ; INT :'0'..'9'+ ;FLOAT : ('0'..'9')+ '.' ('0'..'9')* EXPONENT? | '.' ('0'..'9')+ EXPONENT? | ('0'..'9')+ EXPONENT ;WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ;fragmentEXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;这里需要注意的是 对 四则运算符的 级别操作,“+”和“-”运算级别最低,“*”和“/“ 略高于 前者,括号的级别最高,那么我们可以把括号的级别和 数字 作为平级来调用。