`
tianyalinfeng
  • 浏览: 442453 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JavaCC-计算器

    博客分类:
  • Java
 
阅读更多

options{
  STATIC = false;
}
PARSER_BEGIN(Calculator)
package javacc;
import java.io.PrintStream;
public class Calculator{
  double previousValue = 0.0;
  public static void main(String[]args)throws ParseException, TokenMgrError, NumberFormatException{
    Calculator parser = new Calculator(System.in);
    parser.start(System.out);
  }
}
PARSER_END(Calculator)
SKIP:{
  " "
}
TOKEN:{
  <EOL:"\n"
  | "\r"
  | "\r\n">
}
TOKEN:{
  <PLUS:"+">
}
TOKEN:{
  <MINUS:"-">
}
TOKEN:{
  <TIMES:"*">
}
TOKEN:{
  <DIVIDE:"/">
}
TOKEN:{
  <OPEN_PAR:"(">
}
TOKEN:{
  <CLOSE_PAR:")">
}
TOKEN:{
  <PREVIOUS:"$">
}
TOKEN:{
  <NUMBER:<DIGITS>
  | <DIGITS>"."<DIGITS>
  | <DIGITS>"."
  | "."<DIGITS>>
}
TOKEN:{
  <DIGITS:(["0"-"9"])+>
}
TOKEN:{
  <END:"#">
}
void start(PrintStream ps):{}{
  (previousValue = expression(){
    ps.println(previousValue);
  }
  )*<END>
}
double expression()throws NumberFormatException:{
  double i;
  double value;
}
{
  value = term()(<PLUS>i = term(){
    value+=i;
  }
  | <MINUS>i = term(){
    value-=i;
  }
  )*{
    return value;
  }
}
double primary()throws NumberFormatException:{
  Token t;
  double d;
}
{
  t = <NUMBER>{
    return Double.parseDouble(t.image);
  }
  | <PREVIOUS>{
    return previousValue;
  }
  | <OPEN_PAR>d = expression()<CLOSE_PAR>{
    return d;
  }
  <MINUS>d = primary(){
    return d;
  }
}
double term()throws NumberFormatException:{
  double i;
  double value;
}
{
  value = primary()(<TIMES>i = primary(){
    value*=i;
  }
  | <DIVIDE>i = primary(){
    value/=i;
  }
  )*{
    return value;
  }
}

 

分享到:
评论

相关推荐

    Test.rar 使用Javacc编写的简易计算器

    在本例中,我们有一个名为"Test.rar"的压缩包,内含一个使用JavaCC编写的简易计算器项目。 首先,我们需要了解JavaCC的基本用法。JavaCC使用JJ文件(JavaCC语法文件)作为输入,该文件包含BNF(巴科斯范式)或EBNF...

    javacc四则运算表达式计算器

    本程序实现一个四则混合运算,用户只需要输入四则混合运算表达式,程序自动计算, 可以一次计算一个表达式,也可以批量计算多行表达式,而且适合商业计算精度要求。...清屏功能失效,表达式解析部分使用javacc来编译。

    javacc构造编译器的方法

    为了更好地说明如何使用JavaCC构造编译器,这里给出一个简单的例子:构建一个命令行计算器。这个计算器能够解析简单的数学表达式,并计算出结果。 1. **定义语法规则**: - 定义终结符:数字、加号、减号、乘号、...

    用JavaCC构造编译器的方法

    为了更好地理解如何使用JavaCC构建编译器,我们可以设计一个简单的命令行计算器作为示例。 - **定义词法规则**:首先要定义计算器能够识别的词汇单位,如数字、加号、减号等。 - **定义文法规则**:接下来需要定义...

    javacc中文开发案例

    我们将通过构建一个简单的基于命令行的计算器程序来演示JavaCC的功能。 #### 构建编译器的基本概念 在深入了解JavaCC之前,我们需要先了解编译器工作的基本流程,主要包括词法分析、语法分析以及代码生成或执行这...

    不会编译原理也能做Android计算器.pdf

    2. 使用JavaCC的语法规则编写解析器规则文件,描述计算器能够识别和处理的表达式格式。 3. 运行JavaCC工具,生成解析器的Java源代码。 4. 将生成的源代码引入Android工程,进行编译和调试。 5. 在Android设备或...

    Jisuanqi.rar_括号 科学计算器_科学计算器_计算器_计算器 java

    开发者需要设计一个算法或使用已有的表达式求值库(如JavaCC或ANTLR)来解析和计算公式。这通常涉及到前缀、后缀或中缀表达式转换,以及栈数据结构的运用,以处理运算符优先级。 5. **数学运算**:包括基本的加、减...

    表达式计算器(java)

    - **编译器构造工具**:如ANTLR或JavaCC,这些工具可以帮助生成解析器和词法分析器。 为了调试和优化代码,开发者可能使用了JUnit等单元测试框架来编写测试用例,确保计算器在不同输入下的行为符合预期。 总的来说...

    Java编程实现计算器(三种)

    我们需要编写一个循环,不断读取用户的输入,将输入转换为可执行的数学表达式,然后使用Java的内置运算符或第三方库(如JavaCC或ANTLR)来解析和计算表达式。 无论选择哪种方式,计算器的实现都需要遵循以下步骤: ...

    android和java下的计算器的实现代码

    这里可以使用Java的Scanner类来获取用户输入,用StringBuilder来构建表达式,然后通过编译器API(如JavaCC或ANTLR)或者自定义的解析算法来解析表达式。 至于"jisuanqi"这个文件,它可能是该项目的源代码文件,包含...

    java计算器

    5. **表达式解析**:对于更复杂的计算器,可能需要解析用户输入的完整数学表达式,这需要用到表达式解析算法或者第三方库,如JavaCC或ANTLR。 6. **错误处理**:确保计算器能正确处理无效的输入,比如除以零、超出...

    基于android实现的简易计算器.zip

    这可以通过使用字符串操作、正则表达式或使用第三方库如`JavaCC`或`ANTLR`来实现。 7. **运算逻辑**:计算器的核心是其运算逻辑,包括加减乘除、括号处理、优先级等。这部分代码通常在`MainActivity`或单独的`...

    basic-calculator:比计算器能做的4个基本操作

    - 如果涉及更复杂的表达式,可能需要用到编译原理中的词法分析和语法分析,比如使用JavaCC或ANTLR等工具。 4. **异常处理** - 在计算过程中,可能会遇到无效的输入,如非数字字符,或者除数为0。这时应捕获并处理...

    基于Java语言编写的计算器表达式分析器其中包括词法分析和语法分析部分.zip

    - 语法分析可以采用递归下降解析法或使用ANTLR、JavaCC等工具自动生成解析器。 - 抽象语法树的构建有助于进行类型检查和优化,同时为代码生成阶段做准备。 6. **应用场景**: 这样的表达式分析器可用于教育软件...

    xyz-language:一个最终成为编程语言的简单计算器

    这一步通常采用递归下降解析或使用解析库如JavaCC或ANTLR来完成。 ### 5. 执行引擎 解析得到的AST被解释器遍历,执行对应的计算或控制流程。解释器需要处理变量的存储和查找、运算符的优先级和结合性、函数调用等...

    计算字简单符串表达式

    一款效率,易懂,简单的字符串表达式计算结构类

    使用java完成基础的计算器编译(csdn)————程序.pdf

    5. **增加表达式解析功能**:使用表达式解析器库(如JavaCC或ANTLR)处理更复杂的数学表达式。 通过这些改进,我们可以将简单的计算器升级为功能更强大、更易于使用的工具,同时也能更好地锻炼我们的编程技巧和问题...

    Advance-Gui-Calulator:这是Java中的高级计算器

    这可以是一个自定义的解析器,也可以是现成的库,如JavaCC或ANTLR,用于解析用户输入的数学表达式并进行计算。 **7. 计算逻辑** 计算器的核心是计算逻辑,它负责执行数学运算。这通常涉及到复杂数学运算的实现,如...

    面试计算器

    java -classpath "javacc.jar" javacc Arithmetic.jj Arithmetic.jj由第一个命令生成。 修改了ArithmeticDefaultVisitor以从代表算术表达式的抽象语法树计算值,并将其移至org.ait.calculator.parser包。

Global site tag (gtag.js) - Google Analytics