Mediawiki标记对上下文敏感吗?

时间:2014-04-22 20:04:57

标签: parsing mediawiki grammar context-free-grammar

对于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 时,当它遇到}}符号而不是结束行(回车)字符时,它当前嵌套在一个转换中项目

那么......这可能上下文敏感?

1 个答案:

答案 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;。