zoukankan      html  css  js  c++  java
  • Ubuntu下安装antlr-4.7.1

    简介:antlr工具将语法文件转换成可以识别该语法文件所描述的语言的程序.

    例如:给定一个识别json的语法,antlr工具将会根据该语法生成一个程序,该程序可以通过antlr运行库来识别输入的json.

    1.下载jar包,antlr-4.7.1-complete.jar

    http://www.antlr.org/download/
    

     

    2.将这个jar包移动到 /usr/local/lib 目录下

    3.修改 ~.bashrc 文件

    #Java
    export JAVA_HOME=/usr/local/jdk1.8.0_121
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/local/lib/antlr-4.7.1-complete.jar
    export PATH=${JAVA_HOME}/bin:$PATH
    alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool'
    alias grun='java org.antlr.v4.runtime.misc.TestRig'
    

    其中的TestRig是一个antlr在运行库中提供的一个调试工具,它可以详细列出一个语言类应用程序在匹配输入文本过程中的信息,这些输入文本可以来自文件或者标准输入.TestRig使用java的反射机制来调用编译后的识别程序,这里使用grun作为别名.

    4. source ~/.bashrc

    5. 在idea中安装antlr插件

    6. 建立一个 Hello.g4 文件进行测试

    //Define a grammar called Hello
    grammar Hello;
    r : 'hello' ID; // match keyword hello followed by an identifier
    ID : [a-z]+; // match lower-case identifiers
    WS : [ 	
    ]+ -> skip; // skip spaces, tabs, newlines
    

    7. 生成java文件和编译java文件

    antlr4 Hello.g4
    javac Hello*.java
    

     

    xxxParser.java 该文件包含一个语法分析器类的定义,这个语法分析器专门用来识别语法xxx的.

    在该类中,每条规则都有对应的方法,此外还有一些辅助代码

    xxxLexer.java 该文件包含的是词法分析器的类定义,它是由antlr通过分析词法规则,以及语法中的字面值'{' ',' '}'等生成的.词法分析器的作用是将输入字符序列分解成词汇符号

    xxx.tokens antlr会给每个我们定义的词法符号指定一个数字形式的类型,然后将它们的对应关系存储于该文件中.

    xxxListener.java xxxBaseListener.java 在遍历语法分析树的时候,遍历器能够触发一系列事件(回调),并通知我们提供的监听器对象.xxxListener接口给出了这些回调方法的定义,我们可以实现它来完成自定义的功能.

     8.查看结果,注意输入hello world之后要ctrl+D

    其他参数详情请参考ANTLR4权威指南28页

     - tokens #打印出token流
     - tree   #用LISP表单打印出解析树
     - gui    #在对话框中可视化地展示解析树
    

    tokens 打印出词法符号流

    grun  Hello r -tokens
    Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
    hello world
    [@0,0:4='hello',<'hello'>,1:0]
    [@1,6:10='world',<ID>,1:6]
    [@2,12:11='<EOF>',<EOF>,2:0]
    

    tree 以LISP格式打印出词法分析树

    grun Hello r -tree
    Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
    hello world
    (r hello world)
    

    gui 显示语法分析树

    grun Hello r -gui
    Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
    hello world
    

     

     antlr提供两种遍历语法分析树的方式:1.监听器2.访问者模式

    antlr的jar包中,有两个关键部分:1.antlr工具2.antlr运行库(运行时语法分析)api

    antlr工具:使用org.antlr.v3.Tool类来生成一些代码(语法分析器和词法分析器)

    antlr运行库:是一个由若干类和方法组成的库,这些类和方法是自动生成的代码(如parse,lexer和token)运行所必须的
     

  • 相关阅读:
    基于python的种子搜索网站(三)项目部署
    Python 的 Geth 封装库 PyGeth
    主题: 002.04 Tkinter 星空大战
    python 打飞机项目 (实战一)
    python使用mysql的一些坑
    Python 变量与运算符
    字符流
    IO字节流(2)
    端口转发
    IO流(1)
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/9896463.html
Copyright © 2011-2022 走看看