• 2. IDEA配置antlr4(on mac)


    1. 为mac配置antlr4环境

    • 本人的JDK版本为1.8,需要生成的为了避免出现出现如下问题,自己选择的是antlr-4.8-complete.jar,而非最新的antlr-4.10.1-complete.jar

      Execute has been compiled by a more recent version of the Java Runtime (class file version 55.0), 
      this version of the Java Runtime only recognizes class file versions up to 52.0
      
      • 1
      • 2
    • antlr4历史版本下载地址:website-antlr4/download/

    • 将下载好的antlr-4.8-complete.jar放到指定目录,自己是/Users/xxx/antlr目录

    • 由于没有root权限,只能修改当前用户的~/.bash_profile文件,添加如下内容:

      # config antlr4
      export CLASSPATH=".:/Users/xxx/antlr/antlr-4.8-complete.jar:$CLASSPATH"
      
      alias antlr4='java -jar /Users/xxx/antlr/antlr-4.8-complete.jar'
      
      alias grun='java org.antlr.v4.gui.TestRig'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 使用source ~/.bash_profile使其生效

    • 执行antlr4grun命令,验证配置是否生效

    2. IDEA安装antlr4插件

    • 在IDEA中选择Preferences ... → \rightarrow Plugins → \rightarrow Marketplace 中,输入antlr4,安装出现的ANTLR v4插件
      在这里插入图片描述
    • 安装完成后,按照提示重启IDEA

    3. ANTLR Preview的使用

    • 新建maven项目,在resources中,创建Hello.g4文件,内容如下:

      grammar Hello;
      
      r: 'hello' NAME;
      NAME: [a-zA-Z]+;
      WS: [ \t\r\n]+ -> skip;
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 这时,可以选中r这条parser rule,开启 ANTLR Preview已验证规则的正确性

    • 本人做了如下验证,从parse tree来看,该rule书写正确
      在这里插入图片描述

    4. 生成Java代码

    4.1 通过plugin生成Java代码

    • 选中Hello.g4文件,右键 → \rightarrow Configure ANTLR ...,进行相关配置

    • 完成配置后,再次选中Hello.g4文件,右键 → \rightarrow Generate ANTLR Recognizer,会在指定目录生成指定包名的Java代码

    • 随便打开一个antlr4生成的Java文件,发现import处报错

    • 缺少相关的依赖antlr4-runtime,在pom文件中加上即可

      <dependency>
          <groupId>org.antlrgroupId>
          <artifactId>antlr4-runtimeartifactId>
          <version>4.7.2version>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5

    4.2 使用antlr4-maven-plugin

    • 除了使用IDEA的插件,还可以使用maven插件antlr4-maven-plugin

    • 配置如下:

      <plugin>
          <groupId>org.antlrgroupId>
          <artifactId>antlr4-maven-pluginartifactId>
          <version>4.8version>
          <executions>
              <execution>
                  <id>antlrid>
                  <goals>
                      <goal>antlr4goal>
                  goals>
                  <phase>generate-sourcesphase>
              execution>
          executions>
          <configuration>
              <sourceDirectory>${basedir}/src/main/resourcessourceDirectory>
              
              <outputDirectory>${basedir}/src/main/javaoutputDirectory>
              <listener>truelistener>
              <visitor>truevisitor>
              <treatWarningsAsErrors>truetreatWarningsAsErrors>
          configuration>
      plugin>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
    • 最终在指定目录生成对应的Java文件

    • 如果想生成指定package文件,改动如下:

      • Hello.g4中,添加通过@header指定package
        @header{
        package com.sunrise.hello;
        }
        
        • 1
        • 2
        • 3
      • 修改antlr4-maven-plugin的配置,将outputDirectory改为包路径
        <outputDirectory>${basedir}/src/main/java/com/sunrise/hellooutputDirectory>
        
        • 1

    4.3 通过antlr4命令生成Java代码

    • 之前配置了antlr4命令,可以通过antlr4命令生成Java代码

      antlr4 Hello.g4 -package com.sunrise.hello -visitor -o ../java/com/sunrise/hello -Dlanguage=Java
      
      • 1
    • -package,指定包名;-visitor,表示生成visitor代码,默认是不生成的;-o,指定Java代码的输出目录;-Dlanguage,指定代码语言,具体有哪些option可以查看官网

    5. 后记

    5.1 参考文档

    5.2 后续计划

    • 通过antlr4,实现一个简单的计算器
  • 相关阅读:
    Allegro如何将丝印文字Change到任意层面操作指导
    Matlab学习笔记
    【一天一点.NET小知识】运用向量Vector<T>加速求和计算
    【Linux】管理文件和目录的命令大全
    [附源码]java毕业设计基于疫情防控物流管理系统
    Unity3D占用内存太大怎么解决呢? -尾
    计算机专业毕业论文java毕业设计开题报告SSM项目源码实现的在线音乐歌曲网站[包运行成功]
    文件的目录
    无涯教程-Android Mock Test函数
    JAVA--如何基于checkstyle统一代码风格和规范?
  • 原文地址:https://blog.csdn.net/u014454538/article/details/125879636