我想知道是否有用于命令行界面(控制台)的 TAB 自动完成解决方案的示例(谷歌搜索我还没有找到任何示例),它们使用 ANTLR4 语法来预测下一个术语(就像在 REPL 模型中一样) .
我已经为一个开源数据库编写了一个PL/SQL语法,现在我想实现一个数据库的命令行界面,为用户提供根据语法完成语句的功能,或者最终发现要使用的正确数据库对象名称(例如,表名称、触发器名称、列名称等)。
感谢您为我指明了正确的方向。
最佳答案
其实是可以的! (当然,基于你的语法的复杂性。)自动完成和 ANTLR 的问题是你没有完整的表达式并且你想要解析它。如果你有完整的表达,知道什么地方有什么样的元素,知道在那个地方可以用什么,这不是什么大问题。但是你没有完整的表达,你无法解析不完整的表达。所以你需要做的是将输入包装到一些包装器/帮助器中,它将完成表达式以创建一个可解析的。请注意,为完成表达式而添加的任何内容对您来说都不重要 - 您只会要求成员直到最后一个真正写入的字符。
所以:
A) 创建包装器,将此(excel 公式)“=If(”更改为“=If()”
B) 解析包装的输入
C) 意识到你在第一个参数处的 IF 函数中
D) 返回所有可以进入那个地方的东西。
它确实有效,我已经完成了几种简单语言的智能感知编辑器。有比这更多的基础设施,但基本思想是我写的。只是要小心,如果语法真的很复杂,编写包装器即使不是不可能,也并不容易。在这种情况下,请查看 Papa Carlo 项目。 http://lakhin.com/projects/papa-carlo/
关于c# - 基于ANTLR4语法实现语言自动补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37068536/