参考:宫老师《极客时间-编译原理之美》教程:https://github.com/RichardGong/PlayWithCompiler
这一版用Python
实现PlayScript语言的解释器(具体实现方法完全参考上述课程的源码)
目录介绍:
playscript-py
目录:编译器源码(Python文件)test
目录:存放了一些测试用的play脚本PlayScript.g4
文件:PlayScript
的Antlr4
文法文件
其语言特性,简要说明如下:(覆盖课程的 06-13 小节)
- 支持
int、float、string、boolean
类型的变量的定义/赋值/运算 - 支持
while/for/break
流程控制 - 支持函数的定义和调用
- 支持函数一等公民,包括:可以声明一个函数类型的变量、可以对函数类型的变量进行赋值、函数类型的变量可以作为函数的形参和返回值
- 支持闭包
- 支持面向对象:支持类、对象,支持继承和多态
- 具体语言特性,可以参考
test
目录下的示例代码
playscript-py/main.py
-
功能1:打印
AST
(以DOT文本形式)(调试用)- 示例:
python playscript-py/main.py test/test-function-1.play -ast test/test-class-1.dot
- 通过
Graphviz
工具,可以直观展示该AST
- 示例:
-
功能2:打印
Annotated AST
(以DOT文本形式)(调试用)- 示例:
python playscript-py/main.py test/test-function-1.play -at test/test-class-1.dot
- 通过
Graphviz
工具,可以直观展示该 annotated AST(见test/test-function-1.png
图片) - 注意:这里只是在AST结点上附加了类型信息,其它语义信息,如作用域、引用关系,暂未画出
- 示例:
-
功能3:运行
play
脚本- 示例:
python playscript-py/main.py test/test-class-1.play
- 运行该命令后,观察控制台上的输出与预期是否一致
- 可以试试
test
目录下的其它play
脚本
- 示例: