b编译语言
❶ 编译器一般由哪种语言开发
其实我在想为什么汇编语言生成一个简单的编译器后,可以用新生成的编译器再次生成编译器,例如,C语言开发C的编译器呢?
这是一个递归的思想,举个例子一看就明白了
用一个大的模具可以生成一个A模具,A模具可以做出来B模具,依次往下推,最终这个小模具可以做出来小盒子用来装东西。
第一个大模具肯定是手工做出来的第一个模具,但是有了这个大模具后,后面就可以用他自动的生成更多的模具,后面的各种模具加起来又可以造出来更精致的模具,
所以,自动第一个大模具造出来模具的时候,大模具就可以被抛弃了。
我们都知道编译程序通常分为下面五个阶段:
1)词法分析
2)语法分析
3)语义分析与中间代码产生
4)优化
5)目标代码生成
当然最难的一点就是目标代码的生成,这一阶段实现了最终的翻译,就是真正把原码翻译成可以被CPU直接计算的机器码(NativeCode)。
❷ B语言和C语言 有什么区别(越详细越好)
不知道或者没听说过B语言的请不要凭着自己的感觉胡乱回答,误人子弟。
B语言是贝尔实验室开发的一种通用的程序设计语言,它是于1969年前后由美国贝尔实验室的电脑科学家肯·汤普森(Ken
Thompson)在丹尼斯·利奇(Dennis
Ritchie)的支持下设计出来。后来,丹尼斯·利奇以B语言为基础开发出C语言——目前世界上最常用的程序语言之一。自从被C语言取代之后,B语言几乎已遭弃置。
B语言是从BCPL系统中删减了汤姆森认为非必备的组件以便能运行在当时的小型计算机上而产生的。B语言还包括了汤姆森的一些个人偏好(主要在一些特定的程序中减少非空格字符的数量)。
和BCPL以及FORTH类似,B语言只有一种数据类型,计算机字。大部分操作将其作为整数对待(例如进行+、-、*、/操作),但其余操作将其作为一个复引用的内存地址。在许多方面B语言更像是一个早期版本的C语言,它还包括了一些库函数,其作用类似于C语言中的标准输入/输出函数库。
下面是来自Ken
Thompson的B语言用户手册的例子:
/*
The
following
function
will
print
a
non-negative
number,
n,
to
the
base
b,
where
2<=b<=10,
This
routine
uses
the
fact
that
in
the
ANSCII
character
set,
the
digits
0
to
9
have
sequential
code
values.
*/
printn(n,b)
{
extrn
putchar;
auto
a;
if(a=n/b)
/*
assignment,
not
test
for
equality
*/
printn(a,
b);
/*
recursive
*/
putchar(n%b
+
'0');
}