xref: /Universal-ctags/optlib/yacc.ctags (revision fece18c50a4aeef1bee0cb4f17bf9cdc38519b5d)
1*fece18c5SMasatake YAMATO#
2*fece18c5SMasatake YAMATO# yacc.ctags --- multitable regex parser for yacc/bison input
3*fece18c5SMasatake YAMATO#
4*fece18c5SMasatake YAMATO# Copyright (c) 2001-2002, Nick Hibma <n_hibma@van-laarhoven.org>
5*fece18c5SMasatake YAMATO# Copyright (c) 2021, Red Hat, Inc.
6*fece18c5SMasatake YAMATO# Copyright (c) 2021, Masatake YAMATO
7*fece18c5SMasatake YAMATO#
8*fece18c5SMasatake YAMATO# Author: Masatake YAMATO <yamato@redhat.com>
9*fece18c5SMasatake YAMATO#
10*fece18c5SMasatake YAMATO# This program is free software; you can redistribute it and/or
11*fece18c5SMasatake YAMATO# modify it under the terms of the GNU General Public License
12*fece18c5SMasatake YAMATO# as published by the Free Software Foundation; either version 2
13*fece18c5SMasatake YAMATO# of the License, or (at your option) any later version.
14*fece18c5SMasatake YAMATO#
15*fece18c5SMasatake YAMATO# This program is distributed in the hope that it will be useful,
16*fece18c5SMasatake YAMATO# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*fece18c5SMasatake YAMATO# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*fece18c5SMasatake YAMATO# GNU General Public License for more details.
19*fece18c5SMasatake YAMATO#
20*fece18c5SMasatake YAMATO# You should have received a copy of the GNU General Public License
21*fece18c5SMasatake YAMATO# along with this program; if not, write to the Free Software
22*fece18c5SMasatake YAMATO# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
23*fece18c5SMasatake YAMATO# USA.
24*fece18c5SMasatake YAMATO#
25*fece18c5SMasatake YAMATO# The original version of this parser is written in C (+ regex patterns).
26*fece18c5SMasatake YAMATO#
27*fece18c5SMasatake YAMATO# References:
28*fece18c5SMasatake YAMATO#
29*fece18c5SMasatake YAMATO# - https://www.gnu.org/software/bison/manual/html_node/Grammar-File.html
30*fece18c5SMasatake YAMATO#
31*fece18c5SMasatake YAMATO
32*fece18c5SMasatake YAMATO--langdef=YACC
33*fece18c5SMasatake YAMATO--map-YACC=+.y
34*fece18c5SMasatake YAMATO
35*fece18c5SMasatake YAMATO#
36*fece18c5SMasatake YAMATO# Kind definitions
37*fece18c5SMasatake YAMATO#
38*fece18c5SMasatake YAMATO
39*fece18c5SMasatake YAMATO--kinddef-YACC=t,token,tokens
40*fece18c5SMasatake YAMATO--kinddef-YACC=l,label,labels
41*fece18c5SMasatake YAMATO
42*fece18c5SMasatake YAMATO#
43*fece18c5SMasatake YAMATO#
44*fece18c5SMasatake YAMATO#
45*fece18c5SMasatake YAMATO--_prelude-YACC={{
46*fece18c5SMasatake YAMATO    /token-type false def
47*fece18c5SMasatake YAMATO    /type-dict 57 dict def
48*fece18c5SMasatake YAMATO}}
49*fece18c5SMasatake YAMATO
50*fece18c5SMasatake YAMATO#
51*fece18c5SMasatake YAMATO# Tables declaration
52*fece18c5SMasatake YAMATO#
53*fece18c5SMasatake YAMATO
54*fece18c5SMasatake YAMATO--_tabledef-YACC=toplevel
55*fece18c5SMasatake YAMATO--_tabledef-YACC=comment
56*fece18c5SMasatake YAMATO--_tabledef-YACC=cPrologue
57*fece18c5SMasatake YAMATO--_tabledef-YACC=grammar
58*fece18c5SMasatake YAMATO--_tabledef-YACC=cEpilogue
59*fece18c5SMasatake YAMATO--_tabledef-YACC=token
60*fece18c5SMasatake YAMATO--_tabledef-YACC=cUnion
61*fece18c5SMasatake YAMATO--_tabledef-YACC=cString
62*fece18c5SMasatake YAMATO--_tabledef-YACC=iString
63*fece18c5SMasatake YAMATO--_tabledef-YACC=rule
64*fece18c5SMasatake YAMATO--_tabledef-YACC=cActionCommon
65*fece18c5SMasatake YAMATO--_tabledef-YACC=cAction
66*fece18c5SMasatake YAMATO--_tabledef-YACC=type
67*fece18c5SMasatake YAMATO--_tabledef-YACC=cCharlit
68*fece18c5SMasatake YAMATO
69*fece18c5SMasatake YAMATO#
70*fece18c5SMasatake YAMATO# Tables definitions
71*fece18c5SMasatake YAMATO#
72*fece18c5SMasatake YAMATO--_mtable-regex-YACC=comment/[^*]+//
73*fece18c5SMasatake YAMATO--_mtable-regex-YACC=comment/\*\///{tleave}
74*fece18c5SMasatake YAMATO--_mtable-regex-YACC=comment/.//
75*fece18c5SMasatake YAMATO
76*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cPrologue/[^%]+//
77*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cPrologue/%\}//{tleave}{_guest=,,0start}
78*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cPrologue/.//
79*fece18c5SMasatake YAMATO
80*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cActionCommon/[^"\/\{\}]+//
81*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cActionCommon/"//{tenter=cString}
82*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cActionCommon/'//{tenter=cCharlit}
83*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cActionCommon/\/\*//{tenter=comment}
84*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cActionCommon/\{//{tenter=cAction}
85*fece18c5SMasatake YAMATO
86*fece18c5SMasatake YAMATO--_mtable-extend-YACC=cAction+cActionCommon
87*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cAction/\}//{tleave}
88*fece18c5SMasatake YAMATO
89*fece18c5SMasatake YAMATO--_mtable-regex-YACC=rule/[^\{;]+//
90*fece18c5SMasatake YAMATO--_mtable-regex-YACC=rule/\{//{tenter=cAction}
91*fece18c5SMasatake YAMATO--_mtable-regex-YACC=rule/;//{tleave}
92*fece18c5SMasatake YAMATO--_mtable-regex-YACC=rule/.//
93*fece18c5SMasatake YAMATO
94*fece18c5SMasatake YAMATO--_mtable-regex-YACC=grammar/%%//{tjump=cEpilogue}{_guest=C,0end,}
95*fece18c5SMasatake YAMATO--_mtable-regex-YACC=grammar/([a-zA-Z_.][-a-zA-Z_.0-9]+)[ \t\n]*:[ \t\n]*/\1/l/{tenter=rule}{{
96*fece18c5SMasatake YAMATO    type-dict \1 known {
97*fece18c5SMasatake YAMATO        type-dict \1 get . exch typeref:
98*fece18c5SMasatake YAMATO    } if
99*fece18c5SMasatake YAMATO}}
100*fece18c5SMasatake YAMATO--_mtable-regex-YACC=grammar/.//
101*fece18c5SMasatake YAMATO
102*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cEpilogue/.+//{_guest=,,0end}
103*fece18c5SMasatake YAMATO
104*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cString/[\\"]+//
105*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cString/\\.//
106*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cString/"//{tleave}
107*fece18c5SMasatake YAMATO
108*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cCharlit/[^\\]'//{tleave}
109*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cCharlit/\\.'//{tleave}
110*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cCharlit/'//{tleave}
111*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cCharlit/.//
112*fece18c5SMasatake YAMATO
113*fece18c5SMasatake YAMATO--_mtable-regex-YACC=iString/"//{tenter=cString}
114*fece18c5SMasatake YAMATO--_mtable-regex-YACC=iString/\)//{tleave}
115*fece18c5SMasatake YAMATO--_mtable-regex-YACC=iString/.//
116*fece18c5SMasatake YAMATO
117*fece18c5SMasatake YAMATO#
118*fece18c5SMasatake YAMATO# %token TAG? ( ID NUMBER? STRING? )+ ( TAG ( ID NUMBER? STRING? )+ )*
119*fece18c5SMasatake YAMATO# TODO: %left  TAG? ( ID NUMBER?)+ ( TAG ( ID NUMBER? )+ )*
120*fece18c5SMasatake YAMATO#       The directives %precedence, %right and %nonassoc behave like
121*fece18c5SMasatake YAMATO#       %left.
122*fece18c5SMasatake YAMATO#
123*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/N?_[ \t]*\(//{tenter=iString}
124*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/([_a-zA-Z][_a-zA-Z0-9]*)[ \t\n]*/\1/t/{{
125*fece18c5SMasatake YAMATO    token-type false ne {
126*fece18c5SMasatake YAMATO        . token-type typeref:
127*fece18c5SMasatake YAMATO    } if
128*fece18c5SMasatake YAMATO}}
129*fece18c5SMasatake YAMATO# TODO condense multiple whitespaces in type name
130*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/<[ \t]*([_a-zA-Z][_a-zA-Z0-9 *]*)[ \t]*>[ \t\n]*//{{
131*fece18c5SMasatake YAMATO    /token-type \1 def
132*fece18c5SMasatake YAMATO}}
133*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/"//{tenter=cString}
134*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/'//{tenter=cCharlit}
135*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/-?[ \t\n]*(0x)?[0-9]+[ \t\n]*//
136*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/%//{tleave}{_advanceTo=0start}{{
137*fece18c5SMasatake YAMATO    /token-type false def
138*fece18c5SMasatake YAMATO}}
139*fece18c5SMasatake YAMATO--_mtable-regex-YACC=token/.|\n//
140*fece18c5SMasatake YAMATO
141*fece18c5SMasatake YAMATO--_mtable-extend-YACC=cUnion+cActionCommon
142*fece18c5SMasatake YAMATO--_mtable-regex-YACC=cUnion/\}//{tleave}{_guest=,,0end}{tleave}
143*fece18c5SMasatake YAMATO
144*fece18c5SMasatake YAMATO#
145*fece18c5SMasatake YAMATO# %type  TAG? ( ID | CHAR | STRING )+ ( TAG ( ID | CHAR | STRING )+ )*
146*fece18c5SMasatake YAMATO# %nterm TAG? ID+ ( TAG ID+ )*
147*fece18c5SMasatake YAMATO#
148*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/N?_[ \t]*\(//{tenter=iString}
149*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/([_a-zA-Z][_a-zA-Z0-9]*)[ \t\n]*//{{
150*fece18c5SMasatake YAMATO    token-type false ne {
151*fece18c5SMasatake YAMATO        type-dict \1 token-type put
152*fece18c5SMasatake YAMATO    } if
153*fece18c5SMasatake YAMATO}}
154*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/<[ \t]*([_a-zA-Z][_a-zA-Z0-9 *]*)[ \t]*>[ \t\n]*//{{
155*fece18c5SMasatake YAMATO    /token-type \1 def
156*fece18c5SMasatake YAMATO}}
157*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/"//{tenter=cString}
158*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/'//{tenter=cCharlit}
159*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/%//{tleave}{_advanceTo=0start}{{
160*fece18c5SMasatake YAMATO    /token-type false def
161*fece18c5SMasatake YAMATO}}
162*fece18c5SMasatake YAMATO--_mtable-regex-YACC=type/.|\n//
163*fece18c5SMasatake YAMATO
164*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/\/\*//{tenter=comment}
165*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/%token[ \t\n]+//{tenter=token}{{
166*fece18c5SMasatake YAMATO    /token-type false def
167*fece18c5SMasatake YAMATO}}
168*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/%(union)[^\{]*\{//{tenter=cUnion}{_guest=C,1start,}
169*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/%(code[^\{]*)?\{//{tenter=cPrologue}{_guest=C,0end,}
170*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/%(type|nterm)[ \n\t]*//{tenter=type}{{
171*fece18c5SMasatake YAMATO    /token-type false def
172*fece18c5SMasatake YAMATO}}
173*fece18c5SMasatake YAMATO
174*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/%%//{tjump=grammar}
175*fece18c5SMasatake YAMATO--_mtable-regex-YACC=toplevel/[^\n]*\n//
176*fece18c5SMasatake YAMATO
177*fece18c5SMasatake YAMATO# TODO: %initial-action skip?
178*fece18c5SMasatake YAMATO#
179*fece18c5SMasatake YAMATO# -- Directive: %defines DEFINES-FILE
180*fece18c5SMasatake YAMATO#     Same as above, but save in the file DEFINES-FILE.
181*fece18c5SMasatake YAMATO#  -- Directive: %language "LANGUAGE"
182*fece18c5SMasatake YAMATO#  -- Directive: %output "FILE"
183*fece18c5SMasatake YAMATO#     Generate the parser implementation in FILE.
184