是什么让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节解释了一个人可能会经历超线性解析时间,但是这个问题在实际语法中并未体现。