是否有(简单的)方法来修改某些特定编程语言的语法?

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

这个问题可能很幼稚,所以请随时向我提问。我是从数学背景来学习计算机科学的,所以人们一直告诉我,Haskell之类的函数式编程语言对我来说会很自然,但是我发现许多语言(不仅是函数式语言)的语法非常丑陋且不直观。

[在Haskell中,举一个小例子,类型声明用::编写,例如

str :: String 
str = "Hello, World!"

我有没有办法在自己的系统中修改语法,以便::的功能可以由诸如:::;;或更佳的:is_a:之类的其他东西执行,所以我可以执行与上述相同的功能:

str ::: String 
str = "Hello, World!"

明确地说,如果我修改系统中的语法,就共享代码的困难我不会担心任何务实的担忧;我只是想知道理论上是否可以修改编程语言的基本语法,如果可以,如何进行修改。

请随时修改标签,或要求澄清。

syntax programming-languages
2个回答
2
投票

绝对有可能重新定义编程语言的语法。在这种情况下,您正在做的是发明一种新的编程语言,该语言具有与原始语言相同的功能,但是语言构造的语法不同。

这不是一件很简单的事情,但这是两种可能的方法:

预处理器/翻译器

您可以编写一个程序,以新的语法读取文件,对其进行解析,然后将其转换为具有原始语言的文件。那时可以使用原始的编译器/解释器。

这种方法的主要优点是您只需要提供翻译即可。其他一切都可以重用。

主要缺点是您仍然会遇到大多数错误消息(例如,键入错误),这些错误消息指向翻译并提及原始语言的语法。您也许可以将它们翻译回去,但这取决于语法的差异。

分叉语言实现

没有什么可以阻止您下载GHC源代码(或GCC或...)并修改其解析器和漂亮的打印机以使用新语法。您必须找到正确的位置来在大量文件中进行修改,但是可以做到这一点。

这里的主要缺点是,每当发布新版本的GHC或坚持使用较旧的版本时,您都必须重新合并更改。

结论

具有良好的语法很不错,但并不重要。如今,PL理论的研究人员从不讨论语法问题,而只讨论语义问题:新功能,新类型,新优化等。

如果愿意,可以随意修改任何语言的语法。这可能是一个有趣的项目,这是一种挑战自我的方式,足以理解庞大的代码库,足以在此处和此处进行一些更改。但是请记住,其他人很可能不想阅读用您自己的语法编写的代码:周围已经有太多的语言,而为一种已知的语言学习新的语法可能会被视为浪费精力,可以用来学习真正的新东西。


0
投票

这是一个非常广泛的主题,您可能会在Stack Exchange的软件工程和计算机科学论坛上获得更多详细的答案。但我会尝试给出一些指示。

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