`
kinkding
  • 浏览: 151770 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaCC简单试用

    博客分类:
  • JAVA
阅读更多

 JavaCC是一个一个java版的语法分析生成器,根据具体内容请参考官网,另:JavaCC本身只支持自顶向下,但通过JJTree,可以实现自底向上。下面是我利用LL语法实现四则运算的简单试用:

1、Cal.jj文件:

options {
 STATIC = false;
}
PARSER_BEGIN(MyCalc)
import java.io.StringReader;

public class MyCalc {

  public static void main(String args[]) {    
    try {
      MyCalc parser = new MyCalc(new StringReader("1+2*3/2"));
      System.out.println(parser.exp());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}

PARSER_END(MyCalc)

SKIP :
{
  " "|"\t"|"\n"|"\r"
}

TOKEN :
{
  <ADD: "+">
| <SUB: "-">
| <MUL: "*">
| <DIV: "/">
| <LBRACE: "(">
| <RBRACE: ")">
| <NUMBER: (["0"-"9"])+>
  
}

int exp() :
{
  int temp;
  int v1;
  int v2;
}
{
  v1 = term(){temp = v1;}
  (<ADD>v2 = term(){temp = v1+v2;}
  |<SUB>v2 = term(){temp = v1-v2;})*<EOF>
  {return temp;}
}

int term() :
{
  int temp;
  int v1;
  int v2;
}
{
  v1 = factor(){temp = v1;}
  (<MUL>v2 = factor(){temp = v1*v2;}
  |<DIV>v2 = factor(){temp = v1/v2;})*
  {return temp;}
}

int factor() :
{
  int temp;
  Token token;
}
{
  (token = <NUMBER>{temp = Integer.parseInt(token.image);}
  |<LBRACE>temp = exp()<RBRACE>)
  {return temp;}
}

   

2、通过JavaCC命令生成相关文件:

E:\jdev\jxls\javacc-4.2\examples\SimpleExamples>javacc Cal.jj
Java Compiler Compiler Version 4.2 (Parser Generator)
(type "javacc" with no arguments for help)
Reading from file Cal.jj . . .
File "TokenMgrError.java" does not exist.  Will create one.
File "ParseException.java" does not exist.  Will create one.
File "Token.java" does not exist.  Will create one.
File "SimpleCharStream.java" does not exist.  Will create one.
Parser generated successfully.

 上面命令生成了如下7个JAVA文件:

E:\jdev\jxls\javacc-4.2\examples\SimpleExamples>ls *.java
MyCalc.java           MyCalcTokenManager.java  SimpleCharStream.java  TokenMgrError.java
MyCalcConstants.java  ParseException.java      Token.java

 

 

3、运行:

如果test.txt中的内容为“1+2*(3-4/2)”,则得到“3”,

如果test.txt中的内容为“1+2*3/2”,则也得到“3”。

 

4、相关说明:

由于采用的是自顶向下,所以上面的四则运算只是DEMO性质的,并不具有实用价值,如“1+2*3/2”得到的计算结果就是“3”,这显然错误,这也是LL语法的缺陷。

 

分享到:
评论

相关推荐

    javacc 词法分析器

    例如,如果你正在创建一个简单的编程语言解析器,JavaCC可以帮助你识别像"if"、"for"、"while"这样的控制结构关键词。 面对对象(Object-Oriented)是JavaCC的一个关键特性。它生成的解析器和词法分析器是用Java...

    javacc学习的心得

    JavaCC 的安装和配置相对简单,主要包括以下几个步骤: - **安装Java开发环境**:首先确保已经正确安装了Java开发环境,例如JDK 1.7.0_03。 - **配置环境变量**:设置`CLASSPATH`和`PATH`变量,确保指向正确的Java...

    javacc-4.0以及 javacc-5.0下载

    此版本可能对初学者来说较为友好,因为它的API和语法相对简单。 - JavaCC-5.0:相较于4.0版本,5.0版本可能引入了更多的优化和新特性,例如改进了错误处理机制,增加了对Java 5特性的支持,如泛型。可能还增加了对...

    JavaCC

    JavaCC,全称为Java Compiler Compiler,是一款强大的工具,主要用于生成解析器和词法分析器,尤其是在处理复杂的语法和解析任务时。它是一个基于Java的开源软件,被广泛应用于构建编译器、解释器以及各种语言处理...

    javacc语法分析.zip

    在实际的"实验二"中,我们可能需要编写一个简单的文法,如表达式文法,然后使用JavaCC生成解析器。接着,我们测试这个解析器,看它是否能正确解析各种合法和非法的输入,同时处理可能出现的错误。通过这样的实践,...

    javacc-5.0.zipjavacc-5.0.zip

    JavaCC(Java Compiler Compiler)是一款强大的词法分析和语法分析工具,主要用于生成Java语言的解析器和词法分析器。这个“javacc-5.0.zip”文件包含了JavaCC的5.0版本,是一个用于处理源代码和其他形式的文本输入...

    javacc eclipse_1.5.24.zip javacc插件

    JavaCC,全称为Java Compiler Compiler,是一款强大的词法分析器和语法分析器生成工具,用于构建解析器和词法分析器。它基于巴科斯范式(BNF)语法定义,能够自动生成Java源代码,使得开发者可以方便地处理复杂的...

    javaCC5.0压缩包

    4. **错误恢复**:JavaCC具有错误恢复机制,当遇到输入错误时,可以尝试恢复解析,而不是简单地停止,增加了程序的健壮性。 5. **抽象语法树(AST)生成**:JavaCC生成的解析器能够构造出输入语法的AST,这使得用户...

    javacc学习手册(个人总结)

    只要做很简单的处理,就能够利用javacc的国际化特性。javacc允许四种字符输入流(互斥的,一个分析器只能使用一种输入流),它们分别是: 1. ASCII_CharStream(ASCII码字符流) 2. ASCII_UCodeESC_CharStream...

    javaCC入门文档

    JavaCC的输入文件格式简单直观,每个非终结符的产生式对应于一个Java类中的方法,便于插入代码以处理特定的语法元素。此外,输入文件还包括一系列系统参数,例如`lookahead`参数,用于指定LL(k)算法的前瞻级别。 ##...

    javacc构造编译器的方法

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

    javacc编译原理实习

    JavaCC(Java Compiler Compiler)是一种强大的词法分析和语法分析工具,用于生成Java源代码的解析器和词法...通过完成这个项目,你将能够独立设计和实现简单的编译器,这对提升你的编程技能和解决问题的能力大有裨益。

    javacc2_1(Java Compiler Compiler)

    4. **易于使用**:它提供了一套完整的API,使得编写和调试解析器相对简单。 总的来说,Java Compiler Compiler是Java开发者处理解析任务的强大工具,尤其在需要处理自定义语法或解析复杂输入数据的场合,它的价值...

    JavaCC学习心得

    JavaCC 学习心得 JavaCC 是一种强大的解析器生成器,可以根据用户的需求生成解释器。下面是对 JavaCC 的学习心得,分为工作原理、使用方法和深层认识三个方面。 工作原理: 1.1 结构综述: JavaCC 文件可以分为...

    JavaCC教程(附源码)

    为了更好地理解JavaCC的工作原理,我们将通过一个简单的例子来进行演示:实现一个可以计算整数加法的解析器。我们的目标是处理如下格式的表达式: ```plaintext 99+42+0+15 ``` 其中,我们只关心数字和加号,忽略...

    javacc安装包javacompilercompiler

    JavaCC(Java Compiler Compiler)是一款强大的词法分析和语法分析工具,主要用于生成解析器和词法分析器。它是Java语言的版本,适用于构建基于Java的解析器,如编译器、解释器或查询处理器。JavaCC的核心是它能将一...

    Javacc常用问题解答

    ### JavaCC 常见问题解答 #### 一、JavaCC 概览 **1.1 最近 FAQ 的更改** 本 FAQ 的更新主要是为了更好地适应 JavaCC 的最新版本,并对用户提出的一些常见问题进行了解答。 **1.2 什么是 JavaCC?** JavaCC 是...

    javacc+jjtree使用教程

    JavaCC和JJTree是用于构建解析器和抽象语法树(AST)的工具,常用于编译器设计和解析复杂语法的场景。它们是Java语言的版本,类似于其他编程语言中的YACC和LEX。 1. **JavaCC**: - JavaCC(Java Compiler ...

    JavaCC实现MiniC语言的编译

    JavaCC是Java语言的一个工具,用于生成解析器和词法分析器,主要用于处理复杂的语法结构。在本项目中,"JavaCC实现MiniC语言的编译"是一个实践性的任务,目的是利用JavaCC来构建一个小型的C语言编译器——MiniC。这...

Global site tag (gtag.js) - Google Analytics