以前接触过JavaCC,但没怎么深入.周末花了点时间大概学习了下.至于概念性的东西,网上一搜一大把,这里还是实战为主.一步步的深入.毕竟这东西不常用,哪天突然要用了,回过来看下,或许就能想起.由于我也是初学,博客顶多充其量是个笔记.希望对自己有用的同时,对大家也有用.
JavaCC也算得上是一门语言了,不过比较特殊.以前看Lucene源码的时候接触过,但由于Lucene的搜索语法并不复杂,所以大概看了下便能看懂.最近开始看Pig源码,其中Pig Latin也是通过JavaCC解析.由于Pig Latin相对复杂.可能Lucene只是实现SQL中的like,而Pig则是所有.所以Pig Latin相对就要复杂多了.如此,JavaCC也不得不去熟悉下.
这里先贴代码,通过JavaCC实现HelloWorld.
PARSER_BEGIN(HelloWorld) public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World"); } } PARSER_END(HelloWorld) SKIP:{" " | "\t" | "\n" | "\r"}
看起来很简单,我这里取名为HelloWorld.jj.然后通过JavaCC生成,JavaC编译,以及运行.如下步骤:
1)JavaCC编译
javacc HelloWorld.jj
会有如下提示,则表示编译成功:
Java Compiler Compiler Version 5.0 (Parser Generator) (type "javacc" with no arguments for help) Reading from file HelloWorld.jj . . . File "TokenMgrError.java" is being rebuilt. File "ParseException.java" is being rebuilt. File "Token.java" is being rebuilt. File "SimpleCharStream.java" is being rebuilt. Parser generated successfully.
然后可以在你的HelloWorld.jj文件所在的目录下,发现会生成如下文件:
HelloWorld.java HelloWorldConstants.java HelloWorldTokenManager.java ParseException.java
SimpleCharStream.java Token.java TokenMgrError.java
2)编译java文件
javac *.java
3) 运行HelloWorld
java HelloWorld
如果控制台看到Hello World就标明这个JavaCC HelloWorld之旅成功!