练习题 -- 程序语言基础 >> 编译过程
共 8 题
第 1/8 题
★★
以下程序段中,若采用传值调用,f(x)执行后x的值为:int x=5; void f(int a){a=10;} f(x);
正确答案: A
传值调用(Call by Value):形参a获得实参x的值副本(5),函数内a被赋值为10仅改变a自己的存储空间,不影响实参x。因此f(x)执行后x仍为5。若是传引用调用,x才会变成10。
第 2/8 题
★★
以下哪个错误是在语义分析阶段发现的?
正确答案: C
语义分析阶段对语法树进行上下文相关检查,包括:变量是否已声明、类型是否兼容、函数调用参数是否匹配、表达式中操作数类型是否正确等。语法错误由语法分析发现,词法错误由词法分析发现。
第 3/8 题
★
编译过程中,构建语法树的阶段是:
正确答案: B
语法分析(Parser)接收词法分析产生的Token序列,依据语言的文法规则(通常用BNF描述),将其组织成层次化的语法树(Parse Tree / Syntax Tree),同时检查程序是否存在语法错误。
第 4/8 题
★
编译原理中,源代码中的关键字if被词法分析器识别为:
正确答案: B
词法分析器(Lexer)读取源代码字符流,按照词法规则将其切分成一系列Token。关键字(if、else、while等)由词法规则直接匹配为对应类型的Token,与标识符区分开来。
第 5/8 题
★★
在传值调用(Call by Value)中:
正确答案: B
传值调用(Call by Value)将实参的值复制给形参,形参在函数内部拥有自己的存储空间,对形参的任何修改都不会影响实参。传引用调用(Call by Reference)中形参是实参的别名,修改形参会改变实参。
第 6/8 题
★
编译过程中,生成与机器无关的中间代码的阶段是:
正确答案: D
编译器前端各阶段:词法分析(Token化)→ 语法分析(构建语法树)→ 语义分析(类型检查等)→ 中间代码生成(产生机器无关的中间表示)。中间代码的优点是便于编译器优化和目标代码生成,且有利于实现跨平台编译。
第 7/8 题
★★
编译器中,代码优化可以发生在:
正确答案: C
编译器中的代码优化分为两个层次:中间代码优化(机器无关优化,如常量折叠、公共子表达式消除、循环优化等)和目标代码优化(机器相关优化,如寄存器分配、指令选择、流水线调度等)。
第 8/8 题
★
中间代码的常见形式不包括:
正确答案: D
中间代码(Intermediate Code)是介于高级语言和机器语言之间的机器无关表示,常见形式包括:三地址码、四元式、三元式、逆波兰式等。机器指令是后端目标代码生成的最终产物。