c# - 基于ANTLR4语法实现语言自动补全

标签 c# .net parsing antlr4

我想知道是否有用于命令行界面(控制台)的 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/

相关文章:

c# - XAML 是否有用于 Debug模式的条件编译器指令?

c# - asp.net 页面中的 Cursor.Position

.net - MSBuild 无法解析 COM 引用。为什么?

.net - 使用 WPF UI 线程应该始终确保 STA 公寓模式,对吗?

java - 以编程方式访问网页

c# - ldloc 还是 ldloca?

c# - 从类中调用 MVC Controller

.net - Visual Studio "Any CPU"目标是什么意思?

php - 从 PHP 解析 JSON

c# - 正则表达式匹配 C# 中的路径