二、创建ANTLR4的maven项目

1.创建maven项目

  • 创建maven项目
    首先创建一个maven项目,可以使用maven-archetype-quickstart类型创建。并新增一些文件目录。如下图所示。
    在这里插入图片描述

  • 修改pom文件


    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4</artifactId>
            <version>4.7</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.antlr</groupId>
                <artifactId>antlr4-maven-plugin</artifactId>
                <version>4.7</version>
                <executions>
                    <execution>
                        <id>antlr</id>
                        <goals>
                            <goal>antlr4</goal>
                        </goals>
                        <phase>compile</phase>
                    </execution>
                </executions>

                <configuration>
                    <!--指定导入语法和标记文件的位置。-->
                    <libDirectory>src/main/antlr4/imports</libDirectory>
                    <!--ANTLR语法文件(*.g4)所在的目录。-->
                    <sourceDirectory>src/main/antlr4</sourceDirectory>
                    <!--指定生成Java文件的输出目录。-->
                    <outputDirectory>src/main/java</outputDirectory>
                    <!--生成解析树侦听器接口和基类。-->
                    <listener>true</listener>
                    <!--生成解析树访问者接口和基类。-->
                    <visitor>true</visitor>
                    <treatWarningsAsErrors>true</treatWarningsAsErrors>
                </configuration>
            </plugin>
        </plugins>
    </build>

更多的antlr4-maven-plugin组件修改可以参考官网的介绍。

2.创建g4文件编译文件

然后我们在src/main/antlr4目录下创建G4文件。文件目录结构会对应后面编译生成的java文件的类文件(如果这句不理解,可以在下面执行mvn编译命令之后在回来看)。下面是expr的G4文件代码。文件名称必须和grammar Expr名称一致。

grammar Expr;

/** 起始规则,语法分析的起点 */
prog
    : stat+ ;

stat
    : exprStat
    | assignStat
    ;

exprStat
    : expr SEMI
    ;

assignStat
    : ID EQ expr SEMI
    ;

expr
    : expr op = (MUL | DIV ) expr   # MulDivExpr
    | expr op = ( ADD | SUB ) expr   # AddSubExpr
    | INT                       # IntExpr
    | ID                        # IdExpr
    | LPAREN expr RPAREN        # ParenExpr
    ;

MUL     : '*' ;
DIV     : '/' ;
ADD     : '+' ;
SUB     : '-' ;
LPAREN  : '(' ;
RPAREN  : ')' ;

ID      : LETTER (LETTER | DIGIT)*  ;   // 匹配标识符
INT     : [0-9]+ ;                      // 匹配整数
EQ      : '=' ;
SEMI    : ';' ;
COMMENT : '//' ~[\r\n]* '\r'? '\n'? -> channel(HIDDEN);
WS      : [ \r\n\t]+ -> channel(HIDDEN);

fragment
LETTER  : [a-zA-Z] ;
fragment
DIGIT   : [0-9] ;

3.执行编译demo

上面的项目结构和G4文件已经准备好了。下面可以直接执行:mvn clean package命令进行编译,编译之后的maven目录结构如下图。
在这里插入图片描述

以上便是这次的所有内容,你可以在此基础上开发更多的内容。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值