在许多涉及上下文无关文法(CFG)的论文中,在那里出现的此类文法示例经常承认对其生成语言的简单刻画。例如:
生成,
S → a a S b S →
生成,然后
S → b S b S →
生成,或等效(其中是指由拍摄的部分)。
可以通过添加索引(),对这些索引的简单约束(i > j)以及将模式匹配到正则表达式来生成上述示例。这使我想知道是否可以通过正则表达式的某种扩展来生成所有无上下文相关的语言。
是否存在可以生成上下文无关语言的全部或某些重要子集的正则表达式扩展?
在许多涉及上下文无关文法(CFG)的论文中,在那里出现的此类文法示例经常承认对其生成语言的简单刻画。例如:
生成,
S → a a S b S →
生成,然后
S → b S b S →
生成,或等效(其中是指由拍摄的部分)。
可以通过添加索引(),对这些索引的简单约束(i > j)以及将模式匹配到正则表达式来生成上述示例。这使我想知道是否可以通过正则表达式的某种扩展来生成所有无上下文相关的语言。
是否存在可以生成上下文无关语言的全部或某些重要子集的正则表达式扩展?
Answers:
就在这里。将上下文无关的表达式定义为以下语法生成的术语:
这是所有构造为除了Kleene星,这是通过一般的定点操作者替换正则语言的和变量引用机制。(无需Kleene星号,因为它可以被定义为克* ≜ μ α 。)。
上下文无关表达式的解释需要考虑自由变量的解释。因此,将环境 定义为从变量到语言(即∑ ∗的子集)的映射 ,然后让[ ρ | α :大号]是像的行为的函数ρ上除了所有输入α,并且其返回语言大号为α。
现在,如下定义一个无上下文表达式的解释:
使用克纳斯特-塔斯基定理,可以很容易地看到,解释是表达式中最不固定的。
这很简单(尽管并非完全无关紧要),它表明您可以给出一个上下文无关的表达式,该表达式派生与任何上下文无关的语法相同的语言,反之亦然。无关紧要的原因在于,上下文无关的表达式具有嵌套的固定点,而上下文无关的语法为您提供了元组上的单个固定点。这就需要使用Bekic的引理,恰好说嵌套的固定点可以转换为产品上的单个固定点(反之亦然)。但这是唯一的微妙之处。
编辑:不,我对此不知道标准参考:我出于自己的利益制定了这个标准。但是,这是一个显而易见的构造,我相信它是以前发明的。一些偶然的谷歌搜索揭示了Joost Winter,Marcello Bonsangue和Jan Rutten最近发表的论文《上下文无关的 语言,Cogegebraically》,其中他们给出了该定义的变体(要求保护所有固定点),它们也称为上下文无关的表达式。
我们最近发布了一个框架的概述,该框架可以做到这一点。在comp.compilers下查看,我在其中发送了通知以及一些链接。
新的发展是基于乔姆斯基-舒岑贝格定理的,并且可以认为是这一结果的完成。乔姆斯基本人已被告知事态发展,并表示希望“赶上”。
伴随着这一发展,我们还为上下文无关的表达建立了两种等效的公式-一种是“最小定点”μ演算形式(最初由Gruska,Yntema和McWhirter进行的扩展/完成)-该书在2014年获得了最终定稿,其他书则在2008年发表。