语法分析组合子

✍ dations ◷ 2025-09-13 22:41:40 #语法分析组合子

在计算机编程中 语法分析组合子 是一个 高阶函数 ,它接受几个的语法分析器作为输入,并返回一个新的语法分析函器作为其输出。 在这个上下文中, 语法分析器 是一个函数,它接受字符串作为输入,返回的一些结构作为输出,通常为 分析树 或一组索引表示在字符串中成功停止分析的位置。 分析器组合子使用 递归下降分析 战略,提倡模块式建造和测试。 这种分析技术是所谓的 组合分析。

使用组合子构建的分析器易于构造、可读、模块化、结构良好且易于维护它们被广泛地用于 领域特定语言(如数据库的自然语言接口)的编译器和处理器的原型设计中,在这些语言中,复杂多样的语义操作与语法处理紧密集成。1989年,Richard Frost和John Launchbury演示了使用语法分析组合子构造的自然语言解释器。Graham Hutton在1992年也使用了高阶函数进行基本解析。S.D. Swierstra在2001年还展示了解析器组合器的实用方面。在2008年,Frost、Hafiz和Callaghan用Haskell中描述了一组语法分析组合子,它们解决了长期存在的通用左递归的问题,它也是一个完整的,只需要多项式时间、空间的自顶向下解析工具。

在任何一种编程语言,拥有 头等函数,分析器组合子可以用基本的分析器构造用于更复杂的规则的分析程序。 例如,上下文无关文法 (CFG)的产生式可能有一个或多个备选推导方案,每个备选方案可以由一系列的 非终结符 和/或 终结符,或者推导方案可以由一个单一的非终结符或终结符端或空串组成。如果一个简单的分析程序适用于这些推导方案,语法分析组合子可以用来组合这些分析器,返回一个新的分析器,这可以识别出的任何推导方案。

在支持 运算符重载 的语言中,一个语法分析组合子可以使用 中缀 操作符形式,用于将不同的分析器胶合成一个完整的规则。语法分析组合子使得分析程序能以一个嵌入式的风格编写,这使得程序结构上类似于正则文法的规则。 因此,实现方式可以被认作为可执行的规格并有所有的相关优点。 (值得注意的是:可读性)

为了保持讨论比较简单,我们只讨论语法分析组合子作为 的情况。 如果输入串的长 #input ,其成员通过一个索引 j,一个 是一个语法分析器,它返回一组索引,表示分析器在位置 j成功地识别出了一个序列的标记。一个空的结果表明在索引 j识别器没有识别到任何序列的开始。

注意可能有多个不同的方法来分析一个字符串,同时在相同的索引处结束:这表明一个 二义性文法 。简单的识别器不承认这些二义性;每个可能的结束索引在结果集中只出现一次。 对于更完整的结果集合,必须返回一个更复杂的对象,例如 分析树。

下面的定义的两个基本的识别器 pq,我们可以界定两个主要的语法分析组合子,用于选择和顺序:

考虑一个有高度二义性的 上下文无关文法, s ::= 'x' s s|ε. 使用上面定义的组合子,我们可以模块化的定义可执行的符号,这种语法在一个现代化的函数式语言(例如 Haskell)作为 s = term 'x' <*> s <*> s <+> empty。当识别器 s 在一个输入序列 xxxxx 的位置 1上被应用,根据上述定义,它将返回的结果集合 {5,4,3,2}.


相关

  • 莫斯科莫斯科(俄语:Москва,罗马化:Moskva,IPA:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000",
  • 硫嘌呤类硫嘌呤(thiopurine)是嘌呤类抗代谢物,常用来治疗急性淋巴性白血病及自体免疫性疾病(如克隆氏症、类风湿性关节炎),其在体内需经代谢转化成具有生物活性的巯基鸟嘌呤核苷酸,发挥杀死
  • Bisub2/subSsub3/sub硫化铋是铋的硫化物,化学式Bi2S3,是辉铋矿的主要成分。Bi(III)盐的水溶液与硫化氢反应生成黑色的硫化铋沉淀:硫化铋也能通过铋与硫单质于500℃共热96小时制得。硫化铋溶于硝酸
  • 奥林帕斯山坐标:18°24′N 226°00′E / 18.4°N 226°E / 18.4; 226 (奥林帕斯山(Olympus Mons))奥林帕斯山(拉丁语:Olympus Mons)是火星上的盾状火山,亦为太阳系中已知最高的山,高于基准面21
  • 领土纠纷世界主权争端领土列表列出世界上存在主权争议的地区。边界争端根据成因可分为位置性的边界争端(Positional Boundary Disputes)和领土性的边界争端(Territorial Boundary Dispu
  • 亦歌亦歌是一个2007年上线的中国在线音乐试听服务网站,网站由北京新乐时代持有。除了在线播放器,亦歌还支持PC、Mac及Android手机的等平台,此外也提供了多种插件。播放器默认采用自
  • 黄志红黄志红(1965年5月7日-),浙江兰溪人,中国前铅球运动员,奥林匹克运动会银牌得主,双料世界锦标赛冠军,第一个赢得世界田径锦标赛的亚洲人。她的个人最好成绩是1990年在北京取得的21.52
  • 2011年欧洲青年羽毛球锦标赛2011年欧洲青年羽毛球锦标赛为第22届欧洲青年羽毛球锦标赛,是一项由欧洲羽毛球联合会主办予欧洲顶尖的青年羽毛球选手(19岁以下)参加的区域性羽毛球赛事。本届赛事在芬兰万塔内
  • 巴尔杜尔·冯·席拉赫巴尔杜尔·冯·席拉赫 (德语:Baldur Benedikt von Schirach 1907年5月9日-1974年8月8日) 是一名纳粹德国时期的政治家,纳粹主义者,纳粹党青年组织希特勒青年团负责人、纳粹党维也纳大区领袖。战后冯·席拉赫成为纽伦堡审判的24名战犯之一。1946年10月1日因危害人类罪被判处20年有期徒刑。法官判处他的准备侵略战争罪行不成立。冯·席拉赫的父亲卡尔·冯·席拉赫(1873年-1948年)是普鲁士骑兵队长和中尉,后来他出任萨科赛大公国宫廷侍卫长。他出生于一个知名的索布德意志贵
  • 计算神学计算神学 (Computational theology) 或计算宗教学(Computational religion)或计算创造论(Computational creationism)是一个原生的学术研究,旨在透过计算机科学及计算机科技来了解及解释神学及宗教现象。