上下文无关文法一词中的上下文无关到底是什么意思?


29

我研究编译器已有一段时间了,我一直在寻找语法中“上下文”的含义,以及语法“无上下文”的含义,但没有结果。

那么有人可以帮忙吗?


7
“真正”是什么意思?您阅读了哪些说明,您不了解什么?IIRC,关于此事的每本正经的教科书都将解释其含义。
拉斐尔

2
这是一个相关的例子。考虑单词“ read”。这是一个单词,具有两个完全不同的含义。一个是当前时态“阅读”,另一个是过去时态“我阅读”。如果您在一段文本中看到“已读”一词,则无需查看上下文,就无法消除它代表的两种含义中的哪一种。因此,英语是上下文相关的,因为您不能在没有上下文的情况下分析每个标记(单词)。上下文相关的语法是一种语义,其中每个标记的含义都可以从表示它的单个标记中明确地推导出来。
亚历山大–恢复莫妮卡

Answers:


30

可以根据Chomsky层次结构中不同语法所允许的生产规则来解释上下文。

如果考虑无上下文语法,则它们的产生规则具有以下形式:

Aα

因此,您可以观察到这种规则的左侧部分仅由一个非终结符组成;因此,在不考虑非终结符“上下文”的情况下进行了非终结符的替换,即它所包围的其他符号。

另一方面,如果考虑上下文相关语法的生产规则,则它们具有以下形式:

βAγβαγ

其中是非末端的,而,和是非末端和末端的序列。α β γAαβγ

在这种情况下,要替换的非终结符的“上下文”(即和)会影响替换的效果,并且它是规则本身的一部分。γβγ

您可以在有关数学的答案和有关软件工程的答案中找到更多详细信息。


谢谢你的回答。但是对我来说奇怪的是,在数学SE上也提出了类似的问题。
Shady Atef

1
请注意,和不必成为生产结果的一部分。正如@David Richerby的回答中所见,它们也可能被其他序列替代。γβγ
Frozn

1
@Frozn AFAIK此处给出的是根据Chmosky层次结构的标准定义。当然,存在比上下文关联语法更强大的语法,它允许进行任何类型的产生,但标准的上下文相关语法则不允许。
Bakuriu

2
@Frozn:Bakariu是正确的,这里我们谈论的是根据Chomsky层次结构定义的语法,该语法基于对生产规则越来越严格的条件。特别地,上下文无关文法是2类文法,而上下文相关文法是1类文法。但是,类型0语法的生产规则不受任何限制,因此被称为无限制重写系统。在这里,您可以找到一些示例的Chomsky层次结构的简短描述。
PieCot

@Bakuriu和PieCot非常感谢,我知道Chomsky层次结构。有人将单调语法引入上下文敏感状态,并与Chomsky层次结构中的类型0和类型1一起引入了一般规则,只要。| β γ | | δ |βAγδ|βAγ||δ|
Frozn

17

“上下文”是周围的文本。上下文无关文法在上下文看起来像而不是。规则的左侧始终是单个非终结符。也就是说,扩展非终结符的规则不取决于该符号周围出现的文本(上下文),而仅取决于符号本身。例如,在编程语言的语法中,无论您是编写赋值(例如),将参数传递给函数(例如)还是返回值,术语扩展为相同类型的表达式。来自功能(例如)。的东西AthingsE x p rstuffAmore-stuffthingsExprx:=y+zf(y+z)return y+z


4

一般来说,即使是常规语言也可能具有上下文相关性,这意味着您可以在某种程度上确定符号可以在属于该语言的字符串中的其他符号附近出现的方式。

与上下文无关的语法的特定之处在于,当存在多种替换非终结符的方式时,通过在右侧使用具有相同非终结符的不同规则来应用,选择哪个规则永远不会取决于在推导过程中围绕此符号发生。

您可以将它们视为上下文无关的派生语言,简称上下文无关的语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.