30、深入探索 S3 编译器:功能扩展与实现细节

深入探索 S3 编译器:功能扩展与实现细节

1. 引言

在编译器的发展中,不断追求更强大的功能是永恒的目标。S3 编译器就是在这一追求下的产物,它基于之前的编译器进行了扩展,具备了更多强大的功能。如果你已经掌握了编译器构建的基本原理,那么实现 S3 编译器应该不会有太大困难。你可以选择使用 JavaCC 来生成 S3 编译器,若如此,为了与手写的 S3 编译器区分开来,可将其命名为 S3j。

S3 编译器支持级联赋值语句,即一条语句可以完成多个赋值操作。例如:

x = y = z = 7;

此语句会按顺序将 7 赋值给 z、y 和 x。该级联赋值语句所使用的语法并非 LL(1) 语法,因此 S3 解析器在处理级联赋值语句时,需要在令牌流中进行向前查看,以做出解析决策。解析器可以轻松地进行向前查看,而无需推进令牌流,只需调用解析器中的 getToken 方法,并指定所需令牌的索引即可。

需要注意的是,不要将解析器中的 getToken 方法与令牌管理器中的 getNextToken 方法混淆。前者允许向前查看,而后者返回下一个令牌。 getToken 方法无需你自行创建,它在之前的编译器实现中已经完整实现。

此外,S3 还支持 print println 语句中的字符串、一元加和减,以及 readint 语句。 r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值