使用Chomsky Type-I(上下文敏感)语法的实际用例是什么?


9

最近,在语言解析器如何适应Chomsky层次结构的背景下,我一直在寻找一些乐趣。

什么是上下文相关文法的真实示例(即非理论上的示例)?


8
编程语言是否有价值?
马丁·约克

@LokiAstari当然。
伊万·普赖斯

2
我猜想编程语言很重要,但并不能提供一个好的解决方案,因为上下文敏感度的复杂性通常由带有语义分析的上下文无关语法代替。
Frank

@Frank我想我的问题是,如果不将其应用于某些实际用法,我将无法真正掌握上下文相关语言的含义。
伊万·普赖斯

有些人类语言可能不需要递归枚举的语言解析器,因此属于第一种类型(对上下文敏感)的语言。 cs.virginia.edu/~evans/cs3102/?p=138

Answers:


9

好问题。尽管如评论中所述,许多编程语言都是上下文敏感的,但上下文敏感通常不是在解析阶段解决的,而是在以后的阶段中解决的-也就是说,使用上下文无关的语法来解析语言的超集,并随后将其中一些解析树过滤掉。

但是,这并不意味着这些语言不是上下文相关的,因此下面是一些示例:


Haskell允许您定义用作运算符的函数,还可以定义这些运算符的优先级和关联性。换句话说,您无法为像这样的运算符表达式构建正确的解析树:

a @@ b @@ c ## d ## e

除非你已经被解析的优先级/结合性的声明@@##

infixr 8 @@
infixr 6 ##

第二个示例是Bencode,这是一种以内容长度为前缀的数据语言:

<length>:<contents>

这种格式的问题在于,没有上下文相关的内容几乎是不可能解析的,因为找出“字段”大小的唯一方法是通过解析字符串。


第三个示例是XML,假设允许使用任意标签名称:开始标签名称必须具有匹配的关闭标签:

<hi>
 <bye>
 the closing tag has to match bye
 </bye>
</hi> <!-- has to match "hi" -->

有趣。我了解XML。我怀疑XHTML 1.0规范的背后驱动力是摆脱了“怪癖模式” HTML解释器,后者支持上下文敏感的异常,而成为一种更干净的无上下文XML。
Evan Plaice

@EvanPlaice我对您的评论感到困惑- 如我的示例所示,“干净的XML”是上下文相关的

4
@MattFenwick我认为您的XML示例并未显示XML不是上下文无关的真正原因。原因是允许使用任意标签名称。如果只允许一组特定的标签,那么XML将是上下文无关的。
Honza Brabec

@HonzaBrabec你是对的-我隐式地假定允许使用任意标签名称。我应该明确指出这一假设。感谢您指出!

3

据我所知,上下文敏感语法仅在自然语言处理中使用。编程语言解释器和编译器由于复杂而不会尝试解析上下文无关的语法(即使过去曾做过一些尝试)。

也许,您可以在这些库之一中找到一些实际使用的示例:

http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits

http://opennlp.sourceforge.net/projects.html

http://nltk.org/

http://nlp.stanford.edu/nlp/javadoc/javanlp/


2
HTML的“怪癖模式”和代码预处理器又如何呢?
Evan Plaice

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.