是什么让Ometa与众不同?

时间:2020-03-06 14:28:16  来源:igfitidea点击:

Ometa是"一种用于模式匹配的新型面向对象语言"。我以前遇到过像Oz工具这样的语言中的模式匹配,以解析诸如Lexx / Yacc或者Pyparsing之类的语法。尽管查看了示例代码,阅读了讨论并与朋友交谈,但我仍然无法真正理解Ometa的独特之处(或者至少是为什么有人认为如此)。有什么解释吗?

解决方案

据我所知,这是一种元语言。我们可以创建新的语言结构,并创建DSL。但是最引人注目的是,我们可以从现有的解析器中继承子类以扩展语言。无论如何,这就是我所记得的。

我发现这很有趣:http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html

另外,对我来说最重要的是,Ometa的Squeak端口允许使用左递归规则。

凭借其PEG传统,它可以回溯和无限前行。记忆先前的分析结果可实现线性分析时间(几乎所有时间(*))。

高阶作品使人们可以轻松地重构语法。

本文的Packrat解析器可以支持左递归解释了左递归属性。

(*)本文的第5节解释了一个人可能会经历超线性解析时间,但是这个问题在实际语法中并未体现。