java 计算器实例_javacc 计算器 实例

options {

STATIC=false;

}

PARSER_BEGIN(calculator)

import java.io.PrintStream ;

public class calculator {

double previousValue = 0.0 ;

public static void main(String args[]) throws ParseException {

calculator parser = new calculator(System.in);

while (true) {

System.out.println("This is an advanced calculator based on the prior .jj embeded in eclipse");

System.out.print("Enter an expression like \"2.0+3.4 \" we support +,-,*,\\,(),sin(),cos(),and number with fraction:");

try {

parser.Start(System.out);

} catch (Exception e) {

System.out.println("NOK.");

System.out.println(e.getMessage());

parser.ReInit(System.in);

} catch (Error e) {

System.out.println("Oops.");

System.out.println(e.getMessage());

break;

}

}

}

}

PARSER_END(calculator)

SKIP :

{

" "

}

TOKEN : { /* OPERATORS */

< PLUS: "+"

>

| < MINUS: "-"

>

| < MULTIPLY: "*"

>

| < DIVIDE: "/"

>

|   < LPAREN : "("

>

|   < RPAREN : ")"

>

|   < NUMBER :

| "." | "." | "." >

|   < #DIGITS : (["0"-"9"])+ >

|   < SIN: "sin"

>

|   < COS: "cos"

>

|  

| "\r" | "\r\n" >

}

void Start(PrintStream printStream)  :

{}

{

(

previousValue = sum()

{ printStream.println( previousValue ) ; }

)*

}

double  sum() : {

double i;

double value=0.0;

}

{

value=term()(i=term() {

value+=i;

}| i=term() {

value-=i;

})*

{return value;}

}

double term() : {

double i;

double value=0.0;

}

{

value = Primary()(i = Primary() {

value *= i ;

}|i = Primary() {

value /= i ;

})*

{ return value ;}

} double Primary() : {  Token t ;  double value=0.0; } {  t= { return Double.parseDouble( t.image ) ; }  |   value=sum() { return value ; }  |   value=Primary() {   return -value ;  }  |  value=sum() {   return java.lang.Math.sin(value);   }  |  value=sum() {  return java.lang.Math.cos(value);   } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值