灵活性如何影响语言的语法?

问题描述 投票:2回答:2

我目前正在编写自己的语言(shameless plug),它以灵活性为中心。我试图通过扩展/插件之类的东西使语言语法的几乎任何部分可以交换。在写整篇文章时,它让我思考。我想知道这种灵活性会如何影响语言。

我知道,由于其广泛的宏系统,Lisp通常被称为最可扩展的语言之一。我确实理解宏的概念,但我还没有找到一种允许某人改变解析方式的语言。据我所知,几乎每种语言都有一个非常具体的语法,由一些长规范定义。

我的问题是如何使灵活的语法影响语言的直观性和可用性?我知道基本的“当语法改变时人们可能会感到困惑”和“语义分析会很难”。这些是我已经开始弥补的事情。我正在寻找一个关于灵活语法的优缺点的更概念性的答案。

语言设计的主题对我来说仍然很陌生,所以如果我问一个明显或其他愚蠢的问题,我道歉!

编辑:我只是想澄清我问的问题。在语言理论方面,语言语法的灵活性究竟在哪里?我真的不需要具有灵活性的示例或项目/语言,我想了解它如何影响语言的可读性,功能和其他类似的东西。

programming-languages language-design usability flexibility
2个回答
1
投票

Perl是我所知道的最灵活的语言。看看Moose,Perl 5的后现代对象系统。它的语法与Perl非常不同,但它仍然非常Perl-ish。

IMO,灵活性最大的问题是中缀表示法的优先级。但我不知道允许数据类型拥有自己的中缀语法。例如,采取集合。在语法中使用会很不错。但是,不仅编译器必须识别这些符号,还必须告诉它们的优先顺序。


1
投票

Common Lisp允许改变它的解析方式 - 参见阅读器宏。 Racket允许修改其解析器,请参阅球拍语言。

当然,如果您使用正确的解析技术(例如,PEG),您可以使用灵活的,动态可扩展的解析以及强大的宏。在这里看看example - 主要是C语法,但可以使用语法和语义宏进行扩展。

至于优先级,PEG与Pratt一起非常好。

要回答您更新的问题 - 无论如何,对编程语言可读性的研究很少。你可能想看看布莱克威尔博士集团was up to的内容,但它还远未定论。

因此,我只能分享我手写的轶事 - 灵活的语法语言有助于eDSL构建,在我看来,eDSL是消除代码不必要的复杂性,使代码实际可长期维护的唯一方法。我认为非灵活语言是这个行业最大的错误之一,必须尽快不惜一切代价纠正。

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