/C-minus-compiler

同济大学编译原理课程设计类C编译器任务

Primary LanguageC++Apache License 2.0Apache-2.0

C-minus-compiler

同济大学编译原理课程设计类C编译器任务,实现了过程调用,生成mips汇编代码

词法分析器接口说明

初始化词法分析器对象,读取程序

LexicalAnalyser lexicalAnalyser(C_minus_program_name);

对程序进行词法分析

lexicalAnalyser.analyse();

得到词法分析结果

lexicalAnalyser.getResult()

将词法分析结果输出到标准输出

lexicalAnalyser.outputToScreen()

将词法分析结果输出到文件

lexicalAnalyser.outputToFile(fileName);

语法及语意分析器接口说明

初始语法及语意分析器并构造DFA

ParserAndSemanticAnalyser parserAndSemanticAnalyser("productions.txt");

将构造的DFA输出到标准输出

parserAndSemanticAnalyser.outputDFA();

将构造的DFA输出到文件

parserAndSemanticAnalyser.outputDFA(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);