读书人

Antlr V3 编纂的四则运算

发布时间: 2012-08-10 12:19:33 作者: rapoo

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


这里需要注意的是 对 四则运算符的 级别操作,“+”和“-”运算级别最低,“*”和“/“ 略高于 前者,括号的级别最高,那么我们可以把括号的级别和 数字 作为平级来调用。

读书人网 >软件架构设计

热点推荐