文号
t58410
阅读
6996
回复
12
收藏
8
自己写的一个小小编译器,解析器(BrainFuck) C#制作
2013/07/09
IP:云南

attachment icon BrainFuck.rar 43.06KB RAR 75次下载
attachment icon BrainFuck.rar 43.06KB RAR 75次下载
attachment icon BrainFuck.rar 43.06KB RAR 75次下载
attachment icon BrainFuck.rar 43.06KB RAR 75次下载   
Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF。
Müller的目标是创建一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。这种语言由八种运算符构成,为Amiga机器编写的编译器(第二版)只有240个字节大小。
就象它的名字所暗示的,brainfuck程序很难读懂。尽管如此,brainfuck图灵机一样可以完成任何计算任务。虽然brainfuck的计算方式如此与众不同,但它确实能够正确运行。
这种语言基于一个简单的机器模型,除了指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。
下面是这八种状态的描述,其中每个状态由一个字符标识:
字符    含义
>    指针加一
<    指针减一
+    指针指向的字节的值加一
-    指针指向的字节的值减一
.    输出指针指向的单元内容(ASCII码)
,    输入内容到指针指向的单元(ASCII码)
[    如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
]    如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
(按照更节省时间的简单说法,]也可以说成“向前跳转到对应的[状态”。这两解释是一样的。)
(第三种同价的说法,[意思是"向后跳转到对应的]",]意思是"向前跳转到对应的[指令的次一指令处,如果指针指向的字节非零。")
Brainfuck程序可以用下面的替换方法翻译成C语言(假设ptr是char*类型):
Brainfuck    C
>    ++ptr;
<    --ptr;
+    ++*ptr;
-    --*ptr;
.    putchar(*ptr);
,    *ptr =getchar();
[    while (*ptr) {
]    }
]以上是维基百科中copy的,仅为了说明该语言,以及设计。 附件中加入了一个WinForm的测试程序,这里要注意的是编译是从A翻译的B由B编译成目标代码执行的。  
+100
科创币
phpskycn
2013/07/09
值得赞扬
+15
科创币
【四方】
2013/07/09
高质量发帖
来自:
软件综合
12
13年6个月前IP:未同步
545629
1楼
居然还有这种语言…谁来检验一下那个普适图灵机?
引用
评论
cs_net作者
13年6个月前IP:未同步
545672
2楼
现在所有的计算机都是基于图灵原理制作的。 当然,那是理想状态。
引用
评论
13年6个月前IP:未同步
545680
3楼
@ clyce
字数补丁
引用
评论
13年6个月前IP:未同步
545708
4楼
有天看到了一个编译器叫做LLVM,LZ可以考虑在那个基础上搞搞
引用
评论
cs_net作者
13年6个月前IP:未同步
545709
5楼
回 4楼(.........) 的帖子
这是N多年写的,最近开写VB的编译器
引用
评论
1
13年6个月前IP:未同步
545727
6楼
引用
评论
13年6个月前IP:未同步
545731
7楼
回 6楼(能材爱好者) 的帖子
@epi.clyce

求教如何@
+1
科创币
delete
2013/07/09
插入链接,链接说明就输入@****就行了
引用
评论
13年6个月前IP:未同步
545754
8楼
引用
评论
13年6个月前IP:未同步
545757
9楼
没想到学到了艾特的方法…话说管用吗?
引用
评论
13年6个月前IP:未同步
545802
10楼
突然发现@功能可以用了,试试
@虎哥
引用
评论
13年6个月前IP:未同步
545807
11楼
额,不灌水了
话说楼主为何不写一个自己的编程语言
就叫kc语言好了。。。
看了别人开发自己的语言,似乎不是太难
有兴趣的可以看看编译原理
引用
评论
13年6个月前IP:未同步
546010
12楼
[s:274]
[s:274]
[s:274]
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的