假期打算利用 antlr4 快速入门自制编程语言。采用 antlr4 是因为是参考了 gscript ,同时其可以较实现语法解析的部分。 因为要使用 antlr4 所以要了解两点,第一点是 antlr4 能做什么,第二点是 antlr4 是如何用。 是什么 首先关于 antlr4 能做什么 ,官网描述 ANTLR(语言识别的其他工具)是一个 强大的解析器生成器,用于读取、处理、执行或 翻译结构化文...
假期打算利用 antlr4 快速入门自制编程语言。采用 antlr4是因为是参考了gscript,同时其可以较实现语法解析的部分。
因为要使用antlr4 所以要了解两点,第一点是 antlr4能做什么,第二点是antlr4是如何用。
是什么
首先关于antlr4能做什么 ,官网描述
ANTLR(语言识别的其他工具)是一个 强大的解析器生成器,用于读取、处理、执行或 翻译结构化文本或二进制文件。它被广泛用于构建 语言、工具和框架。从语法中,ANTLR 生成一个 可以构建和遍历解析树的解析器。
同时 antlr4 还定义了语法规则。我们可以编写对应的解析规则,生成各种语言的代码,然后对符合解析规则的字符串进行解析。
例如网上常见的四则运算
grammar Hello;
// Tokens
MUL: '*';
DIV: '/';
ADD: '+';
SUB: '-';
NUMBER: [0-9]+;
WHITESPACE: [ \r\n\t]+ -> skip;
// Rules
start : expression EOF;
expression
: expression op=('*'|'/') expression # MulDiv
| expression op=('+'|'-') expression # AddSub
| NUMBER # Number
;
定义了解析规则。可以通过对应的命令生成对应语言的解析代码,用于分析字符串。但是分析后要实现的逻辑还需开发自己自行实现。
怎么用
首先是安装。由于种种原因,我并没有按照官网的 pip 方式安装。(依赖较多)。主要是参考官网的 jar 的安装方式。
我的mac上默认配置的 java8 , java11 是自行安装在其他目录的 。只需要配置相应的别名 java11 -jar xxxx xxx.jar就可以运行了。
windows 上是采用的bat调用的。最近好些时间没有使用pwsh了,其实应该用pwsh进行配置的。
将自定义的 bin 目录设置到windows环境变量。
antlr4.bat
java -Xmx500M -cp "D:\Program\bin\antlr-4.11.1-complete.jar" org.antlr.v4.Tool %*
grun.bat
java -Xmx500M -cp "D:\Program\bin\antlr-4.11.1-complete.jar" org.antlr.v4.gui.TestRig %*
重启重启输入 antlr4 和 antlr4 -h (第二条命令是无效命令,仅仅是验证是否可以接收参数)
> antlr4
C:\Users\xxx\Desktop\blog>java -Xmx500M -cp "D:\Program\bin\antlr-4.11.1-complete.jar" org.antlr.v4.Tool
ANTLR Parser Generator Version 4.11.1
-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
-no-visitor don't generate parse tree visitor (default)
-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
-Xexact-output-dir all output goes into -o dir regardless of paths/package
> antlr4 -h
C:\Users\xxx\Desktop\blog>java -Xmx500M -cp "D:\Program\bin\antlr-4.11.1-complete.jar" org.antlr.v4.Tool -h
error(2): unknown command-line option -h
01