如果我有类似的东西var string = "var";
,那么在第一个双引号之后规则会发生变化,并且与var
文本开头的含义不同。在第二个双引号之后,事情又恢复了正常。怎么不考虑上下文?
(请不要在答案中使用这些箭头,而是尝试使用自然语言!)
如果我有类似的东西var string = "var";
,那么在第一个双引号之后规则会发生变化,并且与var
文本开头的含义不同。在第二个双引号之后,事情又恢复了正常。怎么不考虑上下文?
(请不要在答案中使用这些箭头,而是尝试使用自然语言!)
箭头的方向很重要,所以如果我不能谈论它,这将很难解释。所以,对不起,我要使用箭头。它们其实并不复杂。
该表达式的A -> ...
意思是“一个A
是...
”。这并不意味着“...
是一个A
”。上下文无关意味着如果A
在某些上下文中可以是“...”,那么在任何上下文中它都可以是“...”。但箭头总是从类别指向具体;永不倒退。
在您的示例中, anidentifier
是一个字母,后跟一堆字母数字符号:
identifier -> letter (letter OR digit)...
所以identifier
可能是var。正如您的示例所示,这并不意味着var始终是。identifier
箭头指向一个方向。
因为语法是上下文无关的,所以如果我们identifier
在某个上下文中寻找 an 并且我们接受var作为 an identifier
,那么在我们正在寻找 an 的任何其他上下文中identifier
,我们也必须接受var。
但是在某些情况下(在引号之间),我们不是在寻找identifier
. 没关系; 上下文无关的条件没有被打破。上下文适用于箭头方向。