Sta*_*tan 6 ctags exuberant-ctags
我正在为自定义语言编写.ctags文件...与大多数语言一样,它允许在一行中进行多个变量声明..即:
int a, b, c;
Run Code Online (Sandbox Code Playgroud)
我有一个基本的正则表达式,它识别'a':
--regex-mylang=/^[ \t]*int[ \t]*([a-zA-Z_0-9]+)/\1/v,variable/
Run Code Online (Sandbox Code Playgroud)
如何修改它以使其与'b'和'c'匹配?我在ctags文档中找不到任何可以在一行中处理多个匹配的内容.
在最新的通用,CTAGS可以捕捉它们。
[jet@localhost]/tmp% cat input.x
int a, b, c;
[jet@localhost]/tmp% cat x.ctags
--langdef=X
--map-X=.x
--kinddef-X=v,var,variables
--_tabledef-X=main
--_tabledef-X=vardef
--_mtable-regex-X=main/int[ \t]+//{tenter=vardef}
--_mtable-regex-X=main/.//
--_mtable-regex-X=vardef/([a-zA-Z0-9]+)/\1/v/
--_mtable-regex-X=vardef/;//{tleave}
--_mtable-regex-X=vardef/.//
[jet@localhost]/tmp% u-ctags --options=x.ctags -o - ./input.x
a ./input.x /^int a, b, c;$/;" v
b ./input.x /^int a, b, c;$/;" v
c ./input.x /^int a, b, c;$/;" v
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅http://docs.ctags.io/en/latest/optlib.html#byte-orientation-pattern-matching-with-multiple-regex-tables。
经过几个小时的研究后,我确信这是不可能的。无论如何,正则表达式只会扩展到每行一个标记。即使您将 \1 \2 \3 ... 作为扩展,也只会导致一个由多个匹配项组成的标记,而不是每个匹配项一个标记。
它正确解析 C 示例,因为在 ctags 源代码中它使用实际的代码解析器,而不是正则表达式。