xref: /Universal-ctags/optlib/systemtap.ctags (revision aa4b8b8f8ff06686268fd17a57ed568b8df78e34)
1#
2# systemtap.ctags --- multitable regex parser for SystemTap script file
3#
4#  Copyright (c) 2018, Red Hat, Inc.
5#  Copyright (c) 2018, Masatake YAMATO
6#
7#  Author: Masatake YAMATO <yamato@redhat.com>
8#
9# This program is free software; you can redistribute it and/or
10# modify it under the terms of the GNU General Public License
11# as published by the Free Software Foundation; either version 2
12# of the License, or (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22# USA.
23#
24#
25# References:
26#
27# - https://sourceware.org/systemtap/langref/
28#
29--langdef=SystemTap
30--map-SystemTap=+.stp
31--map-SystemTap=+.stpm
32--alias-SystemTap=+stap
33
34--kinddef-SystemTap=p,probe,probe aliases
35--kinddef-SystemTap=f,function,functions
36--kinddef-SystemTap=v,variable,variables
37--kinddef-SystemTap=m,macro,macros
38
39--_tabledef-SystemTap=main
40--_tabledef-SystemTap=comment
41--_tabledef-SystemTap=any
42--_tabledef-SystemTap=skipWhiteSpace
43--_tabledef-SystemTap=skipLiteral
44--_tabledef-SystemTap=ssliteral
45--_tabledef-SystemTap=dsliteral
46--_tabledef-SystemTap=arraysize
47
48--_tabledef-SystemTap=stmtend
49
50--_tabledef-SystemTap=probe
51--_tabledef-SystemTap=probeBody
52--_tabledef-SystemTap=probeStmt
53
54--_tabledef-SystemTap=func
55--_tabledef-SystemTap=funcSig
56--_tabledef-SystemTap=funcBody
57--_tabledef-SystemTap=funcStmt
58--_tabledef-SystemTap=cfuncStmt
59
60--_tabledef-SystemTap=vars
61
62--_tabledef-SystemTap=macro
63--_tabledef-SystemTap=macroSig
64--_tabledef-SystemTap=macroBody
65--_tabledef-SystemTap=macroStmt
66
67#
68# Utilities
69#
70--_mtable-regex-SystemTap=any/.//
71--_mtable-regex-SystemTap=skipWhiteSpace/[ \t\n]+//
72--_mtable-regex-SystemTap=skipLiteral/"//{tenter=dsliteral}
73--_mtable-regex-SystemTap=skipLiteral/'//{tenter=ssliteral}
74--_mtable-regex-SystemTap=ssliteral/[^']*'//{tleave}
75--_mtable-regex-SystemTap=ssliteral/[^']+//
76--_mtable-regex-SystemTap=dsliteral/[^"\\]+//
77--_mtable-regex-SystemTap=dsliteral/"//{tleave}
78--_mtable-regex-SystemTap=dsliteral/\\.//
79--_mtable-regex-SystemTap=stmtend///{tleave}{scope=pop}
80--_mtable-regex-SystemTap=arraysize/[^]\/#]+//
81--_mtable-regex-SystemTap=arraysize/]//{tleave}
82--_mtable-extend-SystemTap=arraysize+comment
83--_mtable-extend-SystemTap=arraysize+any
84
85#
86# comment
87#
88--_tabledef-SystemTap=comment_multiline
89--_tabledef-SystemTap=comment_oneline
90--_mtable-regex-SystemTap=comment/\#//{tenter=comment_oneline}
91--_mtable-regex-SystemTap=comment/\/\*//{tenter=comment_multiline}
92--_mtable-regex-SystemTap=comment/\/\///{tenter=comment_oneline}
93
94--_mtable-regex-SystemTap=comment_multiline/[^*]+//
95--_mtable-regex-SystemTap=comment_multiline/\*\///{tleave}
96--_mtable-extend-SystemTap=comment_multiline+any
97
98--_mtable-regex-SystemTap=comment_oneline/[^\n]*\n//{tleave}
99--_mtable-extend-SystemTap=comment_oneline+any
100
101#
102# main
103#
104--_mtable-regex-SystemTap=main/[^#\/'"pfg@%]+//
105--_mtable-regex-SystemTap=main/probe[[:space:]]+//{tenter=probe}
106--_mtable-extend-SystemTap=main+comment
107--_mtable-regex-SystemTap=main/@define[[:space:]]+//{tenter=macro}
108--_mtable-regex-SystemTap=main/function[[:space:]]+//{tenter=func}
109--_mtable-regex-SystemTap=main/global[[:space:]]+//{tenter=vars}
110--_mtable-regex-SystemTap=main/%[\{(]//{tenter=cfuncStmt}
111--_mtable-extend-SystemTap=main+any
112
113#
114# probe
115#
116--_mtable-regex-SystemTap=probe/([[:alpha:]_][[:alnum:]_.]*)[[:space:]]*\+?=[[:space:]]*/\1/p/{tenter=probeBody}{scope=push}
117
118# This "push" is dummy.
119--_mtable-regex-SystemTap=probe/([[:alpha:]_][[:alnum:]_.]*)[[:space:]]*///{tenter=probeBody}{scope=push}
120
121#
122# probeBody
123#
124--_mtable-regex-SystemTap=probeBody/[^\{\/#'"]+//
125--_mtable-regex-SystemTap=probeBody/\{//{tenter=probeStmt,stmtend}
126--_mtable-extend-SystemTap=probeBody+skipLiteral
127--_mtable-extend-SystemTap=probeBody+comment
128--_mtable-extend-SystemTap=probeBody+any
129
130#
131# probeStmt
132#
133--_mtable-regex-SystemTap=probeStmt/[^\{\}\/#'"]+//
134--_mtable-regex-SystemTap=probeStmt/\}//{tleave}
135--_mtable-extend-SystemTap=probeStmt+skipLiteral
136--_mtable-regex-SystemTap=probeStmt/\{//{tenter=probeStmt}
137--_mtable-extend-SystemTap=probeStmt+comment
138--_mtable-extend-SystemTap=probeStmt+any
139
140#
141# func
142#
143
144# TODO: return type should be recorded to typeref field
145--_mtable-regex-SystemTap=func/([[:alpha:]_][[:alnum:]_]*)(:[[:alpha:]_][[:alnum:]_]*)?[[:space:]]*\(/\1/f/{tenter=funcSig,funcBody}{scope=push}
146
147# TODO: capture parameters
148--_mtable-regex-SystemTap=funcSig/[^)\/]+//
149--_mtable-regex-SystemTap=funcSig/\)(:[0-9]+)?//{tleave}
150--_mtable-extend-SystemTap=funcSig+comment
151--_mtable-extend-SystemTap=funcSig+any
152
153--_mtable-regex-SystemTap=funcBody/[^\{%'"#]+//
154--_mtable-regex-SystemTap=funcBody/\{//{tenter=funcStmt,stmtend}
155--_mtable-regex-SystemTap=funcBody/%[\{(]//{tenter=cfuncStmt,stmtend}
156--_mtable-extend-SystemTap=funcBody+comment
157--_mtable-extend-SystemTap=funcBody+any
158
159#
160# funcStmt and cfuncStmt
161#
162--_mtable-regex-SystemTap=funcStmt/[^%\/#'"\{\}]+//
163--_mtable-regex-SystemTap=funcStmt/\}//{tleave}
164--_mtable-extend-SystemTap=funcStmt+skipLiteral
165--_mtable-extend-SystemTap=funcStmt+comment
166--_mtable-regex-SystemTap=funcStmt/%[\{(]//{tenter=cfuncStmt}
167--_mtable-regex-SystemTap=funcStmt/\{//{tenter=funcStmt}
168--_mtable-extend-SystemTap=funcStmt+any
169
170--_mtable-regex-SystemTap=cfuncStmt/[^%\/#'"]+//
171--_mtable-extend-SystemTap=cfuncStmt+comment
172--_mtable-extend-SystemTap=cfuncStmt+skipLiteral
173--_mtable-regex-SystemTap=cfuncStmt/%[\})]//{tleave}
174--_mtable-regex-SystemTap=cfuncStmt/%[\{(]//{tenter=cfuncStmt}
175--_mtable-extend-SystemTap=cfuncStmt+any
176
177#
178# vars
179#
180--_mtable-regex-SystemTap=vars/([[:alpha:]_][[:alnum:]_]*)%?/\1/v/
181--_mtable-regex-SystemTap=vars/[\n]//{tleave}
182--_mtable-regex-SystemTap=vars/,[[:space:]]*//{tjump=vars}
183--_mtable-extend-SystemTap=vars+comment
184--_mtable-extend-SystemTap=vars+skipLiteral
185--_mtable-regex-SystemTap=vars/\[//{tenter=arraysize}
186--_mtable-extend-SystemTap=vars+any
187
188#
189# macro
190#
191--_mtable-regex-SystemTap=macro/([[:alpha:]_][[:alnum:]_]*)[[:space:]]*\(/\1/m/{tenter=macroSig,macroBody}{scope=push}
192--_mtable-regex-SystemTap=macro/([[:alpha:]_][[:alnum:]_]*)[[:space:]]*/\1/m/{tenter=macroBody,stmtend}{scope=push}
193
194# TODO: capture parameters
195--_mtable-regex-SystemTap=macroSig/[^#\/)]+//
196--_mtable-regex-SystemTap=macroSig/\)//{tleave}
197--_mtable-extend-SystemTap=macroSig+comment
198--_mtable-extend-SystemTap=macroSig+any
199
200
201--_mtable-regex-SystemTap=macroBody/[^%#\/)]+//
202--_mtable-regex-SystemTap=macroBody/%\(//{tenter=macroStmt,stmtend}
203--_mtable-extend-SystemTap=macroBody+comment
204--_mtable-extend-SystemTap=macroBody+any
205
206--_mtable-regex-SystemTap=macroStmt/[^#\/%'"]+//
207--_mtable-regex-SystemTap=macroStmt/%\)//{tleave}
208--_mtable-extend-SystemTap=macroStmt+skipLiteral
209--_mtable-extend-SystemTap=macroStmt+comment
210--_mtable-regex-SystemTap=macroStmt/%\(//{tenter=macroStmt}
211--_mtable-extend-SystemTap=macroStmt+any
212