Parsing 乔姆斯基1型解析器生成器可能吗?

Parsing 乔姆斯基1型解析器生成器可能吗?,parsing,chomsky-hierarchy,Parsing,Chomsky Hierarchy,通过查看,我发现对于类型2语法(上下文无关语法),存在非常好的工具来帮助创建软件,以便将这些语法从文本读取到内存中可用的数据结构中。根据我的经验,有一种工具可以做到这一点 最近我遇到了Markdown,它是一种上下文敏感语法(即Chomsky类型1),因此不存在任何语法定义。见和 所以我想知道 是否有一个工具可以帮助为上下文敏感语法创建解析器 如果没有,这样的事情可能吗 大多数(如果不是全部的话)真实世界的编程语言都是上下文敏感的。典型的解析器接受一些构造,这些构造稍后会因为违反某些规则或约束

通过查看,我发现对于类型2语法(上下文无关语法),存在非常好的工具来帮助创建软件,以便将这些语法从文本读取到内存中可用的数据结构中。根据我的经验,有一种工具可以做到这一点

最近我遇到了Markdown,它是一种上下文敏感语法(即Chomsky类型1),因此不存在任何语法定义。见和

所以我想知道

  • 是否有一个工具可以帮助为上下文敏感语法创建解析器
  • 如果没有,这样的事情可能吗

大多数(如果不是全部的话)真实世界的编程语言都是上下文敏感的。典型的解析器接受一些构造,这些构造稍后会因为违反某些规则或约束而被拒绝,和/或依赖某种上下文相关的预处理来生成可解析的令牌流。像C预处理器这样的宏语言显然属于后一类,但规模可控得多,插入
INDENT
DEDENT
标记的Python扫描器也是如此。第一种方法的例子包括在使用变量之前声明变量,或者函数调用的参数数量与原型中的参数数量相同。静态类型分析也属于这一类

因此,所有实用的解析器都在某种程度上偏离了形式语言理论教科书中所示的理想化模型。像bison和antlr这样的实用解析器生成器提供了可定制的钩子,允许这些偏差的特殊实现

简而言之,解析器生成器对于“技术上”上下文敏感的语言是有用的,并且可以被使用(我使用短引号,因为上下文敏感是一个二进制属性;它是或不是)

避免特殊的黑客行为固然很好,但问题似乎很棘手。由于上下文敏感语言可以对图灵机建模,因此确定性解析必须能够解决停止问题。另一方面,对于上下文敏感语言集合的某些子集,存在确定性解析算法,但它们似乎没有提供实际语言中存在的所有上下文敏感度。我们仍然缺乏一个平衡点,即太强大而无法解析,太弱而无法替换黑客


这仍然是一个肥沃的研究领域,也许你会有所贡献。但是如果您正在寻找现成的东西,我担心您会失望。

大多数(如果不是全部的话)真实世界的编程语言都是上下文敏感的。典型的解析器接受一些构造,这些构造稍后会因为违反某些规则或约束而被拒绝,和/或依赖某种上下文相关的预处理来生成可解析的令牌流。像C预处理器这样的宏语言显然属于后一类,但规模可控得多,插入
INDENT
DEDENT
标记的Python扫描器也是如此。第一种方法的例子包括在使用变量之前声明变量,或者函数调用的参数数量与原型中的参数数量相同。静态类型分析也属于这一类

因此,所有实用的解析器都在某种程度上偏离了形式语言理论教科书中所示的理想化模型。像bison和antlr这样的实用解析器生成器提供了可定制的钩子,允许这些偏差的特殊实现

简而言之,解析器生成器对于“技术上”上下文敏感的语言是有用的,并且可以被使用(我使用短引号,因为上下文敏感是一个二进制属性;它是或不是)

避免特殊的黑客行为固然很好,但问题似乎很棘手。由于上下文敏感语言可以对图灵机建模,因此确定性解析必须能够解决停止问题。另一方面,对于上下文敏感语言集合的某些子集,存在确定性解析算法,但它们似乎没有提供实际语言中存在的所有上下文敏感度。我们仍然缺乏一个平衡点,即太强大而无法解析,太弱而无法替换黑客


这仍然是一个肥沃的研究领域,也许你会有所贡献。但是如果你正在寻找现成的东西,我担心你会失望。

我确实遇到过一个。Quinn Taylor Jackson的meta-s似乎正是OP所期待的。这篇维基百科文章讨论了它和许多类似的系统,但meta-S似乎比这里讨论的大多数其他系统更实用:

在quora,我分析了这在实践中如何与GLR解析器抗衡:

我确实遇到过一个。Quinn Taylor Jackson的meta-s似乎正是OP所期待的。这篇维基百科文章讨论了它和许多类似的系统,但meta-S似乎比这里讨论的大多数其他系统更实用:

在quora,我分析了这在实践中如何与GLR解析器抗衡:

这是一个有用的想法,我一直在研究如何使用minikanren高效地解析CSG。我认为这篇文章可以通过添加更多关于如何使用自适应语法解析CSG的细节来改进。这是一个有用的想法,我一直在研究如何使用minikanren高效解析CSG。我认为这篇文章可以通过添加更多关于如何使用自适应语法解析CSG的细节来改进。