编程要求
根据提示,在右侧编辑器补充代码,完成能够解析正整数加法(+)、减法(-)、乘法(*)的解析器。
代码如下:
/* JavaCC 小测试 */
/* 功能:实现一个能够进行加法(+),减法(-),乘方(^)的计算器 */
/* 说明:在下面的begin和end之间添加代码,已经实现了简单的加法(+),你需要完成剩下的部分,加油吧! */
/* 提示: */
options {
STATIC = false;
}
PARSER_BEGIN(Calc)
import java.io.*;
class Calc {
public static void main(String[] args) {
for (String arg : args) {
try {
System.out.println(evaluate(arg));
} catch (ParseException ex) {
System.err.println(ex.getMessage());
}
}
}
public static long evaluate(String src) throws ParseException {
Reader reader = new StringReader(src);
return new Calc(reader).expr();
}
}
PARSER_END(Calc)
/* begin */
SKIP : {
< [" ", "\t", "\r", "\n"] >
}
TOKEN : {
< INTEGER : (["0" - "9"])+ >
}
TOKEN : {
< PLUS : "+" >
| < MINUS : "-" >
| < MULTIPLY : "*" >
}
long expr() :
{
long x, y;
Token t;
}
{
x = term()
(
t = <PLUS> { x += term(); }
|
t = <MINUS> { x -= term(); }
)*
<EOF>
{ return x; }
}
long term() :
{
long x, y;
Token t;
}
{
x = factor()
(
t = <MULTIPLY> { x *= factor(); }
)*
{ return x; }
}
long factor() :
{
Token t;
}
{
t = <INTEGER> { return Long.parseLong(t.image); }
}
/* end */