上下文无关上下文和上下文敏感语法是什么意思?

时间:2019-02-22 22:19:18

标签: context-free-grammar context-sensitive-grammar

如果我有类似var string = "var";之类的内容,则在第一个双引号之后规则将发生变化,而var的含义与文本开头的含义不同。在第二个双引号之后,情况恢复正常。怎么不考虑上下文呢?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

因此identifier可能是 var 。如您的示例所示,这并不意味着 var 始终是identifier。箭头指向一个方向。

因为语法是无上下文的,所以如果我们在某些上下文中寻找identifier并且接受 var 作为identifier,那么在任何其他上下文中在寻找identifier的地方,我们还必须接受 var

但是在某些上下文(引号之间)中,我们不是正在寻找identifier。没关系;上下文无关条件尚未打破。上下文适用于箭头方向。