SwJay / SimpleCompiler

simple c compiler

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Note

已实现功能

保留关键字: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.函数没有声明或者没有定义

Log

5.29:

1.变量重定义检查;函数重定义检查;变量函数使用时是否定义检查;

2.赋值语句两边类型是否相同检查

3.非数组类型使用索引报错

4.关系运算符,加减,乘除左右不同类型报错

5.函数声明中参数名在定义域里面可以引用了,重复定义会报错

6.检查返回值类型, if while 的bool/int类型检查

5.30:

语法增加:变量初始化;函数声明;增加类型double、bool;

语义:

1.变量声明初始化类型检查;

2.函数声明与定义,不可重复声明重复定义,仅能先声明后定义或者只定义;

3.数组索引使用需为int数值;

4.a=array[i]可以正确报错了(左右类型检查)

5.树节点增加变量type

6.加入可视化树部分

7.非函数名调用报错

8.改了错误单词拼写

5.30

1.生成树代码bug,儿子节点赋值错误

6.4

1.增加 CHAR

2.为ID treeNode增加变量varType供生成代码使用

3.修复bug 函数参数加入到了错符号表中

4.修复 函数参数数组类型变量多加 * 记号

6.5

1.修复 array在调用时ARRAY只有一个节点的错误,改为两个节点ID+EXPRESSION

6.10

1.增加纯常数表达式提前计算

2.增加if、if else语句在条件是可以判定为true/false时 代码简化,去除deadCode

3.修改函数缺失返回语句的报错:改成 “a return statement is expected.” (以前版本会认为返回值错误)

6.15

1.增加“||”, “&&”

2.修复函数不能自身递归调用的bug

3.增加demoCode在exampleCode.txt中

About

simple c compiler


Languages

Language:C 70.4%Language:C++ 15.7%Language:Yacc 11.8%Language:Lex 2.0%Language:Batchfile 0.1%