清华附录:PL/0语言编译器的符号表管理

需积分: 9 5 下载量 29 浏览量 更新于2024-12-28 收藏 1KB TXT 举报
"该资源是关于PL/0语言编译器的一个实现,主要涉及词法分析器的部分。在PL/0编译器中,词法分析器是将源代码中的字符序列转换为语言符号的过程。这里提到的下级函数参数传递机制是值参,但通过指针方式实现实质上是传址,为了保持数据完整性,需要复制一份新的数据传递给下级函数。同时,文件还展示了PL/0语言的一些关键字定义和操作符的符号表设置,以及可能的指令 mnemonic 的初始化。" 在PL/0语言编译器中,词法分析是编译过程的第一步,它负责识别源程序中的标识符、关键字、运算符、分隔符等基本语言元素,并将它们转化为称为“标记”(token)的抽象语法结构。在这个例子中,`ssym` 变量数组用于存储各种字符的符号,例如 `'/'` 对应 `slash`,`'('` 对应 `lparen`,以此类推。这些符号定义了PL/0语言的基本语法元素。 同时,文件还定义了一个关键词数组 `wsym`,包含了PL/0语言的关键字如 "begin"、"call"、"const" 等,它们在编译过程中有着特殊的语义。每个关键字都与一个特定的符号标识符关联,例如 "begin" 对应 `beginsym`,这样在词法分析阶段,编译器可以识别出这些关键字并处理它们。 此外,文件中还提到了一个叫做 `mnemonic` 的数组,它用于存储汇编指令的名称,如 "lit" 代表常数,"opr" 代表运算,"lod" 代表加载,"sto" 代表存储,"cal" 代表调用,"inte" 代表整数中断,"cal" 之后的部分可能是遗漏或截断了。这些汇编指令名称对应的是编译器生成的目标代码的一部分,它们在词法分析和语法分析之后被用来构建中间代码或直接生成机器码。 在描述的上下文中,当函数传递符号集合时,为了避免下级函数改变上级函数的数据,采取了一种复制策略。即在调用下级函数前,会为集合数据开辟新的内存空间,并将原始数据的副本传递下去。这样做的目的是确保下级函数无法直接影响到上级函数的原始数据,保证了数据的封装性和安全性。 在实际编程中,这样的做法常见于需要保护数据完整性的场景,特别是在多线程或多进程环境中,或者在需要确保函数之间调用不产生副作用的情况下。这种传值调用方式虽然可能会增加一些内存开销,但它有效地防止了意外的数据修改,有利于程序的调试和维护。