编译器 I:语法分析
在编程领域,编译器扮演着将源语言程序转换为目标语言程序的关键角色。本文聚焦于为 Jack 语言构建编译器的语法分析阶段,深入探讨其中的核心概念、实现方法以及项目实践。
1. 编译概述
编译过程主要分为两个阶段:语法分析和代码生成。语法分析又可细分为分词(tokenizing)和解析(parsing)两个子阶段。分词是将输入的字符流分组为语言原子,即令牌(tokens);解析则是将令牌组合成有意义的结构化语句。
在本文中,由于暂不涉及代码生成,我们选择让语法分析器将输入程序的解析结构输出为 XML 文件。这样做有两个好处:一是可以方便地检查输出文件,验证语法分析器是否正确解析源程序;二是明确输出该文件的要求,促使我们设计出一种易于扩展为完整编译器的架构。
2. 背景知识
2.1 词法分析
每个编程语言规范都定义了该语言所识别的令牌类型。在 Jack 语言中,令牌分为五类:关键字(如 class 和 while )、符号、整数常量(如 17 和 314 )、字符串常量(如 "FAQ" 和 "Frequently Asked Questions" )以及标识符(用于命名变量、类和子程序)。这些令牌共同构成了语言的词汇表。
计算机程序最原始的形式是存储在文本文件中的字符流。语法分析的第一步是将这些字符按照语言词汇表分组为令牌,同时忽略空白和注释。这个过程称为词法分析、扫描或分词,它们的含义是相同的。 <
超级会员免费看
订阅专栏 解锁全文
2255

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



