12、ALGOL 60在Electrologica X8上的实现:历程与技术洞察

ALGOL 60在Electrologica X8上的实现:历程与技术洞察

1. 编译器构建的开端与挑战

在完成从源文本到目标文本的映射设计之前,就开始思考编译器的实现。当时Dijkstra和Zonneveld采用的方法较为复杂,该方法会反复读取程序的一小部分,直至遇到下一个分隔符,然后根据该分隔符和六个变量来解释这部分文本,这些变量记录了文本所处的语言结构,即所谓的上下文。当上下文发生变化时,会临时将部分上下文变量保存到编译器栈中。

尽管这种方法很复杂,但他们却成为世界上首个成功构建出可用编译器的人,这十分了不起。不过,这个编译器几乎不检查ALGOL 60程序是否满足所有语法规则,他们认为用ALGOL 60编程比用机器代码编程容易得多,可能不会出错,但实际情况并非如此。而且,要在他们的编译器方法中加入合适的错误检查并不容易,毕竟能在4096字存储容量的计算机上实现ALGOL 60编译器已经是个奇迹,添加错误检查代码几乎是不可能的。

2. 递归下降分析技术的诞生

ALGOL 60的上下文无关语法是通过Backus - Naur形式严格正式定义的,允许进行极端的递归定义。例如,因子的语法规则为:

⟨factor⟩::= ⟨primary⟩| ⟨factor⟩↑⟨primary⟩

同时,ALGOL 60作为一种编程语言也支持递归,像在数值数学讲座以及数学中心的工作中,能看到很多递归的精彩示例,如汉诺塔问题、Hoare的快速排序、数值积分程序等。基于对递归的熟悉,很自然地想到用递归编程技术来分析用递归定义的语法。对于上述因子的语法规则,代码实现如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值