16bc1a8acSMasatake YAMATO# 26bc1a8acSMasatake YAMATO# systemtap.ctags --- multitable regex parser for SystemTap script file 36bc1a8acSMasatake YAMATO# 46bc1a8acSMasatake YAMATO# Copyright (c) 2018, Red Hat, Inc. 56bc1a8acSMasatake YAMATO# Copyright (c) 2018, Masatake YAMATO 66bc1a8acSMasatake YAMATO# 76bc1a8acSMasatake YAMATO# Author: Masatake YAMATO <yamato@redhat.com> 86bc1a8acSMasatake YAMATO# 96bc1a8acSMasatake YAMATO# This program is free software; you can redistribute it and/or 106bc1a8acSMasatake YAMATO# modify it under the terms of the GNU General Public License 116bc1a8acSMasatake YAMATO# as published by the Free Software Foundation; either version 2 126bc1a8acSMasatake YAMATO# of the License, or (at your option) any later version. 136bc1a8acSMasatake YAMATO# 146bc1a8acSMasatake YAMATO# This program is distributed in the hope that it will be useful, 156bc1a8acSMasatake YAMATO# but WITHOUT ANY WARRANTY; without even the implied warranty of 166bc1a8acSMasatake YAMATO# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 176bc1a8acSMasatake YAMATO# GNU General Public License for more details. 186bc1a8acSMasatake YAMATO# 196bc1a8acSMasatake YAMATO# You should have received a copy of the GNU General Public License 206bc1a8acSMasatake YAMATO# along with this program; if not, write to the Free Software 216bc1a8acSMasatake YAMATO# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 226bc1a8acSMasatake YAMATO# USA. 236bc1a8acSMasatake YAMATO# 246bc1a8acSMasatake YAMATO# 256bc1a8acSMasatake YAMATO# References: 266bc1a8acSMasatake YAMATO# 276bc1a8acSMasatake YAMATO# - https://sourceware.org/systemtap/langref/ 286bc1a8acSMasatake YAMATO# 296bc1a8acSMasatake YAMATO--langdef=SystemTap 306bc1a8acSMasatake YAMATO--map-SystemTap=+.stp 316bc1a8acSMasatake YAMATO--map-SystemTap=+.stpm 32*aa4b8b8fSMasatake YAMATO--alias-SystemTap=+stap 336bc1a8acSMasatake YAMATO 346bc1a8acSMasatake YAMATO--kinddef-SystemTap=p,probe,probe aliases 356bc1a8acSMasatake YAMATO--kinddef-SystemTap=f,function,functions 366bc1a8acSMasatake YAMATO--kinddef-SystemTap=v,variable,variables 376bc1a8acSMasatake YAMATO--kinddef-SystemTap=m,macro,macros 386bc1a8acSMasatake YAMATO 396bc1a8acSMasatake YAMATO--_tabledef-SystemTap=main 406bc1a8acSMasatake YAMATO--_tabledef-SystemTap=comment 416bc1a8acSMasatake YAMATO--_tabledef-SystemTap=any 426bc1a8acSMasatake YAMATO--_tabledef-SystemTap=skipWhiteSpace 436bc1a8acSMasatake YAMATO--_tabledef-SystemTap=skipLiteral 446bc1a8acSMasatake YAMATO--_tabledef-SystemTap=ssliteral 456bc1a8acSMasatake YAMATO--_tabledef-SystemTap=dsliteral 466bc1a8acSMasatake YAMATO--_tabledef-SystemTap=arraysize 476bc1a8acSMasatake YAMATO 486bc1a8acSMasatake YAMATO--_tabledef-SystemTap=stmtend 496bc1a8acSMasatake YAMATO 506bc1a8acSMasatake YAMATO--_tabledef-SystemTap=probe 516bc1a8acSMasatake YAMATO--_tabledef-SystemTap=probeBody 526bc1a8acSMasatake YAMATO--_tabledef-SystemTap=probeStmt 536bc1a8acSMasatake YAMATO 546bc1a8acSMasatake YAMATO--_tabledef-SystemTap=func 556bc1a8acSMasatake YAMATO--_tabledef-SystemTap=funcSig 566bc1a8acSMasatake YAMATO--_tabledef-SystemTap=funcBody 576bc1a8acSMasatake YAMATO--_tabledef-SystemTap=funcStmt 586bc1a8acSMasatake YAMATO--_tabledef-SystemTap=cfuncStmt 596bc1a8acSMasatake YAMATO 606bc1a8acSMasatake YAMATO--_tabledef-SystemTap=vars 616bc1a8acSMasatake YAMATO 626bc1a8acSMasatake YAMATO--_tabledef-SystemTap=macro 636bc1a8acSMasatake YAMATO--_tabledef-SystemTap=macroSig 646bc1a8acSMasatake YAMATO--_tabledef-SystemTap=macroBody 656bc1a8acSMasatake YAMATO--_tabledef-SystemTap=macroStmt 666bc1a8acSMasatake YAMATO 676bc1a8acSMasatake YAMATO# 686bc1a8acSMasatake YAMATO# Utilities 696bc1a8acSMasatake YAMATO# 706bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=any/.// 716bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=skipWhiteSpace/[ \t\n]+// 726bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=skipLiteral/"//{tenter=dsliteral} 736bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=skipLiteral/'//{tenter=ssliteral} 746bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=ssliteral/[^']*'//{tleave} 756bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=ssliteral/[^']+// 766bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=dsliteral/[^"\\]+// 776bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=dsliteral/"//{tleave} 786bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=dsliteral/\\.// 796bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=stmtend///{tleave}{scope=pop} 806bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=arraysize/[^]\/#]+// 816bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=arraysize/]//{tleave} 826bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=arraysize+comment 836bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=arraysize+any 846bc1a8acSMasatake YAMATO 856bc1a8acSMasatake YAMATO# 866bc1a8acSMasatake YAMATO# comment 876bc1a8acSMasatake YAMATO# 886bc1a8acSMasatake YAMATO--_tabledef-SystemTap=comment_multiline 896bc1a8acSMasatake YAMATO--_tabledef-SystemTap=comment_oneline 906bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=comment/\#//{tenter=comment_oneline} 916bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=comment/\/\*//{tenter=comment_multiline} 926bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=comment/\/\///{tenter=comment_oneline} 936bc1a8acSMasatake YAMATO 946bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=comment_multiline/[^*]+// 956bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=comment_multiline/\*\///{tleave} 966bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=comment_multiline+any 976bc1a8acSMasatake YAMATO 986bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=comment_oneline/[^\n]*\n//{tleave} 996bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=comment_oneline+any 1006bc1a8acSMasatake YAMATO 1016bc1a8acSMasatake YAMATO# 1026bc1a8acSMasatake YAMATO# main 1036bc1a8acSMasatake YAMATO# 1046bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=main/[^#\/'"pfg@%]+// 1056bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=main/probe[[:space:]]+//{tenter=probe} 1066bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=main+comment 1076bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=main/@define[[:space:]]+//{tenter=macro} 1086bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=main/function[[:space:]]+//{tenter=func} 1096bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=main/global[[:space:]]+//{tenter=vars} 1106bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=main/%[\{(]//{tenter=cfuncStmt} 1116bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=main+any 1126bc1a8acSMasatake YAMATO 1136bc1a8acSMasatake YAMATO# 1146bc1a8acSMasatake YAMATO# probe 1156bc1a8acSMasatake YAMATO# 1166bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probe/([[:alpha:]_][[:alnum:]_.]*)[[:space:]]*\+?=[[:space:]]*/\1/p/{tenter=probeBody}{scope=push} 1176bc1a8acSMasatake YAMATO 1186bc1a8acSMasatake YAMATO# This "push" is dummy. 1196bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probe/([[:alpha:]_][[:alnum:]_.]*)[[:space:]]*///{tenter=probeBody}{scope=push} 1206bc1a8acSMasatake YAMATO 1216bc1a8acSMasatake YAMATO# 1226bc1a8acSMasatake YAMATO# probeBody 1236bc1a8acSMasatake YAMATO# 1246bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probeBody/[^\{\/#'"]+// 1256bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probeBody/\{//{tenter=probeStmt,stmtend} 1266bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=probeBody+skipLiteral 1276bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=probeBody+comment 1286bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=probeBody+any 1296bc1a8acSMasatake YAMATO 1306bc1a8acSMasatake YAMATO# 1316bc1a8acSMasatake YAMATO# probeStmt 1326bc1a8acSMasatake YAMATO# 1336bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probeStmt/[^\{\}\/#'"]+// 1346bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probeStmt/\}//{tleave} 1356bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=probeStmt+skipLiteral 1366bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=probeStmt/\{//{tenter=probeStmt} 1376bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=probeStmt+comment 1386bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=probeStmt+any 1396bc1a8acSMasatake YAMATO 1406bc1a8acSMasatake YAMATO# 1416bc1a8acSMasatake YAMATO# func 1426bc1a8acSMasatake YAMATO# 1436bc1a8acSMasatake YAMATO 1446bc1a8acSMasatake YAMATO# TODO: return type should be recorded to typeref field 1456bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=func/([[:alpha:]_][[:alnum:]_]*)(:[[:alpha:]_][[:alnum:]_]*)?[[:space:]]*\(/\1/f/{tenter=funcSig,funcBody}{scope=push} 1466bc1a8acSMasatake YAMATO 1476bc1a8acSMasatake YAMATO# TODO: capture parameters 1486bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcSig/[^)\/]+// 1496bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcSig/\)(:[0-9]+)?//{tleave} 1506bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcSig+comment 1516bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcSig+any 1526bc1a8acSMasatake YAMATO 1536bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcBody/[^\{%'"#]+// 1546bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcBody/\{//{tenter=funcStmt,stmtend} 1556bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcBody/%[\{(]//{tenter=cfuncStmt,stmtend} 1566bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcBody+comment 1576bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcBody+any 1586bc1a8acSMasatake YAMATO 1596bc1a8acSMasatake YAMATO# 1606bc1a8acSMasatake YAMATO# funcStmt and cfuncStmt 1616bc1a8acSMasatake YAMATO# 1626bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcStmt/[^%\/#'"\{\}]+// 1636bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcStmt/\}//{tleave} 1646bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcStmt+skipLiteral 1656bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcStmt+comment 1666bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcStmt/%[\{(]//{tenter=cfuncStmt} 1676bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=funcStmt/\{//{tenter=funcStmt} 1686bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=funcStmt+any 1696bc1a8acSMasatake YAMATO 1706bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=cfuncStmt/[^%\/#'"]+// 1716bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=cfuncStmt+comment 1726bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=cfuncStmt+skipLiteral 1736bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=cfuncStmt/%[\})]//{tleave} 1746bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=cfuncStmt/%[\{(]//{tenter=cfuncStmt} 1756bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=cfuncStmt+any 1766bc1a8acSMasatake YAMATO 1776bc1a8acSMasatake YAMATO# 1786bc1a8acSMasatake YAMATO# vars 1796bc1a8acSMasatake YAMATO# 1806bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=vars/([[:alpha:]_][[:alnum:]_]*)%?/\1/v/ 1816bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=vars/[\n]//{tleave} 1826bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=vars/,[[:space:]]*//{tjump=vars} 1836bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=vars+comment 1846bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=vars+skipLiteral 1856bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=vars/\[//{tenter=arraysize} 1866bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=vars+any 1876bc1a8acSMasatake YAMATO 1886bc1a8acSMasatake YAMATO# 1896bc1a8acSMasatake YAMATO# macro 1906bc1a8acSMasatake YAMATO# 1916bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macro/([[:alpha:]_][[:alnum:]_]*)[[:space:]]*\(/\1/m/{tenter=macroSig,macroBody}{scope=push} 1926bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macro/([[:alpha:]_][[:alnum:]_]*)[[:space:]]*/\1/m/{tenter=macroBody,stmtend}{scope=push} 1936bc1a8acSMasatake YAMATO 1946bc1a8acSMasatake YAMATO# TODO: capture parameters 1956bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroSig/[^#\/)]+// 1966bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroSig/\)//{tleave} 1976bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroSig+comment 1986bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroSig+any 1996bc1a8acSMasatake YAMATO 2006bc1a8acSMasatake YAMATO 2016bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroBody/[^%#\/)]+// 2026bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroBody/%\(//{tenter=macroStmt,stmtend} 2036bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroBody+comment 2046bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroBody+any 2056bc1a8acSMasatake YAMATO 2066bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroStmt/[^#\/%'"]+// 2076bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroStmt/%\)//{tleave} 2086bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroStmt+skipLiteral 2096bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroStmt+comment 2106bc1a8acSMasatake YAMATO--_mtable-regex-SystemTap=macroStmt/%\(//{tenter=macroStmt} 2116bc1a8acSMasatake YAMATO--_mtable-extend-SystemTap=macroStmt+any 212