Skip to content

Latest commit

 

History

History

编译原理

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

编译原理

实验一 :词法语法分析器的设计与实现

FLEX BISON

  • 数据类型至少包括char类型、int类型和float类型,字符串作为可选项;

  • 基本运算至少包括算术运算、比较运算、自增自减运算和复合赋值运算;

  • 控制语句至少包括if语句、while语句和break、continue语句(不要求goto语句),另外for、switch语句作为可选项;

  • 多维数组。另外结构作为可选项;

  • 语言支持行注释与块注释,不要求支持编译预处理命令和多文件程序.

实验二 :符号表管理与语义检查

  • (1)使用未定义的变量;

  • (2)调用未定义或未声明的函数;

  • (3)在同一作用域,名称的重复定义(如变量名、函数名、结构类型名以及结构体成员名等)。为更清楚说明语义错误,这里也可以拆分成几种类型的错误,如变量重复定义、函数重复定义、结构体成员名重复等;

  • (4)对非函数名采用函数调用形式;

  • (5)对函数名采用非函数调用形式访问;

  • (6)函数调用时参数个数不匹配,如实参表达式个数太多、或实参表达式个数太少;

  • (7)函数调用时实参和形参类型不匹配;

  • (8)对非数组变量采用下标变量的形式访问;

  • (9)数组变量的下标不是整型表达式;

  • (10)对非结构变量采用成员选择运算符“.”;

  • (11)结构成员不存在;

  • (12)赋值号左边不是左值表达式;

  • (13)对非左值表达式进行自增、自减运算;

  • (14)对结构体变量进行自增、自减运算;

  • (15)类型不匹配。如数组名与结构变量名间的运算,需要指出类型不匹配错误;

有些需要根据定义的语言的语义自行进行界定,比如:32+'A',10*12.3, 如果使用强类型规则,则需要报错,如果按 C 语言的弱类型规则,则是允 许这类运算的,但需要在后续阶段需要进行类型转换,类型统一后再进行 对应运算;

  • (16)函数返回值类型与函数定义的返回值类型不匹配;

  • (17)函数没有返回语句(当函数返回值类型不是 void 时);

  • (18)break 语句不在循环语句或 switch 语句中;

  • (19)continue 语句不在循环语句中;

实验三 :中间代码生成与优化

  • (1)中间代码结构;
  • (2)基本快划分;
  • (3)DAG构造;
  • (4)代码优化算法;

实验四 :目标代码生成

  • (1)指令系统选择;
  • (2)寄存器分配算法;
  • (3) AR结构;
  • (4)目标代码生成;
  • (5)自己的CPU上运行增加项