ANTLR

✍ dations ◷ 2025-04-27 19:19: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的使用列表:

相关

  • 动物哲学《动物哲学》(全称:Philosophie zoologique ou exposition des considérations relatives à l'histoire naturelle des animaux,意为:动物哲学:有关动物博物学思考的阐述),或译《
  • 正逆转录病毒亚科正反转录病毒亚科(学名:Orthoretrovirinae)又名正逆转录病毒亚科,为反转录病毒科的亚科,是一类单链RNA反转录病毒。本亚科包含6个属:代表种:人类免疫缺陷病毒1; HIV-1(Human immun
  • 冯守华冯守华,中国无机化学家。生于吉林磐石。1978年毕业于吉林大学化学系,1983年和1986年先后获得该校硕士、博士学位。现任吉林大学化学学院院长,无机合成与制备化学国家重点实验室
  • 论衡《论衡》,是中国东汉时期思想家王充的重要著作。全书共计十三卷,八十五篇,佚亡一篇。主要阐述了作者无神论的思想观点,对当时社会上谶纬盛行,社会上层和民间流行各种神秘主义进行
  • 分手合约《分手合约》(英语:A Wedding Invitation)是由韩国导演吴基桓执导的一部2013年爱情电影,由白百何、彭于晏、吴佩慈、蒋劲夫领衔主演,于2013年4月12日正式公映。影片在中国大陆首
  • 苏尔发苏尔发(?-1708年),满洲爱新觉罗氏。豫通亲王多铎之孙、追封睿亲王多尔博第二子。康熙十二年(1673年),在父亲贝勒多尔博死后,袭爵位为贝子。康熙三十九年(1700年),被降爵位为镇国公。康熙
  • 摩纳哥语摩纳哥语属于罗曼语族,通行于摩纳哥公国。2006年为止有35657个使用者。摩纳哥人也使用法语,因此20世纪70年代时摩纳哥语曾濒临消亡。但后来由于摩纳哥的学校开始教授摩纳哥语,
  • 鸵鸟算法在计算机科学中,鸵鸟算法(英语:Ostrich algorithm)是一个忽略潜在问题的一种算法策略,这种策略对计算机程序可能出现的问题采取无视态度(类似于鸵鸟在遇到危险时将头埋在地里,装作
  • 贝德福德公爵夫人安娜·罗素安娜·玛丽亚·罗素,贝德福德公爵夫人(英语:Anna Maria Russell, Duchess of Bedford,1783年9月3日-1857年7月3日),旧姓斯坦霍普(英语:Stanhope),是一名英国女贵族。她是维多利亚女王的
  • 穆木天穆木天(1900年-1971年),原名穆敬熙,吉林伊通人,中国现代诗人、翻译家。1918年毕业于南开中学。1926年毕业于日本东京大学。1921年参加创造社。1931年加入左联。1952年加入中国作家