ANTLR学习

ANTLR是一种基于LL(*)的解析器生成工具,用于语言识别器的代码生成。它支持多种语言代码生成,采用上下文无关语法,基于EBNF,并提供文法解析器、词法解析器、树解析器和组合词法解析器。ANTLR具有易用性,可进行语法检查和嵌入源代码以执行相应动作。其语法基于上下文无关语法和巴科斯范式,且支持LL(k)分析方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**ANTLR学习笔记一:概念理解 **
一、什么是ANTLR。
ANTLR是ANother Tool for Language Recognition的缩写,
意为“另一种语言识别工具”,读作Antler。
它是一种解析器程序的代码生成器(作用类似于YACC),
使用LL(*)方法,即从输入字符串的左到右,
用候选项的最左符号匹配输入(即与所有以终结符开头的候选项匹配),
每次向前(右)看n个符号(好像计算机下棋那样)。

二、ANTLR的特点
ANTLR作为一种编译器的制作工具,具有很多有用的功能和特点。

  1. 使用语法(.g文件)作为输入,生成语言识别器的代码。
  2. 支持生成各种语言的代码(只需修改与实现语言相关的部分)。
  3. 自身用Java实现。
  4. 使用上下文无关语法。
    (即语法的所有产生式/规则的左侧总是非终结符,
    简单说就是,一个被识别的非终结符无论放在什么地方,
    都可以用已有的方式推导)
  5. 语法基于EBNF(扩展的巴科斯范式)。
    这意味着,在ANTLR中既可以使用BNF元语言符号
    冒号(:)表示推导,
    竖线(|)表示或,
    也可以使用扩展的元语言符号如
    星号(*)表示出现0次或以上。
    问号(?)表示出现0次或1次。
    加号(+)表示出现1次或以上。
    关于EBNF更多介绍可以参考这里:
    http://hi.baidu.com/helloweenpad/blog/item/f5b6f701a2694e16738b655e.html
  6. 可以生成多种解析器(通过标注来指定),包括:
    文法解析器(常用于把符号保存为AST的非线性结构中)。
    词法解析器(把输入切割成线性结构的符号)。
    树解析器(输入是树结构数据,即AST,抽象语法树)。
    组合词法解析器(文法和词法解析同时进行)。
    它比同类工具更易于使用。
  7. 如果不嵌入源代码,所生成的代码将只检查输入是否可以被识别(即语法检查)。
    如果嵌入源代码,可以对识别的语法元素执
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值