Programming languages 可以改变自身语法的语言?

Programming languages 可以改变自身语法的语言?,programming-languages,syntax,Programming Languages,Syntax,是否存在程序员可以随时更改语言语法的现有语言 这意味着人们可以用自己喜欢的语法编写语言,并且有一些翻译人员将其翻译回一些“标准代码”,这些代码可以被编译或解释 代码也将是可读的,因为“标准代码”可以被翻译成其他程序员喜欢的代码版本 我提出这个问题是因为有些人可能喜欢语言的设计,但不喜欢语法。(例如,Lisp使用[]代替(),Lisp使用f(x)代替(fx)) 另外,如果有人能提供一些关于这类主题的学术资料,那就太好了 编辑:我在Lisp的特定情况下找到了一个。: Lisp有宏!您可以使用Lis

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

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

代码也将是可读的,因为“标准代码”可以被翻译成其他程序员喜欢的代码版本

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

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


编辑:我在Lisp的特定情况下找到了一个。

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

    • 有很多东西朝着这个方向倾斜。。。但我怀疑我的名单会患上“哦,不,那根本不是魔法!”综合症

      但是

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

        • 您的问题需要澄清

        • 转换
          (fx)f(x)
          似乎被命名为lens,而不是语法上的糖。透镜是双向变换,其中as语法糖主要被认为是单向变换。回力棒项目提供了一些制作镜头的工具;以下列出了一些研究报告:。尽管如此,我还是同意某些类型的语法糖可以作为镜头来实现

        • 通常,允许在同一位置同时使用“加糖”和“去糖”句法形式,其中as
          f(x)
          (fx)
          似乎是相互排斥的。
          (fxg(hy))
          是指
          (fxg(hy))
          还是
          (fx(ghy))
          ?是的,您可以通过将空格视为重要空格来消除歧义,但有一些缺点

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

        • 需要作出更多澄清


        • 我计划在进一步澄清后列出所有可以更改语法的语言;也许,这将是一个新问题,我对此表示怀疑。像这样修改语法也会引入新的歧义,这些歧义都必须在语义上定义。IIRC至少有5种这样的语言中的4种,你提醒我把它们都列出来。我是根据你的问题来这里的。更正:4或5种这样的语言C预处理器是非常简单的文本替换,它只能用一系列其他C标记替换C标记。运算符重载根本不会更改语法,只有语义^^:)全部为真。将()更改为[]是语法上的更改吗?让a[b]表示“将b添加到a”如何?语法?语义学?见鬼,我不知道。但它的方向是根据你的意思来定制你所键入的内容。我们可能都渴望达到汉普蒂·达姆蒂的高度:“当我使用一个词时,”汉普蒂·达姆蒂用一种相当轻蔑的语气说,“它的意思正是我选择它的意思——既不多也不少。”