问题描述
我想使用 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 (将#修改为@)