可以改变自己语法的语言?

时间:2011-07-24 20:10:28

标签: programming-languages syntax

是否有任何现有语言可供程序员随时更改语言的语法?

这意味着可以用自己喜欢的语法编写语言,并且有一些翻译器将其翻译回某些“标准代码”,可以编译或解释。

代码也是可读的,因为“标准代码”可以转换为另一个编码器喜欢的代码版本。

我有这个问题,因为有些人可能喜欢语言的设计,但不喜欢语法。 (例如,Lisp用[]代替(),Lisp用f(x)代替(f x))。

此外,如果有人能就此类主题提供一些学术资源,那就太好了。

编辑:我找到了一个,FreeForm

3 个答案:

答案 0 :(得分:6)

在Lisp的具体案例中:

  • Lisp有宏!您可以使用Lisp宏以任何方式转换语言。
  • 您还可以创建读取器宏来更改在Lisp中解析源表达式的方式。
  • 要对源格式进行更广泛的更改,您甚至可以创建自己的阅读器。有关示例,请参阅David A. Wheeler的readable S-expressions提案。

答案 1 :(得分:2)

有各种各样的东西倾向于那个方向......但我怀疑我的名单会受到“哦不,这根本不是魔法!”综合征。

但是...

  • C预处理器
  • 代码重新格式化(使代码以您喜欢的方式缩进,或者 无论)
  • 运营商超载
  • 各种语言预编译器,如Coffeescript-to-Javascript in Rails 3.1

答案 2 :(得分:1)

你的问题需要澄清一些。

  1. 转化(f x) <---> f(x)似乎被命名为镜头,而不是语法糖。镜片是双向转换,其中语法糖通常被认为是单向转换。 Boomerang项目提供了一些制作镜头的工具;这里列出了一些研究论文:http://www.seas.upenn.edu/~harmony/。尽管如此,我同意某些语法糖可以用作镜片。

  2. 一般来说,允许在同一个地方同时使用“含糖”和“脱糖”的句法形式,而f(x)(f x)似乎是相互排斥的。 (f x g(h y))(f x g (h y))还是(f x (g h y))?是的,您可以通过将空间视为重要来消除歧义,但存在一些缺点。

  3. 在任何时候改变语言语法都是另一回事。这样的内联子句作为“现在忘记(f x)语法并使用f(x)语法”可能被视为不一致的来源;另一方面,诸如“使用二元运算符#$扩展当前二元运算符集”之类的子句可能被视为一个有用的特性。

  4. 需要进一步澄清。

  5. 我打算列出所有可以在进一步澄清之后改变其语法的语言;可能,这将是http://programmers.stackexchange.com

    的新问题