如何解决在 CodeMirror 中使用 Lezer 从语法中自动补全
我想使用 Lezer 在 CodeMirror 中实现自动完成,其中自动完成是根据我的语言语法生成的。是否有任何示例实现,或者您可以指出 Lezer API 的特定部分作为实现此的起点?
到目前为止,我的简单示例语法大致如下(这是 Python Lark EBNF 格式。这是不完整的;这只是一个示例)--
?start: function_call_retval_number
| function_call_retval_string
number_arg: function_call_retval_number
| NUMBER
number_args: number_arg ("," number_arg)+
two_number_args: number_arg "," number_arg
?function_call_retval_number: ADD number_args ")"
| ADD2 two_number_args ")"
| MULTIPLY number_args ")"
ADD: /add(\s)*\(/
ADD2: /add2(\s)*\(/
MULTIPLY: /multiply(\s)*\(/
我复习了[示例:编写语言包][https://codemirror.net/6/examples/lang-package/]和[编写语法][https://lezer.codemirror.net/docs/指南/#writing-a-grammar];看来我可以很容易地将上面的转换为 Lezer 的语法格式。
看来我可能想朝这个方向走--
-
使用 lezer-generator 从我的语法中生成解析器
-
实现一个 [CompletionSource][https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource] 调用 [Parser.parse()][https://lezer.codemirror.net /docs/ref/#lezer.Parser] 与输入文本。
-
??例如,如果输入文本是“add(1,add(”,我看不到 API 方法或异常,我可以用来推断此时有效的是“NUMBER”、“add”、“add2”,或“乘”,以便 CompletionSource 可以构建适当的返回值。
任何反馈、建议和/或示例?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。