参照《Writing An Interpreter/Compiler In Go》,改用C++实现。
项目源码: https://github.com/LeslieZhu/monkey-cpp
本篇对应的源码位于目录: src/05/
src
|05
| |token
| | |token.hpp
| |evaluator
| | |evaluator.hpp
| | |builtins.hpp
| |CMakeLists.txt
| |test
| | |lexer_test.hpp
| | |parser_test.hpp
| | |evaluator_test.hpp
| | |vm_test.hpp
| | |objects_test.hpp
| | |ast_test.hpp
| | |code_test.hpp
| | |compiler_test.hpp
| | |main.cpp
| |lexer
| | |lexer.hpp
| |repl
| | |repl.hpp
| |code
| | |code.hpp
| |objects
| | |objects.hpp
| | |environment.hpp
| |parser
| | |parser.hpp
| | |parser_tracing.hpp
| |vm
| | |vm.hpp
| |ast
| | |ast.hpp
| |main
| | |monkey.cpp
| |compiler
| | |compiler.hpp
为了提高性能和移植性,在前面树遍历解释器基础上,引入虚拟机和字节码。
为了在代码结构和接口形式上都尽量保持和原有Go语言代码相近,多花了一些时间,因为Go原生带有切片、字节序大小端读写等封装好的功能,而在C++就需要自己去组装这些工具。
目前进度为止,虚拟机只支持通过字节码进行整数的加法操作。