Compiler construction 图灵完备语言中可能的最小编译器?

Compiler construction 图灵完备语言中可能的最小编译器?,compiler-construction,brainfuck,esoteric-languages,Compiler Construction,Brainfuck,Esoteric Languages,Brainfuck以其非常小的编译器而闻名。我有一个非常小的设备,它的数据中可能连最小的brainfuck编译器都装不下。有没有一种深奥的编程语言,它的编译器比brainfuck更小,是图灵完整语言? 这已经过时了,但还是请您自己回答,我会检查我查看了Brainfuck编译器的大小(原始形式约240字节),我怀疑您是否会变小,它的设计目的是生成尽可能最小的编译器(承认多年前) 尽管,来自: 除了两个I/O命令外,brainfuck是Corrado Böhm在1964年创建的正式编程语言p′的一个

Brainfuck以其非常小的编译器而闻名。我有一个非常小的设备,它的数据中可能连最小的brainfuck编译器都装不下。有没有一种深奥的编程语言,它的编译器比brainfuck更小,是图灵完整语言?
这已经过时了,但还是请您自己回答,我会检查

我查看了Brainfuck编译器的大小(原始形式约240字节),我怀疑您是否会变小,它的设计目的是生成尽可能最小的编译器(承认多年前)

尽管,来自:

除了两个I/O命令外,brainfuck是Corrado Böhm在1964年创建的正式编程语言p′的一个小变种。事实上,Böhm使用相当于相应brainfuck命令+,-,[,]的六个符号,为每个基本函数提供了一个显式程序,这些函数一起用于计算任何可计算函数。因此,在非常真实的意义上,第一个“brainfuck”程序出现在Böhm 1964年的论文中——它们是足以证明图灵完整性的程序

从:

p′是第一个被证明是图灵完备的“无后继”命令式结构化编程语言

因此,p“”的编译器,或等效的brainfuck的修改版本,将更小,并且仍然可以完成

然而,如果我不遵循问题的精神,那么设备本机指令集将是图灵完整的。汇编程序可能太大,但您可以直接将操作码值写入可执行文件或“编译”为可执行文件的文本文件。那个“编译器”可能会更小。虽然它不是一个真正意义上的编译器,因此没有遵循问题的精神

这是真实世界的问题吗?如果你没有足够的空间来编译,那么你的源代码和二进制文件会去哪里呢

相关问题:

的指令数是BF的一半,因此为其创建编译器应该更简单

=   Switch direction (- <-> +) (default: +)
+   Change data in selected direction. BF equivalents: - +
>   Change cell in selected direction. BF equivalents: < >
|   Jump in selected direction. BF equivalents: ] [
==  Output. BF equivalent: .
|=| if switch is positive, =|=| if switch is negative.  Input. BF equivalents: ,
=开关方向(-+)(默认值:+)
+更改选定方向上的数据。高炉当量:-+
>按选定方向更改单元格。BF当量:<>
|向选定的方向跳跃。BF当量:][
==输出。BF等效值:。
|=|如果开关为正,=|=|如果开关为负。输入。BF等效值:,

还有许多其他语言可能也是可行的选择。

我发现最小的BF编译器使用二进制形式的lambda表达式()表示


解释器正好是112个字节(即iirc。BF中Hello World程序的确切字节数)。

另一个候选者将是J.Lambek(1961)的前任。具有条件跳转的p“-机器

无限多个计数器和两条指令:

  • n+
    :位置n处的递增计数器
  • n-else p
    :如果位置n处的计数器为正递减,则else跳转到指令p
您可以轻松地将地址
n
替换为Böhm的
极小值

下面是一个完整的用于MiniMAX的DOS.COM可执行解释器:

MOV SI,010E  # 3 bytes; 010E is the byte after the RET line
MOV DI,SI    # 2 bytes
MainLoop:    # assembler directive, 0 bytes
MOVSW        # 1 byte
LODSW        # 1 byte
ADD SI,AX    # 2 bytes
XCHG SI,DI   # 2 bytes
JNZ MainLoop # 2 bytes
RET          # 1 byte
<append program to interpret here>
             # Total: 14 bytes
MOV SI,010E#3个字节;010E是RET行后的字节
MOV DI,SI#2字节
MainLoop:#汇编程序指令,0字节
MOVSW#1字节
LODSW#1字节
添加SI,AX#2个字节
XCHG SI,DI#2字节
JNZ主循环#2字节
RET#1字节
#总计:14字节
您的设备可能没有完全相同的指令集,但我无法想象它会有如此大的不同。可能还不到20字节


缺点是,做任何有用的事情的极小极大程序都相当长,但如果您的唯一目标是在芯片上安装TC解释器,这就可以了。

为什么您需要在设备中安装编译器?无可否认,图灵完整系统是一个可以模拟图灵机的系统。图灵机假设无限内存c快速性。你的设备上不可能有无限的内存容量,所以即使语言通常是图灵完全的,在你有限的环境中它也不会是图灵完全的。你有没有看过,或者,只有一条指令?我不知道你可以用它来做一个编译器…:)@Scony如果我错了,请纠正我,但似乎是si编程语言越简单,完成任务所需的内存就越多。我很感谢你的评论。谢谢!我可能会使用P“我会投赞成票,但我不能,因为我没有足够的代表;)我只做了几个字节的存储,我还不知道我能用它做些什么……比这个小了两倍;)