【问题标题】:Languages that can alter its own syntax?可以改变自己语法的语言?
【发布时间】:2011-07-24 20:10:28
【问题描述】:

是否存在程序员可以随时更改语言语法的现有语言?

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

代码也将是可读的,因为“标准代码”可以转换为其他编码人员喜欢的代码版本。

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

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

编辑:我找到了一个,FreeForm

【问题讨论】:

  • 我对此表示怀疑。像这样更改语法也会引入新的歧义,这些歧义都必须在语义上进行定义。
  • +1 你的问题。 IIRC 至少有 5 种这样的语言中的 4 种,你提醒我把它们都列出来。我是从cstheory.stackexchange.com/questions/7501/… 的问题来到这里的。
  • 更正:4 5种这样的语言

标签: programming-languages syntax


【解决方案1】:

在 Lisp 的具体情况下:

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

【讨论】:

    【解决方案2】:

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

    但是……

    • C 预处理器
    • 代码重新格式化(使代码以您喜欢的方式缩进,或 随便)
    • 运算符重载
    • 各种语言预编译器,如 Coffeescript-to-Javascript 导轨 3.1

    【讨论】:

    • C 预处理器是非常简单的文本替换,它只能将一个 C 标记替换为一系列其他 C 标记。运算符重载根本不改变语法,只改变语义
    • ^^^ :) 都是真的。将 () 更改为 [] 是否会更改语法?让 a[b] 表示“将 b 添加到 a”怎么样?句法?语义?哎呀,我不知道。但它的方向是调整您键入的内容以表达您希望的意思。我们可能都渴望达到 Humpty Dumpty 的高度:“当我使用一个词时,”Humpty Dumpty 用一种相当轻蔑的语气说,“它的意思正是我选择的意思——不多也不少。”
    【解决方案3】:

    您的问题需要澄清一下。

    1. 转换(f x) <---> f(x) 似乎被命名为lens,而不是语法糖。镜头是双向转换,而语法糖主要被认为是单向转换。 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. 随时更改语言语法是另一回事。诸如“now forget (f x) syntax and use f(x) syntax”这样的inline子句可能被视为不一致的根源;另一方面,诸如“用二元运算符#$扩展当前二元运算符集”之类的子句可能被视为一个有用的特性。

    4. 需要进一步澄清。

    我计划在进一步澄清后列出所有可以更改其语法的语言;可能,这将是http://programmers.stackexchange.com的新问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多