博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
antlr4开发环境搭建
阅读量:2429 次
发布时间:2019-05-10

本文共 3636 字,大约阅读时间需要 12 分钟。

简介

ANTLR是一款强大的语法分析器生成工具,可用于读取,处理,执行和翻译结构化的文本或二进制文件。它被广泛用于工业实践。大数据领域中熟知的hive,presto,spark都使用它来构建sql解析器。Twitter使用ANTLR进行语法分析,每天处理超过20亿次查询。

开发环境搭建

1.安装idea antlr4插件

idea 提供了一个插件ANTLR v4 grammars plugin,可以非常方便的生成代码。该插件可以在线安装,也可以离线安装,我选择离线安装。

下载地址:https://plugins.jetbrains.com/plugin/7358-antlr-v4-grammar-plugin/versions

版本:1.14

在这里插入图片描述

插件下载完成后,安装即可。
在这里插入图片描述

2.生成代码

创建Hello.g4,并新增如下内容,该程序用于匹配hello关键字。

// Define a grammar called Hellogrammar Hello;r  : 'hello' ID ;         // match keyword hello followed by an identifierID : [a-z]+ ;             // match lower-case identifiersWS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

配置ANTLR插件并生成响应的代码

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码实现

拷贝HelloBaseVisitor.java,HelloLexer.java,HelloListener.java,HelloParser.java,HelloVisitor.java到项目中

在这里插入图片描述
新增代码

public class HelloVisitorImpl implements HelloVisitor {
public Object visitR(HelloParser.RContext ctx) {
return null; } public Object visit(ParseTree parseTree) {
return null; } public Object visitChildren(RuleNode ruleNode) {
return null; } public Object visitTerminal(TerminalNode terminalNode) {
return null; } public Object visitErrorNode(ErrorNode errorNode) {
return null; }}

HelloVisitorImpl.java

public class HelloMain {
public static void main(String[] args) {
CharStream input = CharStreams.fromString("hello\nhaha"); // 实例化词法分析器 HelloLexer lexer=new HelloLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); // 实例化解析器 HelloParser parser = new HelloParser(tokens); ParseTree tree = parser.r(); HelloVisitorImpl myHelloVisitor = new HelloVisitorImpl(); myHelloVisitor.visit(tree); System.out.println("result:"+ tree.toStringTree(parser)); }}

HelloMain.java

org.antlr
antlr4-runtime
4.8-1

pom.xml中添加antlr4-runtime依赖

运行结果:

"C:\Program Files\Java\jdk1.8.0_192\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=62242:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_192\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_192\jre\lib\rt.jar;E:\antlr4\target\classes;E:\repository\org\antlr\antlr4-runtime\4.8-1\antlr4-runtime-4.8-1.jar" cn.aiaudit.hello.HelloMainresult:(r hello haha)Process finished with exit code 0

转载地址:http://iecmb.baihongyu.com/

你可能感兴趣的文章
【Frank.Xu】.net深入学习笔记(3):垃圾回收与内存管理
查看>>
2006JAVA类图书读者投票排行榜
查看>>
《编程之美》舞动’08年IT图书销售奇迹
查看>>
MySQL查询的性能优化
查看>>
微博的MySQL数据库优化实践经验
查看>>
php以图搜图
查看>>
php怎么实现根据图片搜索图片功能
查看>>
三种保证URL地址可信的加密方式
查看>>
memcached 并发原语CAS与GETS操作
查看>>
memcached(六)调优经验
查看>>
赶集mysql军规
查看>>
nginx/tengine限制流量如何配置
查看>>
cron和crontab命令详解 crontab 每分钟、每小时、每天、每周、每月、每年定时执行 crontab每5分钟执行一次
查看>>
mysql使用索引优化order排序
查看>>
mysql复合索引、普通索引总结
查看>>
mysql explain中的using filesort
查看>>
MYSQL explain详解
查看>>
MySQL查询优化-explain
查看>>
Linux 技巧:让进程在后台可靠运行的几种方法
查看>>
Java IO 以及 NIO 详解
查看>>