Java版Monkey解释器,实现了书中前4章的内容,第5章宏的部分由于改写Go源码时结点定义全部使用的record,导致无法替换AST中的结点,故放弃实现。
写这个项目基本属于搬砖,核心代码最多几百行,其他的全在堆砌token -> lexer -> paser -> eval
的逻辑,毫无难度可言。
__,__
.--. .-" "-. .--.
/ .. \/ .-. .-. \/ .. \
| | '| / Y \ |' | |
| \ \ \ 0 | 0 / / / |
\ '- ,\.-"`` ``"-./, -' /
`'-' /_ ^ ^ _\ '-'`
.--'| \._ _ _./ |'--.
/` \ \.-. / / `\
/ '._/ |-' _.' \
/ ; /--~' | \
/ .'\|.-\--. \ \
/ .'-. /.-.;\ |\|'~'-.|\ \
\ `-./`|_\_/ ` `\'. \
'. ; ___) '.`; /
'-.,_ ; ___) \/ /
\ ``'------'\ \ ` /
'. \ '. | ;/_
jgs ___> '. \_ _ _/ , '--.
.' '. .-~~~~~-. / |--'`~~-. \
// / .---'/ .-~~-._/ / / /---..__.' / 搬砖好累=-=
((_(_/ / / (_(_(_(---.__ .'
| | _ `~~`
| | \'.
\ '....' |
'.,___.'
Windows10、IntelliJ IDEA、Git
OpenJDK-17 Preview、JUnit5.9.0、Maven5.8.1
$~ git clone https://github.com/Ai-Kotoba/JMonkey-Interpreter.git
$~ cd JMonkey-Interpreter
$~ mvn compile assembly:single
$~ java -jar --enable-preview target/JMonkey-Interpreter-jar-with-dependencies.jar
克隆项目后,用IDEA直接打开项目即可运行。
- Maven用的POM.xml编写实在太麻烦了,而且是初次使用Maven,命令和XML的使用都很不熟练,也很难定位依赖错误原因,造成了很大困扰。
- 然后是项目使用了JDK17 Preview
Feature中的switch模式匹配语法糖,这是Go很早就支持的特性,其实用反射加上普通的switch就可以实现,只是过于丑陋,所以通过
--enable-preview
启用了该特性,就是这一点在Maven中造成了大量的依赖问题,最后还是查阅资料勉强将项目打包成了可执行的JAR文件。 - 使用record也许不适合实现宏,但是如果不实现宏,record在这个项目就是最合适的,也非常优雅,想实现宏需要将ast包的record改为普通class,意义不大。
- Java21LTS发布时会将JMonkey的JDK版本升级到JDK21,用来移除项目中的Java17 Preview Feature相关的XML配置和命令。