如何在flex/bison中编写复杂的语法分析器并将其作为vim插件连接?

如何在flex/bison中编写复杂的语法分析器并将其作为vim插件连接?,vim,bison,flex-lexer,vim-plugin,Vim,Bison,Flex Lexer,Vim Plugin,如何在flex/bison中编写复杂的语法分析器并将其作为vim插件连接 需要一些通用的方法来使用flex/bison制作vim colorer插件(在理想情况下完成),特别是对于一些复杂的语言,dumb vim regexps无法涵盖 对于类似Eclipse的“大纲”选项卡,也应该使用相同的方法——解析源代码并使其成为可点击的侧面板,以实现快速的源代码导航 PS:win32(mingw).dll更适合于此构建:因此,您希望通过基于flex/bison的解析器在Vim之外对Vim缓冲区进行实际解

如何在flex/bison中编写复杂的语法分析器并将其作为vim插件连接

需要一些通用的方法来使用flex/bison制作vim colorer插件(在理想情况下完成),特别是对于一些复杂的语言,dumb vim regexps无法涵盖

对于类似Eclipse的“大纲”选项卡,也应该使用相同的方法——解析源代码并使其成为可点击的侧面板,以实现快速的源代码导航


PS:win32(mingw).dll更适合于此构建:

因此,您希望通过基于flex/bison的解析器在Vim之外对Vim缓冲区进行实际解析,然后根据该解析在Vim内执行高亮显示,对吗

在Vim内部,高亮显示基于正则表达式(给定给
:syntax match
:syntax region
命令)。这是没有办法的(除了扩展Vim本身)

我看到的唯一方法是对已解析的元素使用行/列寻址。Vim正则表达式具有只在特定位置匹配的特殊原子(
:help/\%l
:help/\%v

在Vim 8中,您可以通过新的
:help channel
特性触发解析器(在后台异步)

例子 您的解析器在第3行屏幕第14-16列中识别了一个标识符。您将合成以下Vim命令:

:syntax match Identifier "\%3l\%>13v\%<17v."

:语法匹配标识符“\%3l\%>13v\%启动您的项目,并在您有实际的编程相关问题时返回,这些问题实际上可以得到回答。问题实际上已经得到了回答