`
庄表伟
  • 浏览: 1152794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ANTLR学习心得——ANTLR简介

阅读更多
一、ANTLR简介
  ANTLR(ANother Tool for Language Recognition),简单的说,就是让你能够自己定义一种新的语言,然后ANTLR将根据你的定义,生成出这种新语言的识别与翻译程序。请记住三个关键词:
 
Lexer:词法分析器
Parser:语法分析器
Tree walker:抽象语法树遍历器
 
所谓词法分析器,简单的说,就是根据输入的字符流,识别出符合语言定义的单词。假设我们已经定义了一个计算四则运算表达式的语言。当我们输入一个字符流时,比如"1 + 2*(10+15)"。对于Lexer来说,
它接收到的输入是:'1','_','+','_','2','*','(','1','0','+','1','5',')'。
而Lexer的输出则是:'1','+','2','*','(','10','+','15',')'。
 
不具有含义的空格被去掉。完整的整数被识别出来。这样我们就能够得到一个单词流,而非字符流。
 
所谓语法分析器,则更进一步。简单的说,就是根据输入的单词流,识别出其中的语法结构。对于Parser来说:
它接收到的输入是:'1','+','2','*','(','10','+','15',')'。
而Parser的输出则是一个AST(抽象语法树,这个概念下一次再详细解释):
 
 
所谓抽象语法树遍历器,就是一个对AST进行计算的工具。这里的计算具有SICP中所提出的计算那样的广义。就是根据一个用户对于TreeWalker的定义,决定在具体遍历一颗AST时,将进行何种操作或者计算。如果用户定义一个“正儿八经”的TreeWalker,比如像这样:
 
class ExpressionTreeWalker extends TreeParser;

expr returns [double r]
  { double a,b; r=0; }

  : #(PLUS  a=expr b=expr)  { r=a+b; }
  | #(MINUS a=expr b=expr)  { r=a-b; }
  | #(MUL   a=expr b=expr)  { r=a*b; }
  | #(DIV   a=expr b=expr)  { r=a/b; }
  | #(MOD   a=expr b=expr)  { r=a%b; }
  | #(POW   a=expr b=expr)  { r=Math.pow(a,b); }
  | i:INT { r=(double)Integer.parseInt(i.getText()); }
  ;
那么ANTLR就能够根据这个定义,生成一个ExpressionTreeWalker类,来对输入的AST,进行计算,并最终返回一个double类型的计算结果。
 
因此,用户需要做的工作就是,理解ANTLR的语法,定义一个或多个*.g文件,在g文件中,定义具体的Lexer、Parser、TreeWalker,然后由ANTLR来生成代码,这样的代码,就能够理解你所定义的某种新语言的语法,并为你工作了。
 
(未完待续)
分享到:
评论

相关推荐

    Antlr简介以及开发环境

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析工具,主要用于构建语言识别器、编译器和转换器。它源于PCCTS项目,允许开发者通过定义自己的语言规则来生成相应的解析器,从而简化了语言处理的...

    antlr简介及中文手册

    ### ANTLR简介 ANTLR(ANother Tool for Language Recognition)是一个强大的开源工具,主要用于构建解析器、词法分析器和编译器等语言处理组件。它最初由Terence Parr教授开发,其前身是PCCTS(Parr’s Compiler ...

    antlr-2.7.7.jar.zip

    这个"antlr-2.7.7.jar.zip"文件是ANTLR的一个特定版本——2.7.7的Java版本,包含ANTLR库的jar文件。 ANTLR的工作原理基于上下文无关语法(Context-Free Grammar,CFG),它可以解析符合给定语法的输入,并生成抽象...

    The Definitive ANTLR4Reference 学习笔记

    学习ANTLR 4的参考手册时,首先需要了解的是语言、语法、解析树、词法单元和解析器的基本概念。语言由一系列有效句子组成,每个句子包含短语,而短语又由子短语组成。语法是语言的语法规则的正式定义,它指定了子...

    antlr-2.7.7.jar和antlr-2.7.6.jar

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR被广泛应用于各种编程语言的编译器和解释器的构建,它能生成Java、C#、Python...

    Antlr简介及中文手册

    ANTLR,全称ANother Tool for Language Recognition,是一个强大的解析工具,源自PCCTS(Parser Construction Toolkit for C++)。ANTLR主要用于帮助开发者构建识别器、编译器和转换器,它基于用户自定义的语言规则...

    The Definitive ANTLR 4 Reference.pdf_antlr_

    从标题“Definitive ANTLR 4 Reference”和描述“ANTLR 4的权威参考”可以看出,这本书详细介绍了ANTLR 4的所有核心功能和特性,是学习和使用ANTLR 4的重要资源。 ANTLR 4的主要特点包括: 1. **高级语法定义**:...

    ANTLR语法解析器简介

    通过逐步学习和实践,例如从创建一个简单的计算器开始,用户可以掌握ANTLR的使用。在这个过程中,首先定义表达式的文法结构,然后让ANTLR生成解析器和词法分析器。例如,一个简单的计算器文法可能包括表达式(expr)...

    antlr.jar.zip

    描述"antlr.jar"直接指出了这个压缩包解压后的主要内容——ANTLR的Java实现,即一个名为"antlr.jar"的文件。这个JAR文件包含了ANTLR解析器生成器的全部Java代码,开发者可以将其引入到Java项目中,利用ANTLR的能力来...

    编译原理学习框架antlr4

    在编译原理的学习中,ANTLR4扮演了核心角色。编译器是将高级语言转换为机器语言的程序,这一过程分为词法分析、语法分析、语义分析和代码生成四个主要阶段。ANTLR4主要用于语法分析阶段,它通过解析源代码的语法结构...

    antlr-2.7.7.jar

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR被广泛应用于各种编程语言的编译器和解释器的构建,它能生成Java、C#、Python...

    Antlr4 C++ 计算器

    总之,"Antlr4 C++ 计算器"是一个学习ANTLR4和语言解析技术的好起点,它展示了如何使用ANTLR4生成的解析器和词法分析器在C++环境中解析和执行数学表达式。通过深入理解和实践这个项目,你可以提升对编译原理和语言...

    The Definitive ANTLR 4 Reference.pdf

    这本书《The Definitive ANTLR 4 Reference》是ANTLR 4的主要作者Terence Parr的著作,被誉为学习ANTLR 4的权威指南。书中详细介绍了ANTLR 4的设计理念、工作原理以及如何使用ANTLR 4来构建解析器和词法分析器。以下...

    java Antlr 4 语法文件合集

    Java Antlr 4 是一个...开发者可以通过研究这些示例,学习如何定义和使用 Antlr 4 语法,从而创建自己的语言解析工具或进行语言分析任务。同时,这个资源也可以作为参考,帮助解决在使用 Antlr 4 过程中遇到的问题。

    Antlr3.Runtime_C#_

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架。ANTLR可以生成Java、C#、Python、JavaScript等...

    ANTLR

    ANTLR(ANother Tool for ...通过学习ANTLR,开发者可以快速构建出高效、灵活的解析器,实现对各种结构化文本的解析和处理,这对于开发语言工具、构建DSL(领域特定语言)或者进行代码分析等工作具有极大的价值。

    开源项目-antlr-antlr4.zip

    通过学习和使用这些资料,可以深入掌握ANTLR的使用方法,提升在语言处理方面的专业技能。 总结来说,ANTLR 4.6是一个强大的解析器生成工具,新增的Go语言支持拓宽了其应用范围,使得Go开发者也能受益于ANTLR的高效...

    antlr3最终手册

    《antlr3最终手册》作为antlr3的学习资源,被誉为是最好的学习文档和详细说明手册,它不仅对antlr3进行了全面深入的解析,还通过实际应用案例和专家观点,为读者提供了宝贵的见解和指导。以下是对该手册核心知识点的...

    antlr4-runtime-4.2-API文档-中文版.zip

    赠送jar包:antlr4-runtime-4.2.jar; 赠送原API文档:antlr4-runtime-4.2-javadoc.jar; 赠送源代码:antlr4-runtime-4.2-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.2.pom; 包含翻译后的API文档:...

Global site tag (gtag.js) - Google Analytics