【问题标题】:Is a Chomsky type 1 parser generator possible?乔姆斯基 1 型解析器生成器可能吗?
【发布时间】:2018-11-28 01:31:44
【问题描述】:

查看Chomsky hierarchy of grammars,我发现对于类型 2 语法(上下文无关语法),存在非常好的工具来帮助创建软件,将这些从文本读取到内存中的可用数据结构中。根据我的经验,Antlr4 是执行此操作的工具之一。

最近我遇到了 Markdown,它原来是一种上下文相关的语法(即 Chomsky 类型 1),因此不存在 Antlr4 的语法定义。请参阅here 和here。

所以我想知道;

  • 是否有工具可以帮助创建上下文相关语法的解析器?
  • 如果没有,这可能吗?

【问题讨论】:

    标签: parsing chomsky-hierarchy


    【解决方案1】:

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

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

    简而言之,解析器生成器可以用于“技术上”上下文敏感的语言(我使用引号是因为上下文敏感是一个二进制属性;要么是,要么不是) .

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

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

    【讨论】:

      【解决方案2】:

      我确实遇到过一个。 Quinn Taylor Jackson 的 meta-S 似乎符合 OP 的要求。这篇维基百科文章讨论了它和许多类似的系统,但 meta-S 似乎比那里讨论的大多数其他系统更实用:https://en.wikipedia.org/wiki/Adaptive_grammar#cite_note-Jackson2006-3

      在 quora,我分析了这在实践中如何对抗 GLR 解析器: https://www.quora.com/What-is-the-most-powerful-parser-algorithm

      【讨论】:

      • 这是我一直在研究的一个有用的想法,即使用 minikanren 来稍微有效地解析 CSG。我认为可以通过添加有关如何使用自适应语法来解析 CSG 的更多细节来改进这篇文章。
      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2016-01-23
      • 2011-11-19
      • 2011-02-25
      相关资源
      最近更新 更多