ctags regex用于一行中的多个声明

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文档中找不到任何可以在一行中处理多个匹配的内容.

Mas*_*ATO 5

最新的通用,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


Tho*_*ele 2

经过几个小时的研究后,我确信这是不可能的。无论如何,正则表达式只会扩展到每行一个标记。即使您将 \1 \2 \3 ... 作为扩展,也只会导致一个由多个匹配项组成的标记,而不是每个匹配项一个标记。

它正确解析 C 示例,因为在 ctags 源代码中它使用实际的代码解析器,而不是正则表达式。