ANTLR

✍ dations ◷ 2025-07-02 06:08:14 #编译器软件

ANTLR(全名:ANother Tool for Language Recognition)是基于LL(*)算法实现的语法解析器生成器(parser generator),用Java语言编写,使用自上而下(top-down)的递归下降LL剖析器方法。由旧金山大学的Terence Parr博士等人于1989年开始发展。

ANTLR最初叫做PCCTS,Purdue Compiler Construction Tool Set,是Terence Parr在普渡大学攻读硕士学位时的创作,在Hank Dietz教授的指导下,开始研究构造自动化的分析器。1993年,Parr取得博士学位,并于同年发布ANTLR 1.10版。最早的ANTLR只支持Java, 直到ANTLR 3以后开始支持Ada95、C、C#、JavaScript、Objective-C、Perl、Python、Ruby、C++和Standard ML。

如同一般的词法分析器(lexer)和语法分析器(parser),ANTLR可以用来产生树状分析器(tree parsers)。ANTLR 文法定义使用类似EBNF(Extended Backus-Naur Form)的定义方式,形象十分简洁直观。例如: ANTLR用A : a;来表示规则,旧式的方法则是以 A=>a 表示,所以ANTLR是以“:”代替了“=>”。ANTLR的规则要以分号“;”结束。又如其他ANTLR符号“|”代表“或”的关系,又如“*,+”表示可以出现0次或多次。

ANTLR本身使用switch-case来匹配token,形成记号序列记号流,旧式的Yacc则利用符号表(parser table)。ANTLR是完全exception-driven,LL(k)语法比目前流行的LR剖析器(包含SLR, LALR等)强大,更可以避免LR剖析器既有的位移-归约(shift-reduce)或归约-归约(reduce-reduce)之类的语法冲突,产生的代码清楚易懂,便于程序员阅读和理解。同时更支持Unicode。

早期Antlr的LL(*)文法仍不支持“左递归”(left-recursion),这是所有LL剖析器的局限,在左递归过程没有消耗掉任何token, LL剖析器很容易造成stack overflow。至于如何消除左递归问题,在ANTLR 3中会将parsing策略退化为LL(1) + 回溯的形式。ANTLRWorks则提供一些自动消除左递归的功能,但不实用。接下来的ANTLR v4大力支持Kleene Closure表示法,透过kleene star(*)和kleene cross(+)的语法糖(syntax sugar),直接以while语句取代递归,总算可以顺利解决LL分析法所不允许的左递归(但仍不能应付间接左递归,比如两条分支拥有共同的递归规则作为前缀),因此可兼容Yacc的文法。再者,ANTLR对于LL(*)不能正确分析的情况,还支持语义断言(Semantic Predicate)来辅助判断, Semantic Predicate可以是任何逻辑,只需返回bool值。

目前Hibernate与WebLogic都是使用ANTLR做为来解析HQL。在NetBeans IDE中更以ANTLR解析C++。Twitter搜索使用ANTLR解析,一天超过200亿次查询。

虽然ANTLR本身是免费的,但《The Definitive ANTLR Reference》这本参考书则属于使用者付费。目前免费文件极少。

下列为ANTLR的使用列表:

相关

  • 美耐皿三聚氰胺-甲醛树脂(英语:Melamine resin),俗称美耐皿,是一种合成树脂,为热固性聚合物,为使用三聚氰胺(Melamine,又称蜜胺或密胺)与甲醛聚合所制成,与以尿素与甲醛制成的“尿素-甲醛树脂
  • 薄壁组织薄壁组织是植物中的活营养组织,由薄壁细胞组成,在植物体内其总体积最大。薄壁组织分布于植物所有器官,例如根部的皮层、叶肉细胞与形成层。外界水分及溶解其中的离子可以自由通
  • 新闻挖挖哇参数所指定的目标页面不存在,建议更正成存在页面或直接建立下列一个页面(建立前请先搜寻是否有合适的存在页面可以取代):《新闻挖挖哇!》是台湾JET综合台的谈话性节目,2002年1月7
  • 奥罗奇人奥罗奇人(奥罗奇或奥罗奇萨、鄂罗奇人)其意思是从事养鹿业的人,是俄罗斯一个说奥罗奇语的通古斯族群。2002年人口有686人。他们传统上分布在俄国滨海省与黑龙江下游,19世纪一些
  • 确精扎布确精扎布(蒙古语:.mw-parser-output .font-mong{font-family:"Menk Hawang Tig","Menk Qagan Tig","Menk Garqag Tig","Menk Har_a Tig","Menk Scnin Tig","Oyun Gurban Ulus
  • 伊日·亨德里赫伊日·亨德里赫(捷克语:Jiří Hendrych,1913年12月28日-1979年5月16日),捷克斯洛伐克共产党领导人之一,安东宁·诺沃提尼的追随者。。
  • 姜锡柱姜锡柱(1939年8月29日-2016年5月20日),出生于平安南道平原郡,毕业于国际关系大学法语科。在北京大学留学期间与李肇星是同学,同住一间宿舍两年。姜锡柱长年担任朝鲜的外交官,最终为
  • 变形博士《变形博士》(又译:灵魂大搜索,英语:Altered States)是一部于1980年放映的科幻恐怖电影,由肯·罗素执导。
  • 固体输送固体输送是一种化工单元操作,在化工生产中很重要。化工生产中,许多种原料、半成品和成品产品是处于固体状态,需要从一处输送到另一处,固体物料的输送要保证效率和维持物料的品质
  • 寒霜引擎寒霜引擎(英语:Frostbite Engine)是EA DICE开发的一款3D游戏引擎,主要应用于2000年代晚期的战地系列游戏。该引擎从2006年起开始研发,第一款使用寒霜引擎的游戏《战地:叛逆连队》