深入探索 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
超级会员免费看
订阅专栏 解锁全文

5515

被折叠的 条评论
为什么被折叠?



