我正在尝试实现一种语法(或语言系列),其语法可以动态更改。我没有找到作为研究案例的例子。
你能不能给我一些真实世界中使用过的东西(甚至来自学术界)?
使用动态语法实现特定于域的语言是否有意义?
答案 0 :(得分:9)
具有动态语法的最着名的当前语言是Perl6。最常见的例子可能是Smalltalk-72。
您可能还希望从OMeta以及Val Schorre的原始STEPS project查看Alan Kay's Viewpoints Research Institute和META II的其余内容。
同样有趣:π programming language。
XL (Extensible Language)还允许强大的语法操作。
答案 1 :(得分:8)
Katahdin编程语言在运行时提供语法和语义更改。这是一种不受支持的论文语言,所以不要指望在生产中使用它。不过,Chris Seaton的thesis可能是用你自己的语言实现类似想法的好资源。
在this paper中引用了Seaton,描述了Fortress编程语言的宏系统。作者的目标是使语法扩展与核心语法无法区分。
答案 2 :(得分:0)
我非常喜欢Agda的语法,它非常灵活。它允许任意的distfix操作符,它基本上允许,看起来像新的语言功能。
虽然我没有密切关注她的工作,但我知道Annika Aasa在让程序员指定新语法方面做了一些工作。您将在Google学术搜索中找到她的作品。
Fwiw,我认为开发特定于域的语言作为一种语言库,语法非常灵活,这很有意义。如果您不知道,它有时被称为嵌入式特定于域的语言。
答案 3 :(得分:0)
Katahdin是一个明显的选择。 Common Lisp中还有PFront和很好的旧解析宏。
答案 4 :(得分:0)
我正在做同样的事情。
我应该有一些可扩展的解析器库,人们很快就可以使用它们。我已经完成了词法分析器了,而且我正忙着把解析器放在一起。
第一个库是用Ruby编写的,我打算在它完成后将它翻译成Java。我首先尝试了一个Java版本,但是我陷入了愚蠢的细节,所以我切换到了Ruby,所以当我还在思考时,语言不会妨碍我。
我对我的方法感到满意,它允许使用distfix运算符在多个词法分析器和多个表达式类型之间切换。词法分析器只是有序的正则表达式系列。
解析是生产的distfix部分和LL(1)内部的简单运算符优先级。我们会发现自己是否想要更强大的东西。
答案 5 :(得分:0)
尽管有一个名为Dypgen的自适应解析器生成器,但我发现自适应语法的实现相对较少。我还写了一个adaptive parser in Prolog,可以从输入中“学习”新语法。
还有一个名为OpenZZ的“自修改语法解释器”,尽管几年来它没有更新。