JAVACC 实现四则运算
Simple.JJ文件
options
{
STATIC = false;
DEBUG_PARSER = true;
}
PARSER_BEGIN(Simple)
package cn.com.XXX.test.simple4;
public class Simple
{
public static void main(String [] args) throws ParseException, TokenMgrError
{
Simple parser = new Simple(System.in);
System.out.println(parser.start());
}
}
PARSER_END(Simple)
SKIP :
{
" "
}
SKIP :
{
"\n"
| "\r"
| "\r\n"
}
TOKEN :
{
< PLUS : "+" >
| < MINUS : "-" >
| < TIMES : "*" >
| < DIVES : "/" >
}
TOKEN :
{
< NUMBER : ([ "0"-"9" ])+ >
}
TOKEN :
{
< END : "=" >
}
// start --> expression()< EOF>
// expression --> term() ( + term() | - term() )
// term() --> primite() ( * primite() | / primite() )
// primite() --> < NUMBER>
int start():
{
int rtn = 0;
}
{
rtn = term()< END>
{
return rtn;
}
}
int expression () :
{
int value1 = 0;
int value2 = 0;
}
{
value1 = term()
(
< PLUS> value2 = term() {value1 = value1+value2; }
|
<MINUS> value2 = term() { value1 = value1 - value2; }
)*
{
return value1;
}
}
int term() :
{
int value1 = 0;
int value2;
}
{
value1 = primite()
(
< TIMES> value2 = primite() {value1 = value1* value2; }
| < DIVES> value2 = primite() {value1 = value1 / value2;}
)*
{
return value1;
}
}
int primite():
{
Token t;
int sum = 0;
}
{
t= < NUMBER > { return Integer.parseInt(t.image);}
| "(" sum = expression() { return sum;} ")"
}
几年前为做演示,现场写的一个简单的四则运算,当然存在很多瑕疵,但只是用来体现使用方式足够了。
今天无意中发现了,感觉都有点生疏了,记录一下。