ANTLR

✍ dations ◷ 2025-09-08 23:20:24 #编译器软件

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

相关

  • 昏睡症非洲人类锥虫病(法语:Trypanosomiasis africain; 英语:African trypanosomiasis)或称昏睡病、嗜睡病(英语:sleeping sickness),是一种由布氏锥虫(英语:Trypanosoma brucei)引起的寄生虫
  • CdS硫化镉是硫和镉的无机化合物,化学式为CdS。它是一种N型光电导半导体材料。属Ⅱ-Ⅵ族化合物半导体。分子量144.476,属六方晶格结构,晶格常数5.86×10-10m,熔点1750℃,禁带宽度2.
  • 比尔·哈斯拉姆威廉·艾德华·“比尔”·哈斯拉姆(英语:William Edward "Bill" Haslam,/ˈhæzləm/;1958年8月23日-)是美国田纳西州诺克斯维尔市的市长。哈斯拉姆是共和党人。他在2003年的市长
  • 自养生物自养生物,也称为生产者(producer,autotroph),在台湾称为自营生物,主要包括绿色植物和少数微生物,它们可以利用阳光、空气中的二氧化碳、水以及土壤中的无机盐等,通过光合作用或化能
  • Cheers快乐工作人杂志《Cheers快乐工作人杂志》,简称《Cheers杂志》,是一本在台湾每月发行的杂志,是天下杂志出版集团的第三本杂志,以年轻上班族为主要对象,主要报导内容为职场新知与品味生活等议题。
  • 循环报道循环报道,又称虚假确认,是来源批判的情况之一,指一条消息以貌似出自多个独立来源的形式出现,实际上仅出自单一来源。部分情况中,该问题由草率的情报搜集工作引起。然而在其他情形
  • 铁线莲状马兜铃铁线莲状马兜铃(,又称欧洲催生草)是马兜铃科缠绕草本植物,原产于欧洲。铁线莲状马兜铃叶心形,具淡黄色管状花,通过缠绕其他植物向光生长。虽然铁线莲状马兜铃有毒,此植物仍曾为一药
  • 背投电视背投电视是使用红绿蓝三个单色显像管(称为“投影管”),或是DLP芯片、三片式液晶等等成像,通过特殊电路以及光学设计会聚成像,并把视频图像投影在大面积屏幕上,从而获得大尺寸电视
  • 惠下田荣芳第十六世井上因硕(1884年-1961年),日本围棋棋手,生于广岛县安艺郡,本名惠下仙次郎,后改名惠下田荣芳。1895年至大阪拜于泉秀节门下,1901年入大冢因硕门下,初段。1915年升上五段,升段会
  • 德尔菲娜·阿尔诺德尔菲娜·阿尔诺(法语:Delphine Arnault;1975年4月4日-),是一名法国商人,担任路易·威登集团副总裁。阿尔诺在塞纳河畔讷伊出生,毕业于里尔北方高等商学院和伦敦政治经济学院,德尔菲