无语法编程语言

时间:2011-05-08 04:18:05

标签: programming-languages computer-science theory genetics

这可能是一个非常奇怪的问题,它肯定是。我不太熟悉编程语言是如何用传统方法制作的,所以我想知道,是否可以设计无语法编程语言?这意味着任何输入都是有效的并执行某个计算,并且相同的输入将始终执行相同的操作。不存在语法错误(允许逻辑和运行时错误,程序可能崩溃,进行随机计算等)。

我想到了这一点,因为遗传学基本上是我的理解,就像那样。

编辑: 我认为有一些误解。无语法只是意味着所有输入都将计算,解释器/编译程序将遵循该特定指令集,无论它是随机的。

此外,它必须匹配每个输入都有1个且只有1个输出的事实。诸如语法错误之类的内容违反了该规则。

编辑2很多人都在使用语法部分。忘记语法,关注任何输入将产生 UNIQUE 输出的事实。

7 个答案:

答案 0 :(得分:8)

有点。

语法是指输入的顺序,所以如果你的语言的意义不依赖于顺序,那么无论输入的形式如何,都可以构造一个有意义的“句子”,然后是的,你可以使用无语法语言。这种语言必须以某种方式被大小写变形,或者只是为输入的每个可能的可分离项(标记,字符等)定义含义。你不能依赖这些物品的顺序,但你可以依赖它们的数量,这就是它。

总之,它非常深奥,因为操作语义通常依赖于语法,并且对大多数人来说并不是很明显,这种依赖并不是绝对必要的。这是一种非图灵完备的无语法语言:

  • 计算a个字符。
  • 计算b个字符。
  • 忽略其他一切。
  • 产生两个计数的商。

这是图灵完整的一个:

  • 计算a个字符。
  • 计算b个字符。
  • 忽略其他一切。
  • 获取a个字符数的二进制表示。
  • 使用等于b个字符数的零的前缀。
  • 将结果评估为Jot程序。

然后,兔子洞有多深?您输入的基本单位是什么?如果它是字节或字符,那么你可以使用大量可能的输入标记。但是,如果你承认字符中的位有一个基本的排序,那么你必须进一步减少问题,并且仅依赖于0位的数量和1位的数量,这已经足够了从中构建有意义的程序的信息。以我的图灵完整示例为例,将ab分别替换为“清除位”和“设置位”。

当然,也有人认为Lisp在某种程度上是无语法的,因为它的语法是程序抽象结构的直接表示,更不用说整个程序作为数据的东西了。实际上并不是说Lisp及其派生词是严格的无语法,因为它们在语法和含义之间具有一对一的对应关系。就像整数文字一样,Lisp程序实际上只是一个很棒的大代码文字。

答案 1 :(得分:3)

如果相同的输入总是“相同的”,那么有一些规则可以控制输入的使用方式。这些规则是语法。没有语法,就没有结构。所以,不,不可能。

如果您想知道是否可以创建没有语法错误的语言,那么确定......您所要做的就是让编译器(或解释器,或者其他)为任何输入发出一些固定输出没有更有用的结构。您可以输出1,或0,或“感谢您的输入。”当然,您可以选择更具描述性的内容,例如“语法错误”。

我认为计算机代码和遗传密码之间没有确切的平行关系。但是,如果你考虑将DNA翻译成蛋白质的过程就像编译一样,那么你必须记住,只有很小比例的人类DNA实际编码蛋白质。我们的大部分DNA都是非编码的,并且可能充满了语法错误的遗传版本。

答案 2 :(得分:3)

我认为反向波兰人会符合你的定义。至少在到达输入流的末尾之前,如果输入了随机的值字符串(所有相同类型)和二元运算符,则不会检测到错误。

答案 3 :(得分:3)

您可以制作用于定义输入字符集的程序语言(例如,[a-z0-9]),该组中的每个字符串都是有效程序。例如,采用这种语言(其中?代表任何字符)。

a? : add one to register ? if ? is a numeral, nop otherwise
b? : subtract one to register ? is a numeral, nop otherwise
p? : print register ?

任何其他两个字符序列都是nop。如果你在字符串的末尾有一个额外的字符,它就是一个nop。

这符合您的要求。图灵完全(j?意味着跳转到寄存器中的地址?s?意味着将寄存器0的内容存储在地址?)中并不难。

但是,我不知道在C语言编译器生成可执行代码与语法错误的情况下执行nop之间有多么不同。

答案 4 :(得分:2)

语言完全取决于你如何解释它们。必须有一种语法可能非常复杂,但必须如此。就像你所做的那个问题是用英语写的,并且有一个正确的语法语法,这就是为什么我理解它。如果我们可以制作这样一种编程语言来检测自然语言并根据它们得出它们的命令,例如“嘿,你为什么不让我成为计算器”,那么计算机就会为你制作一个计算器。没有语法意味着语法不那么严格。例如,如果你用德语说话我就不会理解一个单词,这意味着我无法检测出我应该解释和反应的语法,而是我还有一些其他的反应“这个人说的是什么”或“这是说德语的家伙?“所以解释变得不同了。 语法少可能意味着系统通过学习环境和环境动态生成的语法。 实际上需要在两者之间建立一个协议来传达它应该如何解释,这就是语法。

答案 5 :(得分:1)

即使遗传代码在引入无法计算的代码(突变,缺失肢体等)时也会出错。

答案 6 :(得分:-1)

不。在某些时候,处理器必须知道要做什么与您放在硬盘驱动器上的随机垃圾,无论多么随意。即使它因系统而异,这仍然是语法。