在为编程语言构建 REPL 控制台应用程序时出现以下问题。从本质上讲,该语言依赖于您能够编写多行文本。但是,该ENTER
键也应该可用于评估表达式。
> 1 + 1<enter>
int int1 = 2
> <cursor>
为了允许多行输入,我使用了一种算法来计算括号、大括号、方括号和引号的数量,因此如果它们中的任何一个不平衡,它就会插入一个换行符:
> if (int1 < 3) {<enter>
| println "ok"<enter>
| }<enter>
ok
> <cursor>
这种方法的主要问题是,只要我在一行上按 enter,就不能再编辑该行了。反复按BACKSPACE
该}
符号将首先将其删除,然后保持在该位置而不删除换行符并允许我删除该println
行。这使得程序非常容易出错并且编辑非常乏味。
另一个问题是我什至不能在某些控制台(如 Mac 终端)中使用光标。控制台将在该事件中仅显示 ANSI 控制代码。
有没有办法解决这两个问题,也许是通过在我的 REPL 前端引入自定义光标处理?JVM 为我提供了多少访问封闭控制台的权限?我可以强制控制台将所有按键重定向到程序吗?而且,我是否必须对不同的 IDE 控制台/终端/操作系统使用不同的技术?