【问题标题】:Is Mediawiki markup context-sensitive?Mediawiki 标记是上下文相关的吗?
【发布时间】:2014-06-07 09:23:27
【问题描述】:

对于 MediaWiki 标记(用于创建和编辑 Wikipedia 文章的标记语言)是上下文无关的还是上下文相关的,似乎存在分歧。

http://www.mediawiki.org/wiki/User_talk:Kanor#Response_to_article_in_Meatball

我认为它显然是上下文相关的。这方面的一个例子是wikimarkup lists 中的终端字符。列表形成如下:

* One thing
* Another thing
* Yet another thing

列表项的结束由回车指示。

但是,如果列表嵌套在表格或嵌入中,则列表项的 end 可能是回车符,也可能是表格/嵌入终端符号。例如,以下似乎是有效的标记:

{{Infobox person
* One thing
* Another thing
* Yet another thing}}

但是,解析器需要跟踪 上下文,例如在确定最后一个列表项的 end 时,当它遇到 }} 符号而不是结束行(回车)字符时,它当前嵌套在嵌入中的事实。

那么...这怎么可能上下文相关?

【问题讨论】:

  • 我不会称之为上下文相关的。也许状态机是一种更好的看待它的方式。

标签: parsing mediawiki grammar context-free-grammar


【解决方案1】:

“上下文相关”有一个precise formal definition,它似乎不符合你的直觉。语法

S -> P | E
P -> '(' T '.' ')'
E -> '[' T '!' ']'
T -> <any context-free grammar fragment>

是上下文无关的(即使是常规的,如果T 是常规的),尽管T(点/感叹号)之后的内容取决于第一个字符:没有“上下文非终端”左侧。即使是任意嵌套也不成问题:

S -> A | B
A -> '(' S ')'
B -> '[' S ']'

解析器必须记住到目前为止它所看到的不匹配的左大括号,但它不需要上下文无关/敏感语法意义上的上下文。这些特定的语法甚至都不是模棱两可的(又是一个正式术语,也用于您链接到的 Wiki 用户页面)。 上下文无关意味着“解析器不需要工作内存”,或者等效地“解析器可以被限制为完全隔离地查看每个单个标记”。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2011-12-06
    • 2014-12-31
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多