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上运行增加项