保留关键字:void if else while return true false
支持类型:int bool double char
支持运算符:|| && + - * / > < >= <= != ==
支持变量初始化,支持一维数组(不可初始化)
支持函数的声明和定义,支持互相递归调用和自身递归调用
内置函数read和print
支持常数表达式折叠,if 的死码消除
生成可视化语法树
采用栈式的符号表
可检测的错误:
1.变量没有定义
2.变量用其他类型值初始化
3.变量的重复定义
4.函数的重复定义
5.丢失return语句
6.return类型错误
7.函数参数重名
8.多return语句返回值类型不同
9.条件语句条件表达式估值不是bool
10.赋值类型错误
11.非数组变量索引
12.索引值不是int
13.|| && 操作数不是bool类型
14.运算符两个运算数类型不同
15.函数调用时参数或类型不匹配
16.函数没有声明或者没有定义
1.变量重定义检查;函数重定义检查;变量函数使用时是否定义检查;
2.赋值语句两边类型是否相同检查
3.非数组类型使用索引报错
4.关系运算符,加减,乘除左右不同类型报错
5.函数声明中参数名在定义域里面可以引用了,重复定义会报错
6.检查返回值类型, if while 的bool/int类型检查
语法增加:变量初始化;函数声明;增加类型double、bool;
语义:
1.变量声明初始化类型检查;
2.函数声明与定义,不可重复声明重复定义,仅能先声明后定义或者只定义;
3.数组索引使用需为int数值;
4.a=array[i]可以正确报错了(左右类型检查)
5.树节点增加变量type
6.加入可视化树部分
7.非函数名调用报错
8.改了错误单词拼写
1.生成树代码bug,儿子节点赋值错误
1.增加 CHAR
2.为ID treeNode增加变量varType供生成代码使用
3.修复bug 函数参数加入到了错符号表中
4.修复 函数参数数组类型变量多加 * 记号
1.修复 array在调用时ARRAY只有一个节点的错误,改为两个节点ID+EXPRESSION
1.增加纯常数表达式提前计算
2.增加if、if else语句在条件是可以判定为true/false时 代码简化,去除deadCode
3.修改函数缺失返回语句的报错:改成 “a return statement is expected.” (以前版本会认为返回值错误)
1.增加“||”, “&&”
2.修复函数不能自身递归调用的bug
3.增加demoCode在exampleCode.txt中