怎样基于现有的编译器实现语言的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 的事情,他只做对代码进行求值。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
