JavaCC的使用

一、JavaCC

JavaCCJava Compiler Compiler)是一个词法分析生成器语法分析生成器

词法分析器可以把文本按照事先规定好的格式分割成一个个单词符号Token)。这些Token序列将会传送给语法分析器以供其决定程序的结构。

二、栗子

1.语法描述文件

adder.jj

/* options部分*/
options {STATIC = false; //生成非静态类DEBUG_PARSER = false;OUTPUT_DIRECTORY = "/home/zxm/IdeaProjects/java-test/java-haha/src/main/java/com/example/javacc/parser";
}/* 分析器类的声明 */
PARSER_BEGINAdder)package com.example.javacc.parser;import java.io.ByteArrayInputStream;
import java.io.InputStream;public class Adder {public static void mainString[] args) throws ParseException, TokenMgrError {InputStream is = new ByteArrayInputStream"11.22 + 2 + 4".getBytes));Adder parser = new Adderis);double result = parser.evaluate);System.out.printlnresult);}
}PARSER_ENDAdder)/* 词法分析器 */
SKIP : { " " }
SKIP : { "\n" | "\r" | "\r\n" }
TOKEN : { < PLUS : "+" > }
TOKEN : { < NUMBER : <DIGITS> | <DIGITS> "." <DIGITS> > }
TOKEN : { < #DIGITS : ["0"-"9"])+ > }/* 语法分析器 */
double evaluate) throws NumberFormatException :
{double i;double value;
}
{value = primary)<PLUS>i = primary){value += i;})*<EOF>{return value;}
}double primary) :
{Token t;
}
{t = <NUMBER>{return Double.parseDoublet.image);}
}

2.使用javacc命令,生成java文件

javacc adder.jj

执行命令:

生成java类:

三、测试

1.测试词法分析

    @Testpublic void testToken) {InputStream is = new ByteArrayInputStream"11.2 + 2.3 + 4".getBytes));SimpleCharStream scs = new SimpleCharStreamis);AdderTokenManager tokenManager = new AdderTokenManagerscs);Token token;while true) {token = tokenManager.getNextToken);if token == null || token.kind == AdderConstants.EOF)break;System.out.printlntoken.image);}}

结果:

2.测试语法分析

    @Testpublic void testParser) throws ParseException {InputStream is = new ByteArrayInputStream"11.22 + 2 + 4".getBytes));Adder parser = new Adderis);double result = parser.evaluate);System.out.printlnresult);}

结果:

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注