ANTLR4 java版代码生成指令参数详解

代码生成的指令参数

此处,我的环境是windows。Linux下相似。

C:\Users\Jeremy>java -jar c:\Javalib\antlr-4.7-complete.jar
ANTLR Parser Generator  Version 4.7
 -o ___              specify output directory where all output is generated(指定生成代码的
 存放目录) 
 -lib ___            specify location of grammars, tokens files
 -atn                generate rule augmented transition network diagrams
 -encoding ___       specify grammar file encoding; e.g., euc-jp
 -message-format ___ specify output style for messages in antlr, gnu, vs2005
 -long-messages      show exception details when available for errors and warnings
 -listener           generate parse tree listener (default)
 -no-listener        don't generate parse tree listener
 -visitor            generate parse tree visitor(指定要生成
 用于遍历parse tree的visitor相关类方法)
 -no-visitor         don't generate parse tree visitor (default)
 -package ___        specify a package/namespace for the generated code(为生存的代码
 指定package名和命名空间)
 -depend             generate file dependencies
 -D<option>=value    set/override a grammar-level option
 -Werror             treat warnings as errors
 -XdbgST             launch StringTemplate visualizer on generated code
 -XdbgSTWait         wait for STViz to close before continuing
 -Xforce-atn         use the ATN simulator for all predictions
 -Xlog               dump lots of logging info to antlr-timestamp.log

针对前面博文中的Hello.g4实例,运行如下命令(我这是在Windows下的MINGW终端下运行的。antlr-4.7-complete.jar放在C盘的Javalib目录下。)

//根据grammar文件生成相应的ANTLR API 代码.java文件
$ java -jar /c/Javalib/antlr-4.7-complete.jar -visitor  Hello.g4
//编译java代码
$ javac Hello*.java

此时,得到最终的Hello可执行程序。

这里我加上”-visitor”参数,即代表了要生成用于遍历parse tree的visitor相关类方法。


示例测试

方法一:

通过文本显示结果。

$ java org.antlr.v4.gui.TestRig  Hello r -tree
(输入) hello username
^D
(r hello username)

(That ^D means EOF on unix; it’s ^Z in Windows.) The -tree option prints the parse tree in LISP notation.

方法二:

通过可视化UI来显示 parse trees 可能更加直观。命令如下:

$ java org.antlr.v4.gui.TestRig  Hello r -gui
(输入) hello username
^D

随后便弹出一个对话框来显示规则r:在关键字hello后面跟了一个username。

猜你喜欢

转载自blog.csdn.net/haifeng_gu/article/details/74643094