同济大学编译原理课程设计类C编译器任务,实现了过程调用,生成mips汇编代码
初始化词法分析器对象,读取程序
LexicalAnalyser lexicalAnalyser(C_minus_program_name);
对程序进行词法分析
lexicalAnalyser.analyse();
得到词法分析结果
lexicalAnalyser.getResult()
将词法分析结果输出到标准输出
lexicalAnalyser.outputToScreen()
将词法分析结果输出到文件
lexicalAnalyser.outputToFile(fileName);
初始语法及语意分析器并构造DFA
ParserAndSemanticAnalyser parserAndSemanticAnalyser("productions.txt");
将构造的DFA输出到标准输出
ParserAndSemanticAnalyser parserAndSemanticAnalyser("productions.txt");
将构造的DFA输出到文件
ParserAndSemanticAnalyser parserAndSemanticAnalyser("productions.txt",output_file_name);
将中间代码输出到标准输出
parserAndSemanticAnalyser.outputIntermediateCode();
将中间代码输出到文件
parserAndSemanticAnalyser.outputIntermediateCode(output_file_name);
根据词法分析结果进行语法及语意分析,并将分析结果输出到标准输出
parserAndSemanticAnalyser.analyse(lexicalAnalyser.getResult());
根据词法分析结果进行语法及语意分析,并将分析结果输出到文件
parserAndSemanticAnalyser.analyse(lexicalAnalyser.getResult(), output_file_name);
得到生成的中间代码中各个函数入口地址
parserAndSemanticAnalyser.getFuncEnter;
得到语法及语意分析结果
parserAndSemanticAnalyser.getIntermediateCode();
将中间代码输出到屏幕
code.output();
将中间代码输出到文件
code.output(output_file_name);
划分基本块
code.divideBlocks(parserAndSemanticAnalyser.getFuncEnter());
将基本块输出到标准输出
code.outputBlocks();
将基本块输出到文件
code.outputBlocks(output_file_name);
返回基本块划分结果
code.getFuncBlock();
分析基本块的待用/活跃信息,确定出口活跃变量和入口活跃变量
objectCodeGenerator.analyseBlock(code->getFuncBlock());
输出基本块及待用/活跃信息到标准输出
objectCodeGenerator.outputIBlocks();
生成目标代码
objectCodeGenerator.generateCode();
输出目标代码到标准输出
objectCodeGenerator.outputObjectCode();
输出目标代码到文件
objectCodeGenerator.outputObjectCode(asm_name);