ANTLR

✍ dations ◷ 2025-01-12 23:00:07 #编译器软件

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的使用列表:

相关

  • 卡塔尔2019冠状病毒病卡塔尔疫情,介绍在2019新型冠状病毒疫情中,在卡塔尔发生的情况。2020年2月27日,一批卡塔尔公民搭乘一架私人飞机由伊朗撤回国内。2月29日,卡塔尔确诊首例新冠肺炎
  • 延 清延清(1846年-1917年),字子澄,号小恬、梓臣、铁君,晚号搁笔老人,巴哩克氏,京口驻防蒙古镶白旗人。同治癸酉举人,甲戌进士。后官工部郎中、内阁侍读、翰林院侍读学士等职。延清一生勤奋
  • 美洲红鹳美洲红鹳(学名:Phoenicopterus ruber),又名加勒比海红鹳,是一种大型的火烈鸟,与大红鹳及智利火烈鸟是近亲。它们与大红鹳以往被认为是同一物种,但现已广泛否定这个说法。虽然它们又
  • 卡赫美士战役卡赫美士战役是公元前605年新巴比伦王国与米堤亚王国的联军打败埃及与亚述帝国联军的战役。前七世纪后半叶开始,亚述帝国开始衰弱。前612年,新巴比伦攻与米堤亚的联军占亚述帝
  • 赵新 (咸丰进士)赵新(1809年-1876年),字又铭,福建省福州府侯官县(今属福州市区)人。清朝政治人物、学者。咸丰年间以进士入翰林,曾以正使身份出使琉球国,册封新国王尚泰。官至陕西督粮道。少年时,师从
  • 法国大百科全书《法国大百科全书》(法语:La Grande Encyclopédie),全称《伟大的百科全书-科学、文字及艺术的系统库存》。全书共分31册,于法国出版,成书在1886年至1902年间,由H. Lamirault编著。
  • 2008年9月逝世人物列表2008年9月逝世人物列表,是用于汇总2008年9月期间逝世人物的列表。
  • 萨姆·布朗巴克萨姆·戴尔·布朗巴克(英语:Samuel Dale Brownback,1956年9月12日-),来自堪萨斯州的美国参议员(至2011年1月),2011年1月就任堪萨斯州州长。2007年1月20日,他宣布参加2008年美国总统选
  • 茶园乡 (邛崃市)茶园乡是中华人民共和国四川省成都市邛崃市下辖的一个乡镇级行政单位。2019年12月,撤消茶园乡,将原茶园乡所属行政区域划归桑园镇管辖。茶园乡下辖以下地区:西禅社区、张坝社区
  • 弗兰克·派斯弗兰克·伊萨克·派斯·加西亚(西班牙语:Frank Isaac País García;1934年12月7日-1957年7月30日)是一位古巴革命家。他参与了推翻富尔亨西奥·巴蒂斯塔独裁政权的革命。派斯是