#ebnf #parser #incremental

tree-sitter-ebnf

tree-sitter 解析库的 EBNF 语法

1 个不稳定版本

0.1.0 2022 年 10 月 21 日

#425文本编辑器

Download history 13/week @ 2024-03-11 10/week @ 2024-03-18 37/week @ 2024-04-01 61/week @ 2024-04-15 1/week @ 2024-04-22 3/week @ 2024-05-27 2/week @ 2024-06-03 67/week @ 2024-06-10 19/week @ 2024-06-24

88 每月下载量
用于 syntastica-parsers

MIT 许可证

33KB
957

tree-sitter-ebnf

tree-sitter 的 EBNF 语法

参考

此解析器实现了 ISO/IEC 14977:1996 标准(以下有两个显著差异)

  1. ISO 标准不允许在元标识符中使用下划线 _
  2. ISO 标准只允许来自 ISO/IEC 646:1991 字符集 的字符

在 Neovim 中的使用

解析器安装

nvim-treesitter 插件 目前不包括此解析器。要使用它,您必须手动将其添加到您的 tree-sitter 配置中,然后使用 :TSInstall ebnf 或将其添加到您的 ensure_installed 列表中安装它

require('nvim-treesitter.parsers').get_parser_configs().ebnf = {
    install_info = {
        url = 'https://github.com/RubixDev/ebnf.git',
        files = { 'src/parser.c' },
        location = 'crates/tree-sitter-ebnf',
        branch = 'main',
    },
}

文件类型检测

您可能还需要添加 ebnf 文件类型

vim.filetype.add { extension = { ebnf = 'ebnf' } }

高亮显示

如果您想使用此解析器进行高亮显示,您还必须将 queries/highlights.scm 的内容添加到 Neovim 运行时路径中名为 queries/ebnf/highlights.scm 的文件中(请参阅 :help rtp)。我还建议自定义这些高亮显示

  • @string.grammar:由 '" 包围的终止符号,回退到 @string
  • @string.special.grammar:由 ? 包围的特殊序列,回退到 @string.special
  • @variable.grammar:非终止符号,即标识符,回退到 @variable
    • @variable.grammar.pascal:以 PascalCase 形式的非终结符号
    • @variable.grammar.camel:以 camelCase 形式的非终结符号
    • @variable.grammar.upper:以 UPPERCASE 形式的非终结符号
    • @variable.grammar.lower:以 lowercase 形式的非终结符号

例如,以下是我的个人配置

vim.api.nvim_set_hl(0, '@string.special.grammar', { link = '@string.regex' })
vim.api.nvim_set_hl(0, '@variable.grammar.pascal', { link = '@type' })
vim.api.nvim_set_hl(0, '@variable.grammar.camel', { link = '@property' })
vim.api.nvim_set_hl(0, '@variable.grammar.upper', { link = '@constant' })
vim.api.nvim_set_hl(0, '@variable.grammar.lower', { link = '@parameter' })

依赖项

~2.8–4MB
~72K SLoC