Antlr学习笔记

本文介绍了Antlr4的学习笔记,包括Antlr的用途、安装过程(命令行与IDEA插件安装)、入门示例和实战——构建一个四则运算计算器。通过创建Grammar文件,生成识别器并使用Visitor遍历语法树进行计算。
摘要由CSDN通过智能技术生成

Antlr学习笔记

一、引言

​ 什么是Antlr?引用官方的说明就是:

What is ANTLR?

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It’s widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees.

​ 从编译器的角度来看,Antlr可以用来帮助我们完成编译器前端所需要完成的一些工作:词法分析(Lexer Analysis)、语法分析(Syntax Analysis)、生成抽象语法树(Abstract Syntax Tree, AST)等等。语义分析(Semantic Analysis),例如类型检查,就需要我们自己来完成。

​ 要使用Antlr生成语言的词法分析器(Lexer)和语法分析器(Parser),我们需要告诉Antlr语言的文法(Grammar)。Antlr采用的是上下文无关文法(Context Free Grammar),使用类似BNF的符号集来描述。使用上下文无关文法的语言比较常用的Parser有两种,LL Parser和LR Parser,而Antlr帮我们生成的是前者。

二、Antlr安装

1.命令行安装
  • 安装好Java,在这里就不再赘述了

  • 下载Antlr的jar包——Antlr Download

  • 将antlr-4.7-complete.jar添加到系统环境变量的CLASSPATH中:

    D:\antlr-v4.7\antlr-4.7-complete.jar;

  • 为Antlr Tool和TestRig建立batch命令:

    • 为了方便管理,我就在antlr-4.7-complete.jar所在文件夹下建立一个bat文件夹

    • 在里面创建两个bat文件,一个叫antlr4.bat,内容如下:

    java org.antlr.v4.Tool %*

    另一个叫grun.bat,内容如下:

    java org.antlr.v4.runtime.misc.TestRig %*

    • 将这两个bat文件添加到系统环境变量的PATH中:

    这里写图片描述

  • 测试是否安装成功:

    • 打开CMD

    • 分别输入antlr4命令和grun命令,出现下图:
      这里写图片描述

2.IDEA插件安装

打开IDEA,File -> Settings -> Plugins -> 导航栏搜索Antlr -> Search in repositories -> Install

这样就安装完成了,方便快捷。

三、Antlr入门

  • 首先我们先给出一个能识别Hello World那样的简单语法:

    grammar Hello;    // 定义文法的名字
    s : 'hello' ID;   // 匹配关键字hello,后面跟着一个标志符
    ID : [a-z]+;  // 匹配小写字母标志符
    WS : [ \t\r\n]+ -> skip;  // 跳过空格、制表符、回车符和换行符
  • 将这个语法保存为Hello.g4,然后执行以下命令来生成识别器:

    antlr4 Hello.g4
  • Anltr会为我们在当前目录下生成6个文件:

    Hello.tokens  HelloLexer.java     HelloParser.java
    HelloLexer.tokens HelloBaseListener.java  HelloListener.java
  • 执行javac Hello*.java 将所有java文件编译。这样,我们已经有了一个可以被HelloParser和HelloLexer利用的可执行的识别器,只缺一个主程序去触发语言识别了。

  • ANTLR运行库有提供称之为TestRig的测试工具,可以让你不创建主程序就能测试语法。TestRig使用Java反射调用编译后的识别器,它能显示关于识别器如何匹配输入的大量信息。还记得我们之前创建的grun.bat文件吗?那就是用来调用TestRig的。

    现在我们来执行一下:

    grun Hello s -tokens

    接着输入以下内容:

    hello world   #输入后回车
    EOF   #Windows下按Ctrl+Z再按回车

    TestRig会打印出记号列表,每一行输出表示一个记号以及它的有关信息:

    [@0,0:4='hello',<1>,1:0]
    [@1,6:10='world',<2>,1:6]
    [@2,13:12='<EOF>',<-1>,2:0]

    这里详细讲解下[@1,6:10=’world’,\<2>,1:6]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值