Compiler construction 使用自适应语法

Compiler construction 使用自适应语法,compiler-construction,grammar,dsl,Compiler Construction,Grammar,Dsl,我正在尝试实现一种语法可以动态更改的语言(或语言家族)。我没有发现作为研究案例的例子 你能给我一些在现实世界(甚至是学术界)实际使用的参考资料吗 用动态语法实现特定于领域的语言有意义吗 当前最著名的动态语法语言是。最著名的例子大概是 你可能还想看看《从》和《从》的其他部分,以及Val Schorre的原著 同样有趣的是:这个 还允许对语法本身进行强大的操作。编程语言在运行时提供语法和语义更改。这是一种不受支持的论文语言,所以不要期望在生产中使用它。不过,Chris Seaton的可能是用自己的语

我正在尝试实现一种语法可以动态更改的语言(或语言家族)。我没有发现作为研究案例的例子

你能给我一些在现实世界(甚至是学术界)实际使用的参考资料吗


用动态语法实现特定于领域的语言有意义吗

当前最著名的动态语法语言是。最著名的例子大概是

你可能还想看看《从》和《从》的其他部分,以及Val Schorre的原著

同样有趣的是:这个

还允许对语法本身进行强大的操作。

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


Seaton在描述编程语言的宏系统时被引用。作者的目标是使语法扩展与核心语法无法区分。

我非常喜欢的语法,它非常灵活。它允许使用任意的distfix操作符,这本质上允许新的语言特性

虽然我没有仔细研究过她的工作,但我知道Annika Aasa在让程序员指定新语法方面做了一些工作。你会发现她在谷歌学者上的工作


Fwiw,我认为在一种语法非常灵活的语言中开发特定领域的语言作为一个库是很有意义的。它有时被称为一种嵌入的领域特定语言,以防您不知道

Katahdin是一个明显的选择。在Common Lisp中也有一些很好的解析宏。

我也在做同样的事情

我应该有两个可扩展的解析器库,人们可以很快使用。我已经完成了lexer,我正忙于组装解析器

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

我很满意我的方法,它允许使用distfix操作符在多个lexer和多个表达式类型之间切换。lexer只是正则表达式的有序序列


解析在产品的distfix部分之外是简单的运算符优先级,在内部是LL(1)。我们将看看我是否需要更强的语法。

我发现自适应语法的实现相对较少,尽管有一个称为的自适应解析器生成器。我还写了一个可以从输入中“学习”新语法的程序

还有一个名为“自我修改语法解释器”的软件,尽管它已经有几年没有更新了


也可以使用编写“自修改”解析器,尽管这一特性还没有文档记录。

您指的是一种可以动态定义新控制结构的语言?这有点奇怪。你有没有一个例子来说明你想做什么,你认为你需要这种功能?Lisp适合你的描述吗?因为所有的编译器都是用工具(如Yacc、Lex和Bison)构建的,所以根据这个定义,所有编译语言都是“自适应”的。这个问题太模糊了,无法回答。@Starkey:人们经常强调Lisp几乎没有任何语法@洛特:相当多的语言实现使用手写解析器(包括gcc-agaik)。我认为OP指的是当前解析的程序部分,改变了程序其余部分的解析方式。@delnan:这与包含lex、yacc和yacc生成的结果程序的脚本有何不同?答案似乎很模糊,除了一句微不足道的“是的,它可以做到,而且一直都在做。”我怎么能忘记卡塔丁!还有一个相关的,类似的,我现在想不起它的名字。到PFront的链接现在似乎断了。@AndersonGreen,编辑:到一篇文章的链接仍然有效,不知道下载链接现在在哪里。也有一个动态语法,但它仍然是一个正在进行的工作。这个答案需要一些澄清。为什么Perl 6的语法被认为是“动态的”?Agda有,它允许用户定义语法。这类似于“证明助手”中的语法扩展。