ICD-temp-作业3: C语言抽象语法树与符号表构建

需积分: 9 1 下载量 18 浏览量 更新于2024-12-29 收藏 207KB ZIP 举报
资源摘要信息: "ICD-temp"是关于C语言编程作业指导的文档,其中涉及将一个旧作业(作业2)的内容移植到新作业(作业3)的详细步骤。文档提供了作业3的核心要求,包括使用相似的扫描器和解析器,通过修改代码以适应新的需求,定义节点以构建抽象语法树(AST),创建符号表,执行语义分析,进行类型检查,以及按照特定格式打印消息。还包含了一些辅助工具和脚本的使用说明,如compare.sh脚本用于输出比较和vimdiff窗口操作。 知识点: 1. C语言编程基础 - 描述了作业3是关于C语言的编程实践,要求学生具备C语言编程的基础知识。 2. 抽象语法树(AST)的概念和构建 - 文档强调需要构建一个抽象语法树,这是一个用来表示源代码语法结构的树形图。对于编译器来说,AST是编译过程中的一个关键结构,它能够表示程序的语法和语义信息。 3. 扫描器(Scanner)和解析器(Parser)的作用 - 扫描器负责将源代码文本分解成一系列的记号(token),而解析器则根据这些记号构建出AST。文档中提到这两个组件在作业3中几乎与作业2相同,暗示了它们的具体实现可能需要参考作业2的模板。 4. 符号表的创建和使用 - 符号表是编译器中用来存储程序中定义的变量、函数等符号信息的表结构。在构建AST的过程中需要同时创建符号表,该表随后用于语义分析。 5. 语义分析 - 在AST构建完毕后,需要通过遍历AST来执行语义分析,这一步骤主要是检查程序的语义是否正确,例如变量是否已经声明,类型是否匹配等。 6. 类型检查 - 类型检查是语义分析的一部分,确保程序中的每个运算和操作都符合相关的类型要求,例如确保加法操作的两个操作数类型相容。 7. 标准输出与错误输出的管理 - 文档指出需要将特定的消息格式化到stdout(标准输出),并且对于语义错误相关的警告应该输出到stderr(标准错误输出)。这一要求强调了输出管理在编程实践中的重要性。 8. Bash脚本和vimdiff的使用 - 提供了一个名为compare.sh的Bash脚本,用于比较输出结果,并且详细说明了如何使用该脚本以及vimdiff窗口。这是编程实践中常用的一个命令行工具使用技巧,可以方便地进行代码差异比较。 9. 使用ESC键和命令模式退出vimdiff - 文档中说明了在vimdiff中如果想要退出比较,可以按下ESC键,并输入命令模式下的`:qa!`来安全地退出所有比较窗口。 10. 终止进程的操作 - 如果在比较过程中需要停止比较,文档提供了具体的按键组合`ctrl + z`,以及如何使用`kill %1`命令来终止相应的进程。 通过以上知识点,可以看出文档不仅涉及了C语言编程的基本概念,还涵盖了编译原理中的关键概念和实用技能,如AST构建、符号表管理、语义分析等,并且提供了一些实际操作脚本的使用说明,这些都是C语言编程与编译技术中非常重要的组成部分。