上下文对无上下文和上下文敏感的语法意味着什么?

问题描述 投票:0回答:1

如果我有像var string = "var";这样的东西,那么在第一个双引号之后规则会发生变化,而var并不意味着它与文本开头的意思相同。在第二次双引号后,事情变回正常。这怎么不被认为是背景?

(请不要在答案中使用这些箭头,而是尝试使用自然语言!)

context-free-grammar context-sensitive-grammar
1个回答
1
投票

箭头的方向很重要,所以如果我不能谈论它,那将很难解释。所以,对不起,我打算用箭头。他们真的并不复杂。

表达式A -> ...的意思是“A...”。这并不意味着“...是一个A”。无上下文意味着如果A在某些上下文中可以是“......”,则它在任何上下文中都可以是“......”。但是箭头总是从类别指向特定的;永远不会倒退。

在您的示例中,identifier是一个字母,后跟一堆字母数字符号:

 identifier -> letter (letter OR digit)...

所以identifier可能是var。这并不意味着var总是一个identifier,正如你的例子所示。箭头指向一个方向。

因为语法是无上下文的,如果我们在某些语境中寻找identifier而我们接受var作为identifier,那么在我们寻找identifier的任何其他环境中,我们也必须接受var。

但有一些背景(引用之间)我们不寻找identifier。没关系;没有上下文的条件没有被打破。上下文适用于箭头方向。

© www.soinside.com 2019 - 2024. All rights reserved.