使用自适应语法[关闭]

问题描述 投票:8回答:6

我正在尝试实现一种语法(或语言系列),其语法可以动态更改。我没有找到作为研究案例的例子。

你能不能给我一些真实世界中使用过的东西(甚至是学术界)?

使用动态语法实现特定于域的语言是否有意义?

compiler-construction grammar dsl
6个回答
9
投票

具有动态语法的最着名的当前语言是Perl6。最着名的例子可能是Smalltalk-72

您可能还想查看来自OMetaSTEPS projectAlan Kay's Viewpoints Research Institute的其余部分,以及Val Schorre的原始META II

同样有趣:π programming language

XL (Extensible Language)还允许强大的语法操作本身。


8
投票

Katahdin编程语言在运行时提供语法和语义更改。这是一种不受支持的论文语言,所以不要指望在生产中使用它。尽管如此,Chris Seaton的thesis可能是用你自己的语言实现类似想法的好资源。

Seaton在this paper中引用,描述了Fortress编程语言的宏系统。作者的目标是使语法扩展与核心语法无法区分。


0
投票

我非常喜欢Agda的语法,它非常灵活。它允许任意的distfix操作符,它基本上允许,看起来像新的语言功能。

虽然我没有密切关注她的工作,但我知道Annika Aasa已经做了一些让程序员指定新语法的工作。您将在Google学术搜索中找到她的作品。

Fwiw,我认为开发特定于域的语言作为一种语言库,具有非常灵活的语法,这很有意义。它有时被称为嵌入式域特定语言,如果您不知道。


0
投票

我正在做同样的事情。

我应该有一些可扩展的解析器库,人们可以很快使用它们。我已经完成了词法分析器了,我正忙着把解析器放在一起。

第一个库是用Ruby编写的,我打算在完成后将它翻译成Java。我首先尝试了Java版本,但是我陷入了愚蠢的细节,所以我切换到了Ruby,所以当我还在思考时,语言不会妨碍我。

我很满意我的方法,它允许使用distfix运算符在多个词法分析器和多个表达式类型之间切换。词法分析器只是有序的正则表达式系列。

解析是生产的distfix部分和LL(1)内部的简单运算符优先级。我们会看到我是否想要更强大的东西。


0
投票

卡塔丁是一个明显的选择。还有PFront,以及Common Lisp中很好的旧解析宏。


0
投票

虽然有一个名为Dypgen的自适应解析器生成器,但我发现自适应语法的实现相对较少。我还写了一个adaptive parser in Prolog,它可以从输入中“学习”新的语法。

还有一个名为OpenZZ的“自我修改语法翻译器”,虽然它在几年内没有更新。

© www.soinside.com 2019 - 2024. All rights reserved.