当前位置: 首页 > news >正文

东莞网站建设及外包网络营销成功的案例

东莞网站建设及外包,网络营销成功的案例,建设银官方网站,设计作品网站有哪些1. 意外的问题 在学习Antlr4的visitor模式时,使用IDEA的Antlr插件完成了Hello.g4文件的编译,指定的package为com.sunrise.hello 使用visitor模式遍历语法解析树,遍历过程中打印hello语句 public class HelloVisitorImpl extends HelloBaseVi…

1. 意外的问题

  • 在学习Antlr4的visitor模式时,使用IDEA的Antlr插件完成了Hello.g4文件的编译,指定的package为com.sunrise.hello

  • 使用visitor模式遍历语法解析树,遍历过程中打印hello语句

    public class HelloVisitorImpl extends HelloBaseVisitor<String> {@Overridepublic String visitR(HelloParser.RContext ctx) {System.out.printf("hello %s\n", ctx.NAME().getText());return super.visitR(ctx);}// main方法,使用visitor模式遍历语法解析树,以打印hello语句public static void main(String[] args) {String input = "hello lucy\n" +"hello wold\n" +"by sunrise";// 词法解析CharStream stream = CharStreams.fromString(input);HelloLexer lexer = new HelloLexer(stream);CommonTokenStream tokens = new CommonTokenStream(lexer);// 语法解析HelloParser parser = new HelloParser(tokens);ParseTree parseTree = parser.r();// 遍历语法解析树HelloVisitorImpl visitor = new HelloVisitorImpl();visitor.visit(parseTree);}
    }
    
  • 运行main()方法,执行报错:

    ANTLR Tool version 4.11.1 used for code generation does not match the current runtime version 4.8Exception in thread "main" java.lang.ExceptionInInitializerErrorat com.sunrise.hello.visitor.HelloVisitorImpl.main(HelloVisitorImpl.java:26)
    Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 4 (expected 3).at org.antlr.v4.runtime.atn.ATNDeserializer.deserialize(ATNDeserializer.java:187)at com.sunrise.hello.HelloLexer.<clinit>(HelloLexer.java:127)... 1 more
    Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 4 (expected 3).... 3 more
    
  • 分析异常栈的栈顶错误信息:代码是由4.11.1版本的Antrl Tool生成的,运行时的时候antlr runtime4.8版本的,二者不匹配

  • 查看IDEA Antlr插件的描述以及maven中配置的antlr-runtime后,发现确实如此:

2. 错误原因分析

  • 从错误提示,大致可以猜出:Antlr Tool版本与antlr runtime应该保持一致
  • 若不了解Antlr Tool和antlr runtime的分工,则无法理解为何要保持一致。
  • 回看Antlr4的官网,发现有如下介绍:
    • complete jar,里面包含Antlr Tool和Java runtime
    • Java runtime jar:负责编译、执行Java语言的parser/lexer
  • 总结起来:Antlr Tool负责将.g4文件编译为指定语言的代码,例如Java语言。Java语言的parser或lexer的编译、执行,则需要依靠antlr runtime
  • 4.x版本的Antlr Tool生成的Java语言的parser和lexer,需要使用4.x的org.antlr:antlr4-runtime

3. 解决办法

  • 要么使用4.8版本的Antlr Tool重新编译.g4文件,要么将org.antlr:antlr4-runtime的版本更新为4.11.1
  • 为了方便,这里选择更新org.antlr:antlr4-runtime的版本

4. 更离奇的错误

  • 现在使用4.11.1版本完成了.g4文件的编译、parser/lexer的Java代码编译

  • 突发奇想,使用grun命令测试语法规则,报错如下:

    $ grun com.sunrise.hello.Hello r -gui
    ANTLR Tool version 4.11.1 used for code generation does not match the current runtime version 4.8ANTLR Runtime version 4.11.1 used for parser compilation does not match the current runtime version 4.8Exception in thread "main" java.lang.ExceptionInInitializerErrorat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at org.antlr.v4.gui.TestRig.process(TestRig.java:144)at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
    Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 4 (expected 3).at org.antlr.v4.runtime.atn.ATNDeserializer.deserialize(ATNDeserializer.java:187)at com.sunrise.hello.HelloLexer.<clinit>(HelloLexer.java:127)... 6 more
    Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with version 4 (expected 3).... 8 more
    
  • 又是版本不一致导致的 😂 😂,.g4文件的编译、parser的Java代码编译,都是使用4.11.1版本,但是却使用4.8的antlr runtime运行字节码

  • 总结: .g4文件的编译、parser/lexer的代码编译、parser/lexer字节码的运行,需要保持版本一致!

  • 这也是为什么开源组件喜欢使用maven plugin实现.g4文件的编译,并使用maven property保证maven plugin和antlr-runtime的版本一致的原因

http://www.dt0577.cn/news/22317.html

相关文章:

  • 网站集约化建设题目微信营销是什么
  • 电子商务知名网站优化网站最好的刷排名软件
  • 网页设计与制作的公司seo最好的工具
  • 17网站一起做网店广seo销售话术开场白
  • 太原网站制作公司哪家好西安网站建设网络推广
  • 做网站要到公安局去备案么一键免费建站
  • 做文案策划有些网站关键词查网站
  • 做淘宝这种网站百度关键词推广条件
  • 上海网站优化海百度提交入口网址是什么
  • 北京快三是真的吗北京seo排名厂家
  • 哪里有网络课程平台网站_就是帮老师建设一个教学的网站hao123上网从这里开始官方
  • 室内设计联盟官方网站登录百度指数分析大数据
  • 网站视觉首页怎么做网站推广文章
  • 为什么做电影网站没有流量全网营销思路
  • qq可以做公司免费网站桌子seo关键词
  • 网站建设与管理教学视频下载搜索关键词排名
  • 关于开展全县中小学校网站群建设的请示报告怎样免费建立自己的网站
  • 百度打网站名称就显示 如何做网站排名查询alexa
  • 做三角渐变用哪个网站人工在线客服系统
  • 不错的网站建设公司搜索引擎网站大全
  • 地图截选做分析图的网站互联网推广公司
  • 企业注册资本代表什么河北百度seo
  • 网站原创文章在哪里找安徽网络推广
  • wordpress 网站建设semen是什么意思
  • 展馆设计师系统优化
  • 周口建设路网站网站怎么做出来的
  • 怎么制作网站平台电话nba最新排名公布
  • 西宁市城北区建设网站全国十大跨境电商排名
  • wordpress导航网站主题怎么开网站
  • 兰州业之峰装饰公司麒麟seo软件