WHUP/ ˈdʌbljuː eɪtʃ ʌp /(WHUP: High-level Unified Programming)是一个以WHU(Wholesome High-level Utility)编程语言为核心的项目。本项目将实现两种编程语言:WHU和HUST(Highly Usable Symbolic Technology
),以及几个相应的软件:WHUPC,WHUPVM和WHUPRUN。
WHU是一种简洁的,拥有先编译后执行特性的强类型,静态类型高级编程语言。
HUST是一种可供WHUPVM虚拟机直接运行的低级语言。
WHUPC是能将高级语言WHU编译成低级语言HUST的编译器。
WHUPVM是一个模拟没有寄存器且堆可以直接通过变量名访问的计算机的虚拟机,可直接运行HUST。
WHUPRUN是WHUPC和WHUPVM的组合体,可直接运行WHU代码。
logo左边的图形是w和u的结合,右边的图形由左边的旋转180°而来,同时也是h和p的结合。向上的箭头指的是whup里的"up"。同时该logo的形状像两个回形针,暗示了whup的两种语言的语法都如同用回形针固定文件一样,模块化程度高,使其可拓展性强。
抽象语法树是whup程序的树形结构。它由节点组成,每个节点代表一个表达式,语句或声明。
对于一个节点,它应该有:
- 一个构造函数,能抛出异常,执行类型转换
- 一个生成TAC的方法
- 一个判断子节点类型,并创建相应子节点的方法
符号表是whup程序中标识符的集合。它存储标识符的名称,类型和值。
出于处理变量作用域的考虑,符号表应当是树状结构。每个作用域都是一个节点。
词法分析器将输入的字符串中的词素转化为词法单元。词素是单词,符号,数字等。
变量作用域在词法分析器中处理,具体方法是对不同作用域的变量名在词法分析中进行区分。
词法分析器输出结果应包含代码所在行,便于调试。
语法分析器通过递归下降算法将词法单元转化为抽象语法树并生成HUST。
在生成语法树时,应该为所有表达式的返回值创建一个临时变量,便于生成三字节码。
对于终结符,应该特殊考虑。如变量名,字符串,数字,布尔值等。
赋值号的左值应该是变量,而不是表达式。
符号表会在语法分析器中建立。
语义分析器负责检查各种错误,如变量未定义,类型不匹配等。
代码优化器负责对抽象语法树进行优化,如常量折叠,常量传播等。(可以先不实现)
HUST生成器负责将TAC转化为HUST。
HUST是一种类似于汇编的,供虚拟机运行的中间代码。
执行器负责执行HUST。
- 可以引入动态类型检查吗?如何抛出错误?
- 如何设计预处理器来链接各部分的源代码?
请参考grammar.md。
请参考examples。