怎样基于现有的编译器实现语言的repl

简单来说 除非你想像swift playground这么做(即每次重新全程序运行;这不是repl,swift本身自带另一个真的repl),或者能编译成一个解释型的语言(python/ruby/js),否则整个工作量还是非常大的,需要写编译器的代码,不能把它当黑盒“简单地利用”一下至于详细怎么做:要高亮的话应该知道语言是什么写一些正则就可以了,自己写并不困难(Lexical Analysis)要补全的话就看什么语言了...静态语言做一下Semantic analysis基本上就能用了,动态语言就不完全能这样,这也是为什么没有一个能完美使用的js补全环境。现代编译器基本上是前后端分离的,IR一般能包括足够的信息;所以要复用的话基本上能提供补全需要的信息;执行的话可以在编译结果上参考最后语句位置(这个信息编译器可以提供)插一些INT 3(如果你是C语言之类的)然后转出到输入环境,至于后面怎么接新的语句和保存状态就和编译器的写法非常相关了...不同的做法不一样,有些可以在寄存器/内存保存状态重新恢复变量引用,有些就需要保存变量重新赋值了…这样就有了一个类似于gdb的repl!还是老老实实写个解释器吧hhh
■网友
首先你要搞懂repl是啥repl是指read eval print loop读取 求值 打印 循环干高亮,补全有什么关系?
■网友
多行,自动补全,高亮都不是 REPL 的事情,他只做对代码进行求值。


    推荐阅读