今天早上我写了一个 brainf**k 的 c 转译器。我总共花了大约一个小时。
整个内容不到 50 行 c 代码。你可以在这里看到它。
什么是brainf**k?
这是一种深奥的编码语言。由瑞士学生于 1993 年发明,它几乎是被认为是图灵完备的最低要求。
它也是现存最著名的埃索兰语之一。
语法极其简单:只有 8 个字符,其余的将被忽略。
> [-]<.> [-]> [-] [-]>> [-] <p>猜猜它的作用是什么。猜猜吧。</p> <p>这是一个你好,世界!节目。</p> <p>本质上,在 brainf**k 中,你会得到一个 30000 字节的数组和一个游标。您可以使用 > 和 打印当前单元格的值 </p> <pre class="brush:php;toolbar:false">> ; increments cursor position <p>这几乎就是关于 brainf**k 的一切。<br> 我之前在 <em>assembly</em> 中编写过更多函数式程序。</p> <h2> 为什么?只是为什么? </h2> <p>我编写这个编译器完全是因为我很无聊,而且我找到了大量的解释器,所以我认为世界需要一个 brainf**k 编译器。</p> <blockquote> <p>尽管如此,不可否认,如果你想要一个非常好的 brainf**k 编译器,请查看<br> 这个。</p> </blockquote> <h3> 为什么是c? </h3> <p>很多原因:</p>
- 我想要更多练习
- 速度很快
- 它主要是便携式的
- 很普遍
- 无论如何,我不需要太多代码。
最后一个原因:整数溢出。通常,这是人们讨厌的坏事。这可能就是发明单元测试(呃)的原因。但 brainf**k 不同。内存磁带中的数字上限为 255,如果超过该上限,则应重置为 0。此外,如果该值低于 0,则应重置为 255。c 会自行执行此操作;我不需要为它编写任何代码。
如何?
更高层次的概述:
- 从文件或标准输入读取代码到内存
- 将每个字符转换为 c 代码
- 打印完成的 c 代码。
它将 brainf**k 代码从文件读取到 code[] 中。
然后,它设置了一个基本的 c 程序:
#include <stdio.h> int main() {char t[30000]={0};int p=0; </stdio.h>
您可能已经注意到它缺少右括号。那是因为更多的代码被添加到该 char[].
如果您想知道,char t[30000] 是给您的内存。我使用 t 作为磁带的缩写形式,但将其缩短,因为这些程序并不适合人类可读。
接下来,它循环遍历代码数组,该数组是单个字符的数组。对于每个字符,它将其转换为 c 代码:
character | becomes |
---|---|
> | p |
p-- | |
- | t[p]-- |
t[p] | |
. | putchar(t[p]) |
, | t[p]=getchar() |
[ | while(t[p] != 0) |
] | } |
您可以查看上面的内容来了解这些符号的作用。
这些值将添加到程序输出中,其中将包含有效的 c 代码。
最后,将此代码添加到最终输出中:
return 0;}
输出的程序到此结束。然后,转译器将此代码打印到标准输出,以便用户按照自己的意愿进行操作。
最后的想法
在写这篇文章时我有一些改进的想法。我不认为我可以做太多事情来让它更快,但我可以做一些事情来让它更安全、更好。
您可以在此处查看最终代码。
如果您愿意,您也可以做出任何形式的贡献。
感谢您的阅读!
以上是您见过的最小的转译器的详细内容。更多信息请关注PHP中文网其他相关文章!

C 在现代世界中的应用广泛且重要。1)在游戏开发中,C 因其高性能和多态性被广泛使用,如UnrealEngine和Unity。2)在金融交易系统中,C 的低延迟和高吞吐量使其成为首选,适用于高频交易和实时数据分析。

C 中有四种常用的XML库:TinyXML-2、PugiXML、Xerces-C 和RapidXML。1.TinyXML-2适合资源有限的环境,轻量但功能有限。2.PugiXML快速且支持XPath查询,适用于复杂XML结构。3.Xerces-C 功能强大,支持DOM和SAX解析,适用于复杂处理。4.RapidXML专注于性能,解析速度极快,但不支持XPath查询。

C 通过第三方库(如TinyXML、Pugixml、Xerces-C )与XML交互。1)使用库解析XML文件,将其转换为C 可处理的数据结构。2)生成XML时,将C 数据结构转换为XML格式。3)在实际应用中,XML常用于配置文件和数据交换,提升开发效率。

C#和C 的主要区别在于语法、性能和应用场景。1)C#语法更简洁,支持垃圾回收,适用于.NET框架开发。2)C 性能更高,需手动管理内存,常用于系统编程和游戏开发。

C#和C 的历史与演变各有特色,未来前景也不同。1.C 由BjarneStroustrup在1983年发明,旨在将面向对象编程引入C语言,其演变历程包括多次标准化,如C 11引入auto关键字和lambda表达式,C 20引入概念和协程,未来将专注于性能和系统级编程。2.C#由微软在2000年发布,结合C 和Java的优点,其演变注重简洁性和生产力,如C#2.0引入泛型,C#5.0引入异步编程,未来将专注于开发者的生产力和云计算。

C#和C 的学习曲线和开发者体验有显着差异。 1)C#的学习曲线较平缓,适合快速开发和企业级应用。 2)C 的学习曲线较陡峭,适用于高性能和低级控制的场景。

C#和C 在面向对象编程(OOP)中的实现方式和特性上有显着差异。 1)C#的类定义和语法更为简洁,支持如LINQ等高级特性。 2)C 提供更细粒度的控制,适用于系统编程和高性能需求。两者各有优势,选择应基于具体应用场景。

从XML转换到C 并进行数据操作可以通过以下步骤实现:1)使用tinyxml2库解析XML文件,2)将数据映射到C 的数据结构中,3)使用C 标准库如std::vector进行数据操作。通过这些步骤,可以高效地处理和操作从XML转换过来的数据。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能