1 Star 0 Fork 0

MarcFish / antlr_tutorial

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause
  1. ANTLR4简介
    1. ANTLR是基于LL(*)算法实现的语法解析器生成器,用Java语言编写,由旧金山大学的Terence Parr博士等人于1989年开始发展。
    2. ANTLR能够生成基于listener或visitor模式的由Java, C++等语言编写的词法语法解析器。
    3. ANTLR文法定义使用EBNF的定义方式;ANTLR支持消除直接左递归;
    4. 应用于:Groovy;Jython;Twitter’s search query language等。
  2. 安装: https://www.antlr.org/ 上就有安装方法;需要提前安装Java;下述命令仅安装了ANTLR4工具,运行时则需要针对不同代码选择安装。
$ cd /usr/local/lib
$ sudo curl -O https://www.antlr.org/download/antlr-4.9.2-complete.jar
$ export CLASSPATH=".:/usr/local/lib/antlr-4.9.2-complete.jar:$CLASSPATH"
$ alias antlr4='java -jar /usr/local/lib/antlr-4.9.2-complete.jar'
$ alias grun='java org.antlr.v4.gui.TestRig'
  1. 教程推荐
    1. 《The Definitive ANTLR 4 Reference》
  2. 简要说明: 这一部分可以结合同目录下几个例子一起看
    1. 概念:
      1. antlr4 工具: 读入一个语法描述文件并生成语法解析和词法解析
      2. antlr4运行时: 一个库, 其中包含了所生成代码运行需要的类和方法.
      3. listeners模式: 无需手动遍历语法树, 只需要实现listener方法.
      4. visitors模式: 需要手动遍历语法树, 语法树的遍历是手动控制的. 在生成时需要添加命令-no-listener -visitor
    2. 优先级, 左递归以及结合性
      1. 优先级: antlr4中隐式设定先出现的优先级高
      2. 左递归
        1. antlr4能够处理直接左递归, 不需要对产生式做改变
        2. 不能处理间接左递归
      3. 结合性
        1. 在产生式中插入<assoc=right>
    3. 如何在遍历树的过程中共享信息;antlr4自动生成所有的listener方法, 并没有为特定的引用返回值或参数等.
      1. 使用visitors遍历解析树: antlr4生成的visitor是方法中通过模板的方法, 允许自定义返回值类型.
      2. 采用基于栈的方式来存储返回值
      3. 基于map的标注树: 将解析树节点作为key而值作为value;
        1. 自定义map
        2. 采用antlr4提供的ParseTree类
  3. 此仓库提供了ANTLR4的简要教程,采用的是C++完成的。
    1. 环境为Java8或更高版本;ANTLR4:4.9.2
  4. 建议
    1. antlr4的github中包含了很多例子, 可以参考.
    2. antlr4中github中包含了很多已有语言的语法产生式, 可以直接使用或参考.
BSD 3-Clause License Copyright (c) 2022, MarcFish All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

a simple tutorial of antlr4. 展开 收起
C++ 等 3 种语言
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/MarcFish/antlr_tutorial.git
git@gitee.com:MarcFish/antlr_tutorial.git
MarcFish
antlr_tutorial
antlr_tutorial
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891