Antlr学习笔记.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Antlr学习笔记

Antlr学习笔记关于AntlrANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。ANTLR可以通过断言(Predicate)解决识别冲突;支持动作(Action)和返回值(Return Value)来;更棒的是,它可以根据输入自动生成语法树并可视化的显示出来(这一点我将在下面的例子中演示)。由此,计算机语言的翻译变成了一项普通的任务—在这之前YACC/LEX显得过于学院派,而以LL(k)为基础的ANTLR虽然在效率上还略有不足,但是经过近些年来的升级修改,使得ANTLR足以应付现存的绝大多数应用。感谢Terence Parr博士和他的同事们十几年来的出色工作,他们为编译理论的基础和语言工具的构造做了大量基础性工作,也直接导致了ANTLR的产生。Antlr的特点:词法分析器(Lexer)词法分析器又称为Scanner,Lexical analyser和Tokenizer。程序设计语言通常由关键字和严格定义的语法结构组成。编译的最终目的是将程序设计语言的高层指令翻译成物理机器或虚拟机可以执行的指令。词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),包括关键字,标识符,符号(symbols)和操作符供语法分析器使用。语法分析器(Parser)编译器又称为Syntactical analyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所允许的序列。   无论是Lexer还是Parser都是一种识别器,Lexer是字符序列识别器而Parser是Token序列识别器。他们在本质上是类似的东西,而只是在分工上有所不同而已。树分析器 (tree parser)树分析器可以用于对语法分析生成的抽象语法树进行遍历,并能执行一些相关的操作。  ANTLRANTLR将上述结合起来,它允许我们定义识别字符流的词法规则和用于解释Token流的词法分析规则。然后,ANTLR将根据用户提供的语法文件自动生成相应的词法/语法分析器。用户可以利用他们将输入的文本进行编译,并转换成其他形式(如AST—Abstract Syntax Tree,抽象的语法树)。二、Antlr的安装1、安装java JDK安装地址:/javase/downloads/index.jsp并设置环境变量2、安装Antlr下载地址:/download.html。ANTLR也提供了工具 ANTLRWorks 可以编辑语法文件。3、使用AntlrWorks三、对计算器功能的词法语法分析器的自动实现实例分析计算器程序网上有的是,在这里就不多说了,直接来看Antlr对于词法语法分析的处理构建(build)由ANTLR生成的C++程序需要一个运行库的支持。我们可以选择这些代码其编译为静态链接库或者动态链接库。首先使用VS新建一个名为ANTLRLib的Win32的静态链接库的工程,不要选择“Pre-compiled Header”和“MFC support”选项。点击菜单“Project”“Add to Project”“Files…”,将Antlr-2.7.4\lib\cpp\src下面的除了dll.cpp之外的所有文件加入到工程中(注意一定不要加入dll.cpp,否则无法通过编译)。此时build整个工程,就可以生成ANTLR的运行库文件ANTLRLib.liboptions{ language=Cpp;}这里表示设定生成的程序为C++语言// tokensLPAREN :(;RPAREN :);PLUS :+;MINUS :-;STAR :*;SLASH :/;NUM :(0..9)(0..9)*(.(0..9)*)?;RETURN :\n;这里设定各个字符所包含的内容注意,token下的需大写// rulesexpr returns [double value=0]{double x;} : value=term(PLUS x=term {value+=x;}|MINUS x=term{value-=x;})* ; term returns [double value=0]{double x;} : value=factor(STAR x=factor {value*=x;}|SLASH x=factor { value /=

文档评论(0)

haocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档