对于MediaWiki标记(用于创建和编辑维基百科文章的标记语言)是否无上下文或上下文敏感,似乎存在分歧。
请参阅http://www.mediawiki.org/wiki/User_talk:Kanor#Response_to_article_in_Meatball
我认为它显然是对上下文敏感的。其中一个例子是wikimarkup lists中的终端字符。列表形成如下:
* One thing
* Another thing
* Yet another thing
列表项的 end 由回车符表示。
但是,如果列表嵌套在表格或翻译中,则列表项的 end 可以是回车符,也可以是表/翻译终端符号。例如,以下似乎是有效的标记:
{{Infobox person
* One thing
* Another thing
* Yet another thing}}
但是,解析器需要跟踪上下文,例如当确定最后一个列表的 end 时,当它遇到}}
符号而不是结束行(回车)字符时,它当前嵌套在一个转换中项目
那么......这可能不上下文敏感?
答案 0 :(得分:4)
"上下文敏感"有一个precise formal definition,它似乎与你的直觉不符。语法
S -> P | E
P -> '(' T '.' ')'
E -> '[' T '!' ']'
T -> <any context-free grammar fragment>
是无上下文的(即使是常规的,如果T
是常规的),尽管T
(点/感叹号)之后的内容取决于第一个字符:没有&#34 ;上下文非终端&#34;在左手侧。即使是任意嵌套也不是问题:
S -> A | B
A -> '(' S ')'
B -> '[' S ']'
解析器必须记住到目前为止它已经看到了哪些不匹配的开括号,但它不需要上下文无关/敏感语法的上下文。这些特定的语法甚至不是不明确的(同样是一个正式术语,也用于您链接到的Wiki用户页面)。 无上下文不意味着&#34;解析器不需要工作内存&#34;或者等效地解析器可以被限制为在完全隔离中查看每个令牌&#34;。