知识卡片
翻译过程的三个阶段:词法分析、语法分析、代码生成
内容
把源程序翻译成机器语言要经过三个协作阶段:词法分析器逐个符号扫描源代码,把连续的符号识别、归类成有意义的最小单元(标记),比如把 153 识别成一个数值而不是三个独立字符,这个过程人类在阅读时是下意识完成的(读词而不是读字母);语法分析器把这些标记按语言的文法规则组织成语句结构,判断哪部分是条件、哪部分是循环体,同时把声明语句里的变量名和类型记录进符号表;代码生成器依据语法分析的结果和符号表里的类型信息,生成对应的机器指令,并顺便做一些效率优化(比如相邻语句共用已经在寄存器里的值,省去重复读取内存)。发散:这三个阶段并非严格先后执行、而是交织进行——语法分析器边分析边向词法分析器要下一个标记、边向代码生成器发出生成指令的请求,这种”多个专职角色互相发消息协作完成一件事”的结构,恰好是面向对象范型的一个天然应用场景,编译器本身常被当作面向对象设计的经典范例来讲授。
参考来源
《计算机科学概论》第6章《程序设计语言》