xkbparse.c revision 07d2e718
1#ifndef lint
2static const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7
8#define YYBYACC 1
9#define YYMAJOR 1
10#define YYMINOR 9
11#define YYPATCH 20100216
12
13#define YYEMPTY        (-1)
14#define yyclearin      (yychar = YYEMPTY)
15#define yyerrok        (yyerrflag = 0)
16#define YYRECOVERING() (yyerrflag != 0)
17
18#define YYPREFIX "yy"
19
20/* compatibility with bison */
21#ifdef YYPARSE_PARAM
22/* compatibility with FreeBSD */
23#ifdef YYPARSE_PARAM_TYPE
24#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
25#else
26#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
27#endif
28#else
29#define YYPARSE_DECL() yyparse(void)
30#endif /* YYPARSE_PARAM */
31
32extern int YYPARSE_DECL();
33
34#line 92 "xkbparse.y"
35#ifdef DEBUG
36#define	YYDEBUG 1
37#endif
38#define	DEBUG_VAR parseDebug
39#include "parseutils.h"
40#include <X11/keysym.h>
41#include <X11/extensions/XKBgeom.h>
42#include <stdlib.h>
43
44unsigned int parseDebug;
45
46#line 110 "xkbparse.y"
47typedef union	{
48	int		 ival;
49	unsigned	 uval;
50	char		*str;
51	Atom	 	sval;
52	ParseCommon	*any;
53	ExprDef		*expr;
54	VarDef		*var;
55	VModDef		*vmod;
56	InterpDef	*interp;
57	KeyTypeDef	*keyType;
58	SymbolsDef	*syms;
59	ModMapDef	*modMask;
60	GroupCompatDef	*groupCompat;
61	IndicatorMapDef	*ledMap;
62	IndicatorNameDef *ledName;
63	KeycodeDef	*keyName;
64	KeyAliasDef	*keyAlias;
65	ShapeDef	*shape;
66	SectionDef	*section;
67	RowDef		*row;
68	KeyDef		*key;
69	OverlayDef	*overlay;
70	OverlayKeyDef	*olKey;
71	OutlineDef	*outline;
72	DoodadDef	*doodad;
73	XkbFile		*file;
74} YYSTYPE;
75#line 75 "xkbparse.c"
76#define END_OF_FILE 0
77#define ERROR_TOK 255
78#define XKB_KEYMAP 1
79#define XKB_KEYCODES 2
80#define XKB_TYPES 3
81#define XKB_SYMBOLS 4
82#define XKB_COMPATMAP 5
83#define XKB_GEOMETRY 6
84#define XKB_SEMANTICS 7
85#define XKB_LAYOUT 8
86#define INCLUDE 10
87#define OVERRIDE 11
88#define AUGMENT 12
89#define REPLACE 13
90#define ALTERNATE 14
91#define VIRTUAL_MODS 20
92#define TYPE 21
93#define INTERPRET 22
94#define ACTION_TOK 23
95#define KEY 24
96#define ALIAS 25
97#define GROUP 26
98#define MODIFIER_MAP 27
99#define INDICATOR 28
100#define SHAPE 29
101#define KEYS 30
102#define ROW 31
103#define SECTION 32
104#define OVERLAY 33
105#define TEXT 34
106#define OUTLINE 35
107#define SOLID 36
108#define LOGO 37
109#define VIRTUAL 38
110#define EQUALS 40
111#define PLUS 41
112#define MINUS 42
113#define DIVIDE 43
114#define TIMES 44
115#define OBRACE 45
116#define CBRACE 46
117#define OPAREN 47
118#define CPAREN 48
119#define OBRACKET 49
120#define CBRACKET 50
121#define DOT 51
122#define COMMA 52
123#define SEMI 53
124#define EXCLAM 54
125#define INVERT 55
126#define STRING 60
127#define INTEGER 61
128#define FLOAT 62
129#define IDENT 63
130#define KEYNAME 64
131#define PARTIAL 70
132#define DEFAULT 71
133#define HIDDEN 72
134#define ALPHANUMERIC_KEYS 73
135#define MODIFIER_KEYS 74
136#define KEYPAD_KEYS 75
137#define FUNCTION_KEYS 76
138#define ALTERNATE_GROUP 77
139#define YYERRCODE 256
140static const short yylhs[] = {                           -1,
141    0,    0,    0,   71,   71,   70,    5,    5,    5,   67,
142   67,   68,   69,    6,    6,    6,    6,    6,   12,   12,
143   11,   11,   10,   10,   10,   10,   10,   10,   10,   10,
144   21,   21,   22,   22,   22,   22,   22,   22,   22,   22,
145   22,   22,   22,   22,   22,   22,   22,   36,   36,   36,
146   51,   52,   40,   41,   41,   42,   42,   43,   44,   44,
147   37,   37,   45,   46,   38,   38,   38,   39,   39,   39,
148   39,   39,   29,   29,   48,   47,   49,   50,   50,   53,
149   53,   54,   55,   55,   56,   56,   56,   56,   56,   57,
150   57,   58,   58,   59,   59,   60,   60,   61,   62,   62,
151   63,   64,   64,   65,   65,   65,   35,   35,   34,   66,
152    9,    9,    9,    9,   17,   17,   19,   19,   19,   19,
153   19,   19,   19,   19,   19,   19,   19,    8,    8,    7,
154    7,    7,    7,    7,   23,   23,   24,   24,   25,   25,
155   25,   25,   25,   25,   26,   26,   26,   26,   26,   26,
156   26,   26,   33,   33,   32,   27,   27,   27,   27,   28,
157   28,   28,   28,   30,   30,   31,   31,   16,   16,   16,
158    4,    4,    1,    1,    3,    2,   13,   18,   18,   20,
159   15,   15,   14,
160};
161static const short yylen[] = {                            2,
162    1,    1,    1,    2,    1,    7,    1,    1,    1,    2,
163    1,    7,    4,    1,    1,    1,    1,    1,    1,    0,
164    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
165    2,    0,    2,    2,    2,    2,    2,    2,    2,    2,
166    2,    2,    2,    2,    2,    2,    2,    4,    2,    3,
167    4,    5,    3,    3,    1,    1,    3,    6,    3,    1,
168    2,    1,    6,    6,    3,    1,    0,    3,    3,    1,
169    2,    1,    3,    3,    5,    6,    6,    5,    6,    6,
170    6,    6,    2,    1,    5,    1,    1,    1,    1,    2,
171    1,    5,    1,    3,    1,    1,    3,    6,    3,    1,
172    3,    3,    1,    3,    5,    3,    3,    1,    5,    6,
173    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
174    1,    1,    1,    1,    1,    1,    1,    1,    0,    1,
175    1,    1,    1,    1,    1,    0,    3,    1,    3,    3,
176    3,    3,    3,    1,    2,    2,    2,    2,    1,    4,
177    1,    3,    3,    1,    4,    1,    3,    4,    6,    1,
178    1,    1,    1,    1,    0,    3,    1,    1,    1,    1,
179    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
180    1,    0,    1,
181};
182static const short yydefred[] = {                         0,
183   23,   24,   25,   26,   27,   28,   29,   30,    0,   22,
184    0,    0,    0,   11,    3,    5,    0,   21,    7,   14,
185   15,   17,   16,   18,    8,    9,    0,    0,    0,   10,
186    0,    4,  183,  181,    0,    0,    0,    0,   32,    0,
187    0,    0,    0,  130,  132,  131,  133,  134,    0,    0,
188   31,    0,    0,   47,    0,    0,    0,  117,    0,    0,
189    0,    0,    0,    0,  125,    0,    0,  112,  113,  114,
190    0,    0,  178,  177,  179,    0,    0,    0,    0,  116,
191    0,   33,   34,   35,   38,   39,   40,   41,   42,   43,
192   36,   37,   44,   45,   46,    6,   12,    0,    0,   55,
193  180,    0,  169,  176,  168,  170,    0,    0,    0,    0,
194    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
195    0,    0,   49,    0,    0,    0,   53,    0,    0,    0,
196    0,    0,    0,    0,    0,    0,    0,    0,    0,   50,
197    0,  119,  118,  120,  121,  122,  123,  124,  126,  127,
198    0,    0,    0,    0,    0,  175,  161,  162,  163,    0,
199  115,  160,    0,  144,    0,  151,    0,    0,    0,    0,
200   54,   62,    0,    0,    0,    0,    0,    0,    0,   72,
201    0,   66,    0,    0,    0,    0,    0,    0,    0,    0,
202    0,  108,    0,    0,  103,    0,    0,    0,   86,   88,
203    0,   84,   89,   87,    0,    0,  146,  149,  145,    0,
204  147,  148,    0,    0,    0,    0,    0,   51,    0,  158,
205    0,   48,    0,   61,    0,    0,    0,  167,    0,    0,
206    0,  154,    0,   71,    0,    0,    0,   52,   75,    0,
207    0,   78,    0,    0,    0,  174,  173,  172,    0,    0,
208    0,    0,    0,    0,    0,    0,    0,   83,    0,    0,
209  152,    0,    0,    0,    0,  139,  142,    0,    0,   63,
210   58,    0,   73,    0,   74,    0,    0,   69,   64,   65,
211   76,    0,   77,  104,  171,    0,    0,    0,   81,  107,
212   80,  102,    0,   93,    0,   91,    0,   82,   79,  110,
213  150,  159,    0,  166,  153,    0,    0,    0,    0,   90,
214    0,    0,  100,  155,  109,  105,    0,   96,    0,   95,
215   85,    0,    0,    0,    0,    0,    0,  101,   98,   99,
216   97,   92,   94,
217};
218static const short yydgoto[] = {                          9,
219  248,  157,  158,  249,   27,   28,   49,   50,   76,   10,
220   11,   29,  159,   34,   35,  107,  160,  161,   80,  162,
221   40,   51,  262,  263,  186,  164,  165,  166,  180,  230,
222  231,  232,  233,  192,  193,  172,  173,  181,  182,   83,
223   99,  100,   84,  108,   85,   86,   87,   88,  200,   90,
224   91,   92,   93,   94,  201,  202,  295,  296,  319,  320,
225  203,  312,  313,  194,  195,  204,   13,   14,   15,   16,
226   17,
227};
228static const short yysindex[] = {                       456,
229    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
230  456,  975,  456,    0,    0,    0,  456,    0,    0,    0,
231    0,    0,    0,    0,    0,    0,  -40,  -40,  534,    0,
232   15,    0,    0,    0,   -1,   11,  -40,  456,    0,  658,
233   11,  123,   16,    0,    0,    0,    0,    0,    3,   14,
234    0,    6,   13,    0,   25,   32,   -8,    0,   37,   37,
235   52,   25,  145,   32,    0,   32,    0,    0,    0,    0,
236   88,   25,    0,    0,    0,   32,   92,   80,  108,    0,
237  131,    0,    0,    0,    0,    0,    0,    0,    0,    0,
238    0,    0,    0,    0,    0,    0,    0,  138,  161,    0,
239    0,  118,    0,    0,    0,    0,  140,  143,  146,  162,
240  170,  181,  189,  188,  193,  215,   52,  218,  238,  633,
241  633,  941,    0,  633,  633,   25,    0,  903,  633,  903,
242  738,   37,  633,  633,  633,  903,    9,  266,  240,    0,
243  903,    0,    0,    0,    0,    0,    0,    0,    0,    0,
244  633,  633,  633,  633,  633,    0,    0,    0,    0,  311,
245    0,    0,  103,    0,  245,    0,  414,  166,  208,  583,
246    0,    0,  752,  583,  790,  882,   25,    0,  256,    0,
247   47,    0,  251,  212,   97,  583,  225,  806,  270,   45,
248  274,    0,  137,  211,    0,   32,  304,   32,    0,    0,
249  679,    0,    0,    0,  633,  844,    0,    0,    0,  537,
250    0,    0,  633,  633,  633,  633,  633,    0,  633,    0,
251  633,    0,  298,    0,  306,    0,    0,    0,  326,  345,
252  324,    0,   98,    0,  541,  347,  738,    0,    0,  360,
253  633,    0,  364,  385,  354,    0,    0,    0,  376,  587,
254  387,  270,  407,    2,  865,  403,  410,    0,  280,  427,
255    0,  418,  438,  395,  395,    0,    0,  583,  474,    0,
256    0,  633,    0,   -8,    0,  941,  583,    0,    0,    0,
257    0,  583,    0,    0,    0,   45,  270,  583,    0,    0,
258    0,    0,  467,    0,  700,    0,   37,    0,    0,    0,
259    0,    0,  453,    0,    0,  491,  413,  -32,  500,    0,
260  516,  437,    0,    0,    0,    0,  633,    0,  545,    0,
261    0,   37,  513,   37,  546,  518,  -32,    0,    0,    0,
262    0,    0,    0,
263};
264static const short yyrindex[] = {                       983,
265    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
266  991,    0,  399,    0,    0,    0,  334,    0,    0,    0,
267    0,    0,    0,    0,    0,    0,  529,  343,    0,    0,
268    0,    0,    0,    0,    0,  398,  529,  680,    0,  450,
269    0,  680,  471,    0,    0,    0,    0,    0,  523,    0,
270    0,    0,    0,    0,    0,   20,   60,    0,   84,    0,
271   87,  152,  190,  194,    0,  235,   74,    0,    0,    0,
272    0,    0,    0,    0,    0,    0,    0,  536,  296,    0,
273    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
274    0,    0,    0,    0,    0,    0,    0,  415,    0,    0,
275    0,    0,    0,    0,    0,    0,  539,    0,    0,    0,
276    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
277    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
278  547,    0,    0,    0,    0,    0,    0,    0,    0,    0,
279    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
280    0,    0,    0,    0,    0,    0,    0,    0,    0,  265,
281    0,    0,    0,    0,  341,    0,    0,  401,    0,  458,
282    0,    0,    0,  544,    0,  557,    0,  230,    0,    0,
283    0,    0,    0,    0,    0,  292,    0,    0,    0,    0,
284    0,    0,    0,    0,    0,  190,  299,    0,    0,    0,
285    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
286    0,    0,  572,    0,    0,    0,    0,    0,    0,    0,
287    0,    0,    0,    0,    0,   65,  110,    0,    0,    0,
288  586,    0,    0,    0,    0,    0,    0,    0,    0,    0,
289    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
290    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
291    0,    0,  574,  134,  175,    0,    0,  585,    0,    0,
292    0,  572,    0,    0,    0,    0,  554,    0,    0,    0,
293    0,  344,    0,    0,    0,    0,    0,  571,    0,    0,
294    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
295    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
296    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
297    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
298    0,    0,    0,
299};
300static const short yygindex[] = {                         0,
301  394,  -56,    0,  357,    0,  611,    0,    0,    0,  634,
302    0,   57,  -50,    0,   39, -170,   36,  -47,    0,  -45,
303  605,    0,  374, -132,  111,  368,  -33,    0,  417,    0,
304    0,  377,    0,  411, -177,  -36,  -66,    0,  429,    0,
305    0,  550,    0,    0,    0,    0,    0,    0,  623,    0,
306    0,    0,    0,    0,    0,  476,    0,  383,    0,  352,
307    0,    0,  365,    0,  436,  631,  653,   -9,    0,  675,
308    0,
309};
310#define YYTABLESIZE 1012
311static const short yytable[] = {                         77,
312  106,  185,   79,   30,  111,  228,  113,   98,  109,  110,
313  102,  244,  317,   82,  112,   19,   81,  114,  115,   33,
314  116,   25,   26,  103,  118,   44,   45,   46,   47,   48,
315  119,   74,   30,   55,   56,   57,   58,   59,   60,   61,
316   62,   63,   64,   38,   65,   66,  189,   67,   68,   69,
317   70,   71,  104,  189,  105,   39,   12,  190,   96,  119,
318  139,   53,   54,  175,   73,   97,   36,   72,  119,  188,
319  119,   73,   75,   31,  206,   41,   73,   74,   98,   75,
320   79,  183,   79,  178,   75,   78,  245,   73,   79,  191,
321   79,  101,  236,   79,   81,   75,   81,  179,  237,  118,
322   74,  199,   81,  304,   81,  246,  247,   81,  118,  307,
323  118,  126,  104,  127,  169,  117,  169,  208,  208,  106,
324  208,  208,  127,  120,  127,   79,  121,   79,  121,  234,
325  122,  120,  120,  111,  120,  121,  224,  121,  224,   81,
326   79,   81,  240,  214,  215,  216,  217,  275,  241,  276,
327  114,  224,  256,   79,   81,  218,  178,  168,   79,  168,
328  123,  168,  128,   78,  199,   78,   78,   81,   52,  224,
329  124,   78,   81,   78,  140,  140,   78,  125,  140,  140,
330  129,  140,  251,  140,  325,  140,  140,  130,  252,  178,
331  131,  122,    1,    2,    3,    4,    5,    6,    7,    8,
332  122,  132,  122,  179,  101,  104,  191,   79,   78,  133,
333   78,  229,  126,  127,  221,  141,  141,  106,  294,  141,
334  141,   81,  141,   78,  141,  134,  141,  141,  135,  123,
335  163,  167,  136,  124,  169,  170,   78,  137,  123,  174,
336  123,   78,  124,  184,  124,  187,  311,   79,  214,  215,
337  216,  217,  214,  215,  216,  217,  253,  318,  294,  138,
338  222,   81,  254,  210,  239,  214,  215,  216,  217,  115,
339  140,  328,   78,  311,  126,   70,  318,  242,  115,  205,
340  115,   70,  141,  126,  219,  126,  142,  143,   58,  144,
341   78,  145,  146,  196,  148,  235,  197,  149,  198,   67,
342   68,   69,   70,  238,  156,  156,  156,  156,  156,  156,
343  156,  229,  156,  250,  156,  259,  156,  156,  190,   72,
344  214,  215,  216,  217,  264,  265,  266,  267,   73,  268,
345   78,  269,  299,    1,   20,  115,   75,  138,  125,  138,
346   20,   20,  182,  138,  115,  277,  115,  125,  255,  125,
347  270,  282,  182,  182,  182,  182,  182,  213,  271,  121,
348  288,  122,  182,  182,  182,  182,  182,  182,  182,  182,
349  182,  182,  272,  182,  182,  274,  182,  182,  182,  182,
350  182,  149,  149,  149,  149,  149,  149,  182,  149,  137,
351  149,  137,  149,  149,  273,  137,  182,   32,    2,  279,
352   20,   20,   20,   20,   20,  182,  182,   32,   32,   32,
353   32,   32,  281,  182,  246,  247,  283,   32,   32,   32,
354   32,   32,   32,   32,   32,   32,   32,  286,   32,   32,
355  284,   32,   32,   32,   32,   32,  252,  216,  217,  289,
356  157,  157,  157,  157,  157,  157,  157,  297,  157,   13,
357  157,   32,  157,  157,  214,  215,  216,  217,  316,  291,
358   32,   32,  298,  220,  252,  301,   56,   56,   32,  129,
359  129,  129,  129,  129,  129,  129,  129,  129,  129,  300,
360  129,  129,  323,  129,  129,  129,  129,  129,  324,  241,
361  129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
362  314,  129,  129,  129,  129,  129,  129,  129,  129,   57,
363   57,  308,  129,  129,  214,  215,  216,  217,  207,  209,
364  129,  211,  212,  302,  129,    1,    2,    3,    4,    5,
365    6,    7,    8,  129,  129,   20,   21,   22,   23,   24,
366  315,  129,  128,  128,  128,  128,  128,  128,  128,  128,
367  128,  128,  321,  128,  128,  322,  128,  128,  128,  128,
368  128,  142,  143,   58,  144,  329,  145,  146,  147,  148,
369  332,   65,  149,  182,  150,  156,  128,  214,  215,  216,
370  217,  151,  152,   60,  261,  128,  128,  153,   59,  176,
371  326,  331,   67,  128,  154,  155,  327,  241,   67,   68,
372  101,  104,  156,   73,   74,   68,  165,  142,  143,   58,
373  144,   75,  145,  146,  147,  148,  106,   65,  149,  136,
374  150,  135,  106,  214,  215,  216,  217,  151,  152,  143,
375  143,  287,  143,  153,  143,  164,  143,  143,  285,   37,
376  154,  155,  306,   43,   18,  303,  101,  104,  156,   73,
377   74,  278,  305,  142,  143,   58,  144,   75,  145,  146,
378  147,  148,  290,   65,  149,  280,  150,   44,   45,   46,
379   47,   48,   89,  151,  152,  171,  258,  310,  333,  153,
380   95,   20,   20,   20,   20,   20,  154,  155,  330,  292,
381   42,   32,  101,  104,  156,   73,   74,    0,    0,  142,
382  143,   58,  144,   75,  145,  146,  196,  148,    0,  197,
383  149,  198,   67,   68,   69,   70,    0,    0,    0,    0,
384  142,  143,   58,  144,  257,  145,  146,  147,  148,  293,
385   65,  149,   72,  150,    0,    0,    0,    0,    0,    0,
386    0,   73,    0,    0,    0,  309,    0,    0,    0,   75,
387    0,    0,    0,   72,    0,    0,    0,    0,  142,  143,
388   58,  144,   73,  145,  146,  147,  148,    0,   65,  149,
389   75,  150,  142,  143,   58,  144,    0,  145,  146,  147,
390  148,    0,   65,  149,    0,  150,  176,    0,    0,    0,
391    0,  177,    0,    0,    0,    0,    0,  223,    0,    0,
392   73,    0,    0,    0,    0,   72,    0,    0,   75,    0,
393  142,  143,   58,  144,   73,  145,  146,  147,  148,    0,
394   65,  149,   75,  150,    0,    0,  142,  143,   58,  144,
395    0,  145,  146,  147,  148,  225,   65,  149,    0,  150,
396    0,    0,    0,   72,    0,    0,    0,    0,    0,    0,
397    0,  243,   73,    0,    0,    0,    0,    0,    0,   72,
398   75,    0,    0,    0,  142,  143,   58,  144,   73,  145,
399  146,  147,  148,    0,   65,  149,   75,  150,    0,    0,
400    0,    0,    0,    0,    0,  142,  143,   58,  144,  260,
401  145,  146,  147,  148,  293,   65,  149,   72,  150,    0,
402    0,    0,  142,  143,   58,  144,   73,  145,  146,  147,
403  148,    0,   65,  226,   75,  150,    0,    0,   72,    0,
404    0,    0,    0,  142,  143,   58,  144,   73,  145,  146,
405  147,  148,    0,   65,  149,   75,  150,    0,    0,    0,
406    0,    0,  104,    0,  227,    0,    0,    0,    0,    0,
407    0,    0,   75,    0,    0,    0,   72,    0,    0,    0,
408    0,  142,  143,   58,  144,   73,  145,  146,  147,  148,
409    0,   65,  149,   75,  150,   19,   20,   21,   22,   23,
410   24,   25,   26,   20,   20,   20,   20,   20,   20,   20,
411   20,   19,   19,   19,   19,   19,   19,   19,   19,    0,
412    0,    0,    0,   73,    0,    0,    0,    0,    0,    0,
413    0,   75,
414};
415static const short yycheck[] = {                         50,
416   57,  134,   50,   13,   61,  176,   63,   55,   59,   60,
417   56,  189,   45,   50,   62,    1,   50,   63,   64,   60,
418   66,    7,    8,   32,   72,   10,   11,   12,   13,   14,
419   76,   64,   42,   20,   21,   22,   23,   24,   25,   26,
420   27,   28,   29,   45,   31,   32,   45,   34,   35,   36,
421   37,   38,   61,   45,   63,   45,    0,   49,   53,   40,
422  117,   46,   60,  130,   63,   53,   28,   54,   49,  136,
423   51,   63,   71,   17,  141,   37,   63,   64,  126,   71,
424  128,  132,  130,  131,   71,   50,   42,   63,  136,  137,
425  138,   60,   46,  141,  128,   71,  130,  131,   52,   40,
426   64,  138,  136,  274,  138,   61,   62,  141,   49,  287,
427   51,   47,   61,   40,   50,   28,   52,  151,  152,  176,
428  154,  155,   49,   40,   51,  173,   40,  175,   49,  177,
429   51,   40,   49,   60,   51,   49,  173,   51,  175,  173,
430  188,  175,   46,   41,   42,   43,   44,   50,   52,   52,
431  196,  188,  198,  201,  188,   53,   47,  122,  206,   50,
432   53,   52,   45,  128,  201,  130,  131,  201,   46,  206,
433   40,  136,  206,  138,   41,   42,  141,   40,   45,   46,
434   41,   48,   46,   50,  317,   52,   53,   45,   52,  237,
435   45,   40,   70,   71,   72,   73,   74,   75,   76,   77,
436   49,   40,   51,  237,   60,   61,  254,  255,  173,   40,
437  175,  176,   52,   53,   49,   41,   42,  274,  255,   45,
438   46,  255,   48,  188,   50,   45,   52,   53,   40,   40,
439  120,  121,   45,   40,  124,  125,  201,   45,   49,  129,
440   51,  206,   49,  133,   51,  135,  297,  295,   41,   42,
441   43,   44,   41,   42,   43,   44,   46,  308,  295,   45,
442   53,  295,   52,  153,   53,   41,   42,   43,   44,   40,
443   53,  322,  237,  324,   40,   46,  327,   53,   49,   40,
444   51,   52,   45,   49,   40,   51,   21,   22,   23,   24,
445  255,   26,   27,   28,   29,   40,   31,   32,   33,   34,
446   35,   36,   37,   53,   40,   41,   42,   43,   44,   45,
447   46,  276,   48,   40,   50,  205,   52,   53,   49,   54,
448   41,   42,   43,   44,  214,  215,  216,  217,   63,  219,
449  295,  221,   53,    0,    1,   40,   71,   46,   40,   48,
450    7,    8,    0,   52,   49,  235,   51,   49,   45,   51,
451   53,  241,   10,   11,   12,   13,   14,   47,   53,   49,
452  250,   51,   20,   21,   22,   23,   24,   25,   26,   27,
453   28,   29,   47,   31,   32,   52,   34,   35,   36,   37,
454   38,   41,   42,   43,   44,   45,   46,   45,   48,   46,
455   50,   48,   52,   53,   50,   52,   54,    0,    0,   53,
456    2,    3,    4,    5,    6,   63,   64,   10,   11,   12,
457   13,   14,   53,   71,   61,   62,   53,   20,   21,   22,
458   23,   24,   25,   26,   27,   28,   29,   52,   31,   32,
459   46,   34,   35,   36,   37,   38,   52,   43,   44,   53,
460   40,   41,   42,   43,   44,   45,   46,   45,   48,    0,
461   50,   54,   52,   53,   41,   42,   43,   44,   46,   53,
462   63,   64,   53,   50,   52,   48,   52,   53,   71,   20,
463   21,   22,   23,   24,   25,   26,   27,   28,   29,   53,
464   31,   32,   46,   34,   35,   36,   37,   38,   52,   52,
465   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
466   48,   31,   32,   54,   34,   35,   36,   37,   38,   52,
467   53,   45,   63,   64,   41,   42,   43,   44,  151,  152,
468   71,  154,  155,   50,   54,   70,   71,   72,   73,   74,
469   75,   76,   77,   63,   64,    2,    3,    4,    5,    6,
470   50,   71,   20,   21,   22,   23,   24,   25,   26,   27,
471   28,   29,   53,   31,   32,   40,   34,   35,   36,   37,
472   38,   21,   22,   23,   24,   53,   26,   27,   28,   29,
473   53,   31,   32,   45,   34,   40,   54,   41,   42,   43,
474   44,   41,   42,   45,   48,   63,   64,   47,   45,   49,
475   46,   46,   46,   71,   54,   55,   52,   52,   52,   46,
476   60,   61,   62,   63,   64,   52,   50,   21,   22,   23,
477   24,   71,   26,   27,   28,   29,   46,   31,   32,   48,
478   34,   48,   52,   41,   42,   43,   44,   41,   42,   45,
479   46,   45,   48,   47,   50,   50,   52,   53,  245,   29,
480   54,   55,  286,   39,   11,  272,   60,   61,   62,   63,
481   64,  235,  276,   21,   22,   23,   24,   71,   26,   27,
482   28,   29,  252,   31,   32,  237,   34,   10,   11,   12,
483   13,   14,   50,   41,   42,  126,  201,  295,  327,   47,
484   50,    2,    3,    4,    5,    6,   54,   55,  324,  254,
485   38,   17,   60,   61,   62,   63,   64,   -1,   -1,   21,
486   22,   23,   24,   71,   26,   27,   28,   29,   -1,   31,
487   32,   33,   34,   35,   36,   37,   -1,   -1,   -1,   -1,
488   21,   22,   23,   24,   46,   26,   27,   28,   29,   30,
489   31,   32,   54,   34,   -1,   -1,   -1,   -1,   -1,   -1,
490   -1,   63,   -1,   -1,   -1,   46,   -1,   -1,   -1,   71,
491   -1,   -1,   -1,   54,   -1,   -1,   -1,   -1,   21,   22,
492   23,   24,   63,   26,   27,   28,   29,   -1,   31,   32,
493   71,   34,   21,   22,   23,   24,   -1,   26,   27,   28,
494   29,   -1,   31,   32,   -1,   34,   49,   -1,   -1,   -1,
495   -1,   54,   -1,   -1,   -1,   -1,   -1,   46,   -1,   -1,
496   63,   -1,   -1,   -1,   -1,   54,   -1,   -1,   71,   -1,
497   21,   22,   23,   24,   63,   26,   27,   28,   29,   -1,
498   31,   32,   71,   34,   -1,   -1,   21,   22,   23,   24,
499   -1,   26,   27,   28,   29,   46,   31,   32,   -1,   34,
500   -1,   -1,   -1,   54,   -1,   -1,   -1,   -1,   -1,   -1,
501   -1,   46,   63,   -1,   -1,   -1,   -1,   -1,   -1,   54,
502   71,   -1,   -1,   -1,   21,   22,   23,   24,   63,   26,
503   27,   28,   29,   -1,   31,   32,   71,   34,   -1,   -1,
504   -1,   -1,   -1,   -1,   -1,   21,   22,   23,   24,   46,
505   26,   27,   28,   29,   30,   31,   32,   54,   34,   -1,
506   -1,   -1,   21,   22,   23,   24,   63,   26,   27,   28,
507   29,   -1,   31,   32,   71,   34,   -1,   -1,   54,   -1,
508   -1,   -1,   -1,   21,   22,   23,   24,   63,   26,   27,
509   28,   29,   -1,   31,   32,   71,   34,   -1,   -1,   -1,
510   -1,   -1,   61,   -1,   63,   -1,   -1,   -1,   -1,   -1,
511   -1,   -1,   71,   -1,   -1,   -1,   54,   -1,   -1,   -1,
512   -1,   21,   22,   23,   24,   63,   26,   27,   28,   29,
513   -1,   31,   32,   71,   34,    1,    2,    3,    4,    5,
514    6,    7,    8,    1,    2,    3,    4,    5,    6,    7,
515    8,    1,    2,    3,    4,    5,    6,    7,    8,   -1,
516   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,
517   -1,   71,
518};
519#define YYFINAL 9
520#ifndef YYDEBUG
521#define YYDEBUG 0
522#endif
523#define YYMAXTOKEN 255
524#if YYDEBUG
525static const char *yyname[] = {
526
527"end-of-file","XKB_KEYMAP","XKB_KEYCODES","XKB_TYPES","XKB_SYMBOLS",
528"XKB_COMPATMAP","XKB_GEOMETRY","XKB_SEMANTICS","XKB_LAYOUT",0,"INCLUDE",
529"OVERRIDE","AUGMENT","REPLACE","ALTERNATE",0,0,0,0,0,"VIRTUAL_MODS","TYPE",
530"INTERPRET","ACTION_TOK","KEY","ALIAS","GROUP","MODIFIER_MAP","INDICATOR",
531"SHAPE","KEYS","ROW","SECTION","OVERLAY","TEXT","OUTLINE","SOLID","LOGO",
532"VIRTUAL",0,"EQUALS","PLUS","MINUS","DIVIDE","TIMES","OBRACE","CBRACE","OPAREN",
533"CPAREN","OBRACKET","CBRACKET","DOT","COMMA","SEMI","EXCLAM","INVERT",0,0,0,0,
534"STRING","INTEGER","FLOAT","IDENT","KEYNAME",0,0,0,0,0,"PARTIAL","DEFAULT",
535"HIDDEN","ALPHANUMERIC_KEYS","MODIFIER_KEYS","KEYPAD_KEYS","FUNCTION_KEYS",
536"ALTERNATE_GROUP",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5370,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5380,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"ERROR_TOK",
541};
542static const char *yyrule[] = {
543"$accept : XkbFile",
544"XkbFile : XkbCompMapList",
545"XkbFile : XkbMapConfigList",
546"XkbFile : XkbConfig",
547"XkbCompMapList : XkbCompMapList XkbCompositeMap",
548"XkbCompMapList : XkbCompositeMap",
549"XkbCompositeMap : OptFlags XkbCompositeType OptMapName OBRACE XkbMapConfigList CBRACE SEMI",
550"XkbCompositeType : XKB_KEYMAP",
551"XkbCompositeType : XKB_SEMANTICS",
552"XkbCompositeType : XKB_LAYOUT",
553"XkbMapConfigList : XkbMapConfigList XkbMapConfig",
554"XkbMapConfigList : XkbMapConfig",
555"XkbMapConfig : OptFlags FileType OptMapName OBRACE DeclList CBRACE SEMI",
556"XkbConfig : OptFlags FileType OptMapName DeclList",
557"FileType : XKB_KEYCODES",
558"FileType : XKB_TYPES",
559"FileType : XKB_COMPATMAP",
560"FileType : XKB_SYMBOLS",
561"FileType : XKB_GEOMETRY",
562"OptFlags : Flags",
563"OptFlags :",
564"Flags : Flags Flag",
565"Flags : Flag",
566"Flag : PARTIAL",
567"Flag : DEFAULT",
568"Flag : HIDDEN",
569"Flag : ALPHANUMERIC_KEYS",
570"Flag : MODIFIER_KEYS",
571"Flag : KEYPAD_KEYS",
572"Flag : FUNCTION_KEYS",
573"Flag : ALTERNATE_GROUP",
574"DeclList : DeclList Decl",
575"DeclList :",
576"Decl : OptMergeMode VarDecl",
577"Decl : OptMergeMode VModDecl",
578"Decl : OptMergeMode InterpretDecl",
579"Decl : OptMergeMode KeyNameDecl",
580"Decl : OptMergeMode KeyAliasDecl",
581"Decl : OptMergeMode KeyTypeDecl",
582"Decl : OptMergeMode SymbolsDecl",
583"Decl : OptMergeMode ModMapDecl",
584"Decl : OptMergeMode GroupCompatDecl",
585"Decl : OptMergeMode IndicatorMapDecl",
586"Decl : OptMergeMode IndicatorNameDecl",
587"Decl : OptMergeMode ShapeDecl",
588"Decl : OptMergeMode SectionDecl",
589"Decl : OptMergeMode DoodadDecl",
590"Decl : MergeMode STRING",
591"VarDecl : Lhs EQUALS Expr SEMI",
592"VarDecl : Ident SEMI",
593"VarDecl : EXCLAM Ident SEMI",
594"KeyNameDecl : KeyName EQUALS Expr SEMI",
595"KeyAliasDecl : ALIAS KeyName EQUALS KeyName SEMI",
596"VModDecl : VIRTUAL_MODS VModDefList SEMI",
597"VModDefList : VModDefList COMMA VModDef",
598"VModDefList : VModDef",
599"VModDef : Ident",
600"VModDef : Ident EQUALS Expr",
601"InterpretDecl : INTERPRET InterpretMatch OBRACE VarDeclList CBRACE SEMI",
602"InterpretMatch : KeySym PLUS Expr",
603"InterpretMatch : KeySym",
604"VarDeclList : VarDeclList VarDecl",
605"VarDeclList : VarDecl",
606"KeyTypeDecl : TYPE String OBRACE VarDeclList CBRACE SEMI",
607"SymbolsDecl : KEY KeyName OBRACE SymbolsBody CBRACE SEMI",
608"SymbolsBody : SymbolsBody COMMA SymbolsVarDecl",
609"SymbolsBody : SymbolsVarDecl",
610"SymbolsBody :",
611"SymbolsVarDecl : Lhs EQUALS Expr",
612"SymbolsVarDecl : Lhs EQUALS ArrayInit",
613"SymbolsVarDecl : Ident",
614"SymbolsVarDecl : EXCLAM Ident",
615"SymbolsVarDecl : ArrayInit",
616"ArrayInit : OBRACKET OptKeySymList CBRACKET",
617"ArrayInit : OBRACKET ActionList CBRACKET",
618"GroupCompatDecl : GROUP Integer EQUALS Expr SEMI",
619"ModMapDecl : MODIFIER_MAP Ident OBRACE ExprList CBRACE SEMI",
620"IndicatorMapDecl : INDICATOR String OBRACE VarDeclList CBRACE SEMI",
621"IndicatorNameDecl : INDICATOR Integer EQUALS Expr SEMI",
622"IndicatorNameDecl : VIRTUAL INDICATOR Integer EQUALS Expr SEMI",
623"ShapeDecl : SHAPE String OBRACE OutlineList CBRACE SEMI",
624"ShapeDecl : SHAPE String OBRACE CoordList CBRACE SEMI",
625"SectionDecl : SECTION String OBRACE SectionBody CBRACE SEMI",
626"SectionBody : SectionBody SectionBodyItem",
627"SectionBody : SectionBodyItem",
628"SectionBodyItem : ROW OBRACE RowBody CBRACE SEMI",
629"SectionBodyItem : VarDecl",
630"SectionBodyItem : DoodadDecl",
631"SectionBodyItem : IndicatorMapDecl",
632"SectionBodyItem : OverlayDecl",
633"RowBody : RowBody RowBodyItem",
634"RowBody : RowBodyItem",
635"RowBodyItem : KEYS OBRACE Keys CBRACE SEMI",
636"RowBodyItem : VarDecl",
637"Keys : Keys COMMA Key",
638"Keys : Key",
639"Key : KeyName",
640"Key : OBRACE ExprList CBRACE",
641"OverlayDecl : OVERLAY String OBRACE OverlayKeyList CBRACE SEMI",
642"OverlayKeyList : OverlayKeyList COMMA OverlayKey",
643"OverlayKeyList : OverlayKey",
644"OverlayKey : KeyName EQUALS KeyName",
645"OutlineList : OutlineList COMMA OutlineInList",
646"OutlineList : OutlineInList",
647"OutlineInList : OBRACE CoordList CBRACE",
648"OutlineInList : Ident EQUALS OBRACE CoordList CBRACE",
649"OutlineInList : Ident EQUALS Expr",
650"CoordList : CoordList COMMA Coord",
651"CoordList : Coord",
652"Coord : OBRACKET SignedNumber COMMA SignedNumber CBRACKET",
653"DoodadDecl : DoodadType String OBRACE VarDeclList CBRACE SEMI",
654"DoodadType : TEXT",
655"DoodadType : OUTLINE",
656"DoodadType : SOLID",
657"DoodadType : LOGO",
658"FieldSpec : Ident",
659"FieldSpec : Element",
660"Element : ACTION_TOK",
661"Element : INTERPRET",
662"Element : TYPE",
663"Element : KEY",
664"Element : GROUP",
665"Element : MODIFIER_MAP",
666"Element : INDICATOR",
667"Element : SHAPE",
668"Element : ROW",
669"Element : SECTION",
670"Element : TEXT",
671"OptMergeMode : MergeMode",
672"OptMergeMode :",
673"MergeMode : INCLUDE",
674"MergeMode : AUGMENT",
675"MergeMode : OVERRIDE",
676"MergeMode : REPLACE",
677"MergeMode : ALTERNATE",
678"OptExprList : ExprList",
679"OptExprList :",
680"ExprList : ExprList COMMA Expr",
681"ExprList : Expr",
682"Expr : Expr DIVIDE Expr",
683"Expr : Expr PLUS Expr",
684"Expr : Expr MINUS Expr",
685"Expr : Expr TIMES Expr",
686"Expr : Lhs EQUALS Expr",
687"Expr : Term",
688"Term : MINUS Term",
689"Term : PLUS Term",
690"Term : EXCLAM Term",
691"Term : INVERT Term",
692"Term : Lhs",
693"Term : FieldSpec OPAREN OptExprList CPAREN",
694"Term : Terminal",
695"Term : OPAREN Expr CPAREN",
696"ActionList : ActionList COMMA Action",
697"ActionList : Action",
698"Action : FieldSpec OPAREN OptExprList CPAREN",
699"Lhs : FieldSpec",
700"Lhs : FieldSpec DOT FieldSpec",
701"Lhs : FieldSpec OBRACKET Expr CBRACKET",
702"Lhs : FieldSpec DOT FieldSpec OBRACKET Expr CBRACKET",
703"Terminal : String",
704"Terminal : Integer",
705"Terminal : Float",
706"Terminal : KeyName",
707"OptKeySymList : KeySymList",
708"OptKeySymList :",
709"KeySymList : KeySymList COMMA KeySym",
710"KeySymList : KeySym",
711"KeySym : IDENT",
712"KeySym : SECTION",
713"KeySym : Integer",
714"SignedNumber : MINUS Number",
715"SignedNumber : Number",
716"Number : FLOAT",
717"Number : INTEGER",
718"Float : FLOAT",
719"Integer : INTEGER",
720"KeyName : KEYNAME",
721"Ident : IDENT",
722"Ident : DEFAULT",
723"String : STRING",
724"OptMapName : MapName",
725"OptMapName :",
726"MapName : STRING",
727
728};
729#endif
730#if YYDEBUG
731#include <stdio.h>
732#endif
733
734/* define the initial stack-sizes */
735#ifdef YYSTACKSIZE
736#undef YYMAXDEPTH
737#define YYMAXDEPTH  YYSTACKSIZE
738#else
739#ifdef YYMAXDEPTH
740#define YYSTACKSIZE YYMAXDEPTH
741#else
742#define YYSTACKSIZE 500
743#define YYMAXDEPTH  500
744#endif
745#endif
746
747#define YYINITSTACKSIZE 500
748
749int      yydebug;
750int      yynerrs;
751
752typedef struct {
753    unsigned stacksize;
754    short    *s_base;
755    short    *s_mark;
756    short    *s_last;
757    YYSTYPE  *l_base;
758    YYSTYPE  *l_mark;
759} YYSTACKDATA;
760
761#define YYPURE 0
762
763int      yyerrflag;
764int      yychar;
765YYSTYPE  yyval;
766YYSTYPE  yylval;
767
768/* variables for the parser stack */
769static YYSTACKDATA yystack;
770#line 764 "xkbparse.y"
771void
772yyerror(const char *s)
773{
774    if (warningLevel>0) {
775	(void)fprintf(stderr,"%s: line %d of %s\n",s,lineNum,
776					(scanFile?scanFile:"(unknown)"));
777	if ((warningLevel>3))
778	    (void)fprintf(stderr,"last scanned symbol is: %s\n",scanBuf);
779    }
780    return;
781}
782
783
784int
785yywrap(void)
786{
787   return 1;
788}
789
790#line 790 "xkbparse.c"
791/* allocate initial stack or double stack size, up to YYMAXDEPTH */
792static int yygrowstack(YYSTACKDATA *data)
793{
794    int i;
795    unsigned newsize;
796    short *newss;
797    YYSTYPE *newvs;
798
799    if ((newsize = data->stacksize) == 0)
800        newsize = YYINITSTACKSIZE;
801    else if (newsize >= YYMAXDEPTH)
802        return -1;
803    else if ((newsize *= 2) > YYMAXDEPTH)
804        newsize = YYMAXDEPTH;
805
806    i = data->s_mark - data->s_base;
807    newss = (data->s_base != 0)
808          ? (short *)realloc(data->s_base, newsize * sizeof(*newss))
809          : (short *)malloc(newsize * sizeof(*newss));
810    if (newss == 0)
811        return -1;
812
813    data->s_base  = newss;
814    data->s_mark = newss + i;
815
816    newvs = (data->l_base != 0)
817          ? (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs))
818          : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
819    if (newvs == 0)
820        return -1;
821
822    data->l_base = newvs;
823    data->l_mark = newvs + i;
824
825    data->stacksize = newsize;
826    data->s_last = data->s_base + newsize - 1;
827    return 0;
828}
829
830#if YYPURE || defined(YY_NO_LEAKS)
831static void yyfreestack(YYSTACKDATA *data)
832{
833    free(data->s_base);
834    free(data->l_base);
835    memset(data, 0, sizeof(*data));
836}
837#else
838#define yyfreestack(data) /* nothing */
839#endif
840
841#define YYABORT  goto yyabort
842#define YYREJECT goto yyabort
843#define YYACCEPT goto yyaccept
844#define YYERROR  goto yyerrlab
845
846int
847YYPARSE_DECL()
848{
849    int yym, yyn, yystate;
850#if YYDEBUG
851    const char *yys;
852
853    if ((yys = getenv("YYDEBUG")) != 0)
854    {
855        yyn = *yys;
856        if (yyn >= '0' && yyn <= '9')
857            yydebug = yyn - '0';
858    }
859#endif
860
861    yynerrs = 0;
862    yyerrflag = 0;
863    yychar = YYEMPTY;
864    yystate = 0;
865
866#if YYPURE
867    memset(&yystack, 0, sizeof(yystack));
868#endif
869
870    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
871    yystack.s_mark = yystack.s_base;
872    yystack.l_mark = yystack.l_base;
873    yystate = 0;
874    *yystack.s_mark = 0;
875
876yyloop:
877    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
878    if (yychar < 0)
879    {
880        if ((yychar = yylex()) < 0) yychar = 0;
881#if YYDEBUG
882        if (yydebug)
883        {
884            yys = 0;
885            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
886            if (!yys) yys = "illegal-symbol";
887            printf("%sdebug: state %d, reading %d (%s)\n",
888                    YYPREFIX, yystate, yychar, yys);
889        }
890#endif
891    }
892    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
893            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
894    {
895#if YYDEBUG
896        if (yydebug)
897            printf("%sdebug: state %d, shifting to state %d\n",
898                    YYPREFIX, yystate, yytable[yyn]);
899#endif
900        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
901        {
902            goto yyoverflow;
903        }
904        yystate = yytable[yyn];
905        *++yystack.s_mark = yytable[yyn];
906        *++yystack.l_mark = yylval;
907        yychar = YYEMPTY;
908        if (yyerrflag > 0)  --yyerrflag;
909        goto yyloop;
910    }
911    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
912            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
913    {
914        yyn = yytable[yyn];
915        goto yyreduce;
916    }
917    if (yyerrflag) goto yyinrecovery;
918
919    yyerror("syntax error");
920
921    goto yyerrlab;
922
923yyerrlab:
924    ++yynerrs;
925
926yyinrecovery:
927    if (yyerrflag < 3)
928    {
929        yyerrflag = 3;
930        for (;;)
931        {
932            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
933                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
934            {
935#if YYDEBUG
936                if (yydebug)
937                    printf("%sdebug: state %d, error recovery shifting\
938 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
939#endif
940                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
941                {
942                    goto yyoverflow;
943                }
944                yystate = yytable[yyn];
945                *++yystack.s_mark = yytable[yyn];
946                *++yystack.l_mark = yylval;
947                goto yyloop;
948            }
949            else
950            {
951#if YYDEBUG
952                if (yydebug)
953                    printf("%sdebug: error recovery discarding state %d\n",
954                            YYPREFIX, *yystack.s_mark);
955#endif
956                if (yystack.s_mark <= yystack.s_base) goto yyabort;
957                --yystack.s_mark;
958                --yystack.l_mark;
959            }
960        }
961    }
962    else
963    {
964        if (yychar == 0) goto yyabort;
965#if YYDEBUG
966        if (yydebug)
967        {
968            yys = 0;
969            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
970            if (!yys) yys = "illegal-symbol";
971            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
972                    YYPREFIX, yystate, yychar, yys);
973        }
974#endif
975        yychar = YYEMPTY;
976        goto yyloop;
977    }
978
979yyreduce:
980#if YYDEBUG
981    if (yydebug)
982        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
983                YYPREFIX, yystate, yyn, yyrule[yyn]);
984#endif
985    yym = yylen[yyn];
986    if (yym)
987        yyval = yystack.l_mark[1-yym];
988    else
989        memset(&yyval, 0, sizeof yyval);
990    switch (yyn)
991    {
992case 1:
993#line 169 "xkbparse.y"
994	{ yyval.file= rtrnValue= yystack.l_mark[0].file; }
995break;
996case 2:
997#line 171 "xkbparse.y"
998	{ yyval.file= rtrnValue= yystack.l_mark[0].file;  }
999break;
1000case 3:
1001#line 173 "xkbparse.y"
1002	{ yyval.file= rtrnValue= yystack.l_mark[0].file; }
1003break;
1004case 4:
1005#line 177 "xkbparse.y"
1006	{ yyval.file= (XkbFile *)AppendStmt(&yystack.l_mark[-1].file->common,&yystack.l_mark[0].file->common); }
1007break;
1008case 5:
1009#line 179 "xkbparse.y"
1010	{ yyval.file= yystack.l_mark[0].file; }
1011break;
1012case 6:
1013#line 185 "xkbparse.y"
1014	{ yyval.file= CreateXKBFile(yystack.l_mark[-5].uval,yystack.l_mark[-4].str,&yystack.l_mark[-2].file->common,yystack.l_mark[-6].uval); }
1015break;
1016case 7:
1017#line 188 "xkbparse.y"
1018	{ yyval.uval= XkmKeymapFile; }
1019break;
1020case 8:
1021#line 189 "xkbparse.y"
1022	{ yyval.uval= XkmSemanticsFile; }
1023break;
1024case 9:
1025#line 190 "xkbparse.y"
1026	{ yyval.uval= XkmLayoutFile; }
1027break;
1028case 10:
1029#line 194 "xkbparse.y"
1030	{ yyval.file= (XkbFile *)AppendStmt(&yystack.l_mark[-1].file->common,&yystack.l_mark[0].file->common); }
1031break;
1032case 11:
1033#line 196 "xkbparse.y"
1034	{ yyval.file= yystack.l_mark[0].file; }
1035break;
1036case 12:
1037#line 202 "xkbparse.y"
1038	{ yyval.file= CreateXKBFile(yystack.l_mark[-5].uval,yystack.l_mark[-4].str,yystack.l_mark[-2].any,yystack.l_mark[-6].uval); }
1039break;
1040case 13:
1041#line 206 "xkbparse.y"
1042	{ yyval.file= CreateXKBFile(yystack.l_mark[-2].uval,yystack.l_mark[-1].str,yystack.l_mark[0].any,yystack.l_mark[-3].uval); }
1043break;
1044case 14:
1045#line 210 "xkbparse.y"
1046	{ yyval.uval= XkmKeyNamesIndex; }
1047break;
1048case 15:
1049#line 211 "xkbparse.y"
1050	{ yyval.uval= XkmTypesIndex; }
1051break;
1052case 16:
1053#line 212 "xkbparse.y"
1054	{ yyval.uval= XkmCompatMapIndex; }
1055break;
1056case 17:
1057#line 213 "xkbparse.y"
1058	{ yyval.uval= XkmSymbolsIndex; }
1059break;
1060case 18:
1061#line 214 "xkbparse.y"
1062	{ yyval.uval= XkmGeometryIndex; }
1063break;
1064case 19:
1065#line 217 "xkbparse.y"
1066	{ yyval.uval= yystack.l_mark[0].uval; }
1067break;
1068case 20:
1069#line 218 "xkbparse.y"
1070	{ yyval.uval= 0; }
1071break;
1072case 21:
1073#line 221 "xkbparse.y"
1074	{ yyval.uval= ((yystack.l_mark[-1].uval)|(yystack.l_mark[0].uval)); }
1075break;
1076case 22:
1077#line 222 "xkbparse.y"
1078	{ yyval.uval= yystack.l_mark[0].uval; }
1079break;
1080case 23:
1081#line 225 "xkbparse.y"
1082	{ yyval.uval= XkbLC_Partial; }
1083break;
1084case 24:
1085#line 226 "xkbparse.y"
1086	{ yyval.uval= XkbLC_Default; }
1087break;
1088case 25:
1089#line 227 "xkbparse.y"
1090	{ yyval.uval= XkbLC_Hidden; }
1091break;
1092case 26:
1093#line 228 "xkbparse.y"
1094	{ yyval.uval= XkbLC_AlphanumericKeys; }
1095break;
1096case 27:
1097#line 229 "xkbparse.y"
1098	{ yyval.uval= XkbLC_ModifierKeys; }
1099break;
1100case 28:
1101#line 230 "xkbparse.y"
1102	{ yyval.uval= XkbLC_KeypadKeys; }
1103break;
1104case 29:
1105#line 231 "xkbparse.y"
1106	{ yyval.uval= XkbLC_FunctionKeys; }
1107break;
1108case 30:
1109#line 232 "xkbparse.y"
1110	{ yyval.uval= XkbLC_AlternateGroup; }
1111break;
1112case 31:
1113#line 236 "xkbparse.y"
1114	{ yyval.any= AppendStmt(yystack.l_mark[-1].any,yystack.l_mark[0].any); }
1115break;
1116case 32:
1117#line 237 "xkbparse.y"
1118	{ yyval.any= NULL; }
1119break;
1120case 33:
1121#line 241 "xkbparse.y"
1122	{
1123			    yystack.l_mark[0].var->merge= StmtSetMerge(&yystack.l_mark[0].var->common,yystack.l_mark[-1].uval);
1124			    yyval.any= &yystack.l_mark[0].var->common;
1125			}
1126break;
1127case 34:
1128#line 246 "xkbparse.y"
1129	{
1130			    yystack.l_mark[0].vmod->merge= StmtSetMerge(&yystack.l_mark[0].vmod->common,yystack.l_mark[-1].uval);
1131			    yyval.any= &yystack.l_mark[0].vmod->common;
1132			}
1133break;
1134case 35:
1135#line 251 "xkbparse.y"
1136	{
1137			    yystack.l_mark[0].interp->merge= StmtSetMerge(&yystack.l_mark[0].interp->common,yystack.l_mark[-1].uval);
1138			    yyval.any= &yystack.l_mark[0].interp->common;
1139			}
1140break;
1141case 36:
1142#line 256 "xkbparse.y"
1143	{
1144			    yystack.l_mark[0].keyName->merge= StmtSetMerge(&yystack.l_mark[0].keyName->common,yystack.l_mark[-1].uval);
1145			    yyval.any= &yystack.l_mark[0].keyName->common;
1146			}
1147break;
1148case 37:
1149#line 261 "xkbparse.y"
1150	{
1151			    yystack.l_mark[0].keyAlias->merge= StmtSetMerge(&yystack.l_mark[0].keyAlias->common,yystack.l_mark[-1].uval);
1152			    yyval.any= &yystack.l_mark[0].keyAlias->common;
1153			}
1154break;
1155case 38:
1156#line 266 "xkbparse.y"
1157	{
1158			    yystack.l_mark[0].keyType->merge= StmtSetMerge(&yystack.l_mark[0].keyType->common,yystack.l_mark[-1].uval);
1159			    yyval.any= &yystack.l_mark[0].keyType->common;
1160			}
1161break;
1162case 39:
1163#line 271 "xkbparse.y"
1164	{
1165			    yystack.l_mark[0].syms->merge= StmtSetMerge(&yystack.l_mark[0].syms->common,yystack.l_mark[-1].uval);
1166			    yyval.any= &yystack.l_mark[0].syms->common;
1167			}
1168break;
1169case 40:
1170#line 276 "xkbparse.y"
1171	{
1172			    yystack.l_mark[0].modMask->merge= StmtSetMerge(&yystack.l_mark[0].modMask->common,yystack.l_mark[-1].uval);
1173			    yyval.any= &yystack.l_mark[0].modMask->common;
1174			}
1175break;
1176case 41:
1177#line 281 "xkbparse.y"
1178	{
1179			    yystack.l_mark[0].groupCompat->merge= StmtSetMerge(&yystack.l_mark[0].groupCompat->common,yystack.l_mark[-1].uval);
1180			    yyval.any= &yystack.l_mark[0].groupCompat->common;
1181			}
1182break;
1183case 42:
1184#line 286 "xkbparse.y"
1185	{
1186			    yystack.l_mark[0].ledMap->merge= StmtSetMerge(&yystack.l_mark[0].ledMap->common,yystack.l_mark[-1].uval);
1187			    yyval.any= &yystack.l_mark[0].ledMap->common;
1188			}
1189break;
1190case 43:
1191#line 291 "xkbparse.y"
1192	{
1193			    yystack.l_mark[0].ledName->merge= StmtSetMerge(&yystack.l_mark[0].ledName->common,yystack.l_mark[-1].uval);
1194			    yyval.any= &yystack.l_mark[0].ledName->common;
1195			}
1196break;
1197case 44:
1198#line 296 "xkbparse.y"
1199	{
1200			    yystack.l_mark[0].shape->merge= StmtSetMerge(&yystack.l_mark[0].shape->common,yystack.l_mark[-1].uval);
1201			    yyval.any= &yystack.l_mark[0].shape->common;
1202			}
1203break;
1204case 45:
1205#line 301 "xkbparse.y"
1206	{
1207			    yystack.l_mark[0].section->merge= StmtSetMerge(&yystack.l_mark[0].section->common,yystack.l_mark[-1].uval);
1208			    yyval.any= &yystack.l_mark[0].section->common;
1209			}
1210break;
1211case 46:
1212#line 306 "xkbparse.y"
1213	{
1214			    yystack.l_mark[0].doodad->merge= StmtSetMerge(&yystack.l_mark[0].doodad->common,yystack.l_mark[-1].uval);
1215			    yyval.any= &yystack.l_mark[0].doodad->common;
1216			}
1217break;
1218case 47:
1219#line 311 "xkbparse.y"
1220	{
1221			    if (yystack.l_mark[-1].uval==MergeAltForm) {
1222				yyerror("cannot use 'alternate' to include other maps");
1223				yyval.any= &IncludeCreate(scanBuf,MergeDefault)->common;
1224			    }
1225			    else {
1226				yyval.any= &IncludeCreate(scanBuf,yystack.l_mark[-1].uval)->common;
1227			    }
1228                        }
1229break;
1230case 48:
1231#line 323 "xkbparse.y"
1232	{ yyval.var= VarCreate(yystack.l_mark[-3].expr,yystack.l_mark[-1].expr); }
1233break;
1234case 49:
1235#line 325 "xkbparse.y"
1236	{ yyval.var= BoolVarCreate(yystack.l_mark[-1].sval,1); }
1237break;
1238case 50:
1239#line 327 "xkbparse.y"
1240	{ yyval.var= BoolVarCreate(yystack.l_mark[-1].sval,0); }
1241break;
1242case 51:
1243#line 331 "xkbparse.y"
1244	{
1245			    KeycodeDef *def;
1246
1247			    def= KeycodeCreate(yystack.l_mark[-3].str,yystack.l_mark[-1].expr);
1248			    if (yystack.l_mark[-3].str)
1249				free(yystack.l_mark[-3].str);
1250			    yyval.keyName= def;
1251			}
1252break;
1253case 52:
1254#line 342 "xkbparse.y"
1255	{
1256			    KeyAliasDef	*def;
1257			    def= KeyAliasCreate(yystack.l_mark[-3].str,yystack.l_mark[-1].str);
1258			    if (yystack.l_mark[-3].str)	free(yystack.l_mark[-3].str);
1259			    if (yystack.l_mark[-1].str)	free(yystack.l_mark[-1].str);
1260			    yyval.keyAlias= def;
1261			}
1262break;
1263case 53:
1264#line 352 "xkbparse.y"
1265	{ yyval.vmod= yystack.l_mark[-1].vmod; }
1266break;
1267case 54:
1268#line 356 "xkbparse.y"
1269	{ yyval.vmod= (VModDef *)AppendStmt(&yystack.l_mark[-2].vmod->common,&yystack.l_mark[0].vmod->common); }
1270break;
1271case 55:
1272#line 358 "xkbparse.y"
1273	{ yyval.vmod= yystack.l_mark[0].vmod; }
1274break;
1275case 56:
1276#line 362 "xkbparse.y"
1277	{ yyval.vmod= VModCreate(yystack.l_mark[0].sval,NULL); }
1278break;
1279case 57:
1280#line 364 "xkbparse.y"
1281	{ yyval.vmod= VModCreate(yystack.l_mark[-2].sval,yystack.l_mark[0].expr); }
1282break;
1283case 58:
1284#line 370 "xkbparse.y"
1285	{
1286			    yystack.l_mark[-4].interp->def= yystack.l_mark[-2].var;
1287			    yyval.interp= yystack.l_mark[-4].interp;
1288			}
1289break;
1290case 59:
1291#line 377 "xkbparse.y"
1292	{ yyval.interp= InterpCreate(XStringToKeysym(yystack.l_mark[-2].str), yystack.l_mark[0].expr); }
1293break;
1294case 60:
1295#line 379 "xkbparse.y"
1296	{ yyval.interp= InterpCreate(XStringToKeysym(yystack.l_mark[0].str), NULL); }
1297break;
1298case 61:
1299#line 383 "xkbparse.y"
1300	{ yyval.var= (VarDef *)AppendStmt(&yystack.l_mark[-1].var->common,&yystack.l_mark[0].var->common); }
1301break;
1302case 62:
1303#line 385 "xkbparse.y"
1304	{ yyval.var= yystack.l_mark[0].var; }
1305break;
1306case 63:
1307#line 391 "xkbparse.y"
1308	{ yyval.keyType= KeyTypeCreate(yystack.l_mark[-4].sval,yystack.l_mark[-2].var); }
1309break;
1310case 64:
1311#line 397 "xkbparse.y"
1312	{ yyval.syms= SymbolsCreate(yystack.l_mark[-4].str,(ExprDef *)yystack.l_mark[-2].var); }
1313break;
1314case 65:
1315#line 401 "xkbparse.y"
1316	{ yyval.var= (VarDef *)AppendStmt(&yystack.l_mark[-2].var->common,&yystack.l_mark[0].var->common); }
1317break;
1318case 66:
1319#line 403 "xkbparse.y"
1320	{ yyval.var= yystack.l_mark[0].var; }
1321break;
1322case 67:
1323#line 404 "xkbparse.y"
1324	{ yyval.var= NULL; }
1325break;
1326case 68:
1327#line 408 "xkbparse.y"
1328	{ yyval.var= VarCreate(yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1329break;
1330case 69:
1331#line 410 "xkbparse.y"
1332	{ yyval.var= VarCreate(yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1333break;
1334case 70:
1335#line 412 "xkbparse.y"
1336	{ yyval.var= BoolVarCreate(yystack.l_mark[0].sval,1); }
1337break;
1338case 71:
1339#line 414 "xkbparse.y"
1340	{ yyval.var= BoolVarCreate(yystack.l_mark[0].sval,0); }
1341break;
1342case 72:
1343#line 416 "xkbparse.y"
1344	{ yyval.var= VarCreate(NULL,yystack.l_mark[0].expr); }
1345break;
1346case 73:
1347#line 420 "xkbparse.y"
1348	{ yyval.expr= yystack.l_mark[-1].expr; }
1349break;
1350case 74:
1351#line 422 "xkbparse.y"
1352	{ yyval.expr= ExprCreateUnary(ExprActionList,TypeAction,yystack.l_mark[-1].expr); }
1353break;
1354case 75:
1355#line 426 "xkbparse.y"
1356	{ yyval.groupCompat= GroupCompatCreate(yystack.l_mark[-3].ival,yystack.l_mark[-1].expr); }
1357break;
1358case 76:
1359#line 430 "xkbparse.y"
1360	{ yyval.modMask= ModMapCreate(yystack.l_mark[-4].sval,yystack.l_mark[-2].expr); }
1361break;
1362case 77:
1363#line 434 "xkbparse.y"
1364	{ yyval.ledMap= IndicatorMapCreate(yystack.l_mark[-4].sval,yystack.l_mark[-2].var); }
1365break;
1366case 78:
1367#line 438 "xkbparse.y"
1368	{ yyval.ledName= IndicatorNameCreate(yystack.l_mark[-3].ival,yystack.l_mark[-1].expr,False); }
1369break;
1370case 79:
1371#line 440 "xkbparse.y"
1372	{ yyval.ledName= IndicatorNameCreate(yystack.l_mark[-3].ival,yystack.l_mark[-1].expr,True); }
1373break;
1374case 80:
1375#line 444 "xkbparse.y"
1376	{ yyval.shape= ShapeDeclCreate(yystack.l_mark[-4].sval,(OutlineDef *)&yystack.l_mark[-2].outline->common); }
1377break;
1378case 81:
1379#line 446 "xkbparse.y"
1380	{
1381			    OutlineDef *outlines;
1382			    outlines= OutlineCreate(None,yystack.l_mark[-2].expr);
1383			    yyval.shape= ShapeDeclCreate(yystack.l_mark[-4].sval,outlines);
1384			}
1385break;
1386case 82:
1387#line 454 "xkbparse.y"
1388	{ yyval.section= SectionDeclCreate(yystack.l_mark[-4].sval,yystack.l_mark[-2].row); }
1389break;
1390case 83:
1391#line 458 "xkbparse.y"
1392	{ yyval.row=(RowDef *)AppendStmt(&yystack.l_mark[-1].row->common,&yystack.l_mark[0].row->common);}
1393break;
1394case 84:
1395#line 460 "xkbparse.y"
1396	{ yyval.row= yystack.l_mark[0].row; }
1397break;
1398case 85:
1399#line 464 "xkbparse.y"
1400	{ yyval.row= RowDeclCreate(yystack.l_mark[-2].key); }
1401break;
1402case 86:
1403#line 466 "xkbparse.y"
1404	{ yyval.row= (RowDef *)yystack.l_mark[0].var; }
1405break;
1406case 87:
1407#line 468 "xkbparse.y"
1408	{ yyval.row= (RowDef *)yystack.l_mark[0].doodad; }
1409break;
1410case 88:
1411#line 470 "xkbparse.y"
1412	{ yyval.row= (RowDef *)yystack.l_mark[0].ledMap; }
1413break;
1414case 89:
1415#line 472 "xkbparse.y"
1416	{ yyval.row= (RowDef *)yystack.l_mark[0].overlay; }
1417break;
1418case 90:
1419#line 476 "xkbparse.y"
1420	{ yyval.key=(KeyDef *)AppendStmt(&yystack.l_mark[-1].key->common,&yystack.l_mark[0].key->common);}
1421break;
1422case 91:
1423#line 478 "xkbparse.y"
1424	{ yyval.key= yystack.l_mark[0].key; }
1425break;
1426case 92:
1427#line 482 "xkbparse.y"
1428	{ yyval.key= yystack.l_mark[-2].key; }
1429break;
1430case 93:
1431#line 484 "xkbparse.y"
1432	{ yyval.key= (KeyDef *)yystack.l_mark[0].var; }
1433break;
1434case 94:
1435#line 488 "xkbparse.y"
1436	{ yyval.key=(KeyDef *)AppendStmt(&yystack.l_mark[-2].key->common,&yystack.l_mark[0].key->common);}
1437break;
1438case 95:
1439#line 490 "xkbparse.y"
1440	{ yyval.key= yystack.l_mark[0].key; }
1441break;
1442case 96:
1443#line 494 "xkbparse.y"
1444	{ yyval.key= KeyDeclCreate(yystack.l_mark[0].str,NULL); }
1445break;
1446case 97:
1447#line 496 "xkbparse.y"
1448	{ yyval.key= KeyDeclCreate(NULL,yystack.l_mark[-1].expr); }
1449break;
1450case 98:
1451#line 500 "xkbparse.y"
1452	{ yyval.overlay= OverlayDeclCreate(yystack.l_mark[-4].sval,yystack.l_mark[-2].olKey); }
1453break;
1454case 99:
1455#line 504 "xkbparse.y"
1456	{
1457			    yyval.olKey= (OverlayKeyDef *)
1458				AppendStmt(&yystack.l_mark[-2].olKey->common,&yystack.l_mark[0].olKey->common);
1459			}
1460break;
1461case 100:
1462#line 509 "xkbparse.y"
1463	{ yyval.olKey= yystack.l_mark[0].olKey; }
1464break;
1465case 101:
1466#line 513 "xkbparse.y"
1467	{ yyval.olKey= OverlayKeyCreate(yystack.l_mark[-2].str,yystack.l_mark[0].str); }
1468break;
1469case 102:
1470#line 517 "xkbparse.y"
1471	{ yyval.outline=(OutlineDef *)AppendStmt(&yystack.l_mark[-2].outline->common,&yystack.l_mark[0].outline->common);}
1472break;
1473case 103:
1474#line 519 "xkbparse.y"
1475	{ yyval.outline= yystack.l_mark[0].outline; }
1476break;
1477case 104:
1478#line 523 "xkbparse.y"
1479	{ yyval.outline= OutlineCreate(None,yystack.l_mark[-1].expr); }
1480break;
1481case 105:
1482#line 525 "xkbparse.y"
1483	{ yyval.outline= OutlineCreate(yystack.l_mark[-4].sval,yystack.l_mark[-1].expr); }
1484break;
1485case 106:
1486#line 527 "xkbparse.y"
1487	{ yyval.outline= OutlineCreate(yystack.l_mark[-2].sval,yystack.l_mark[0].expr); }
1488break;
1489case 107:
1490#line 531 "xkbparse.y"
1491	{ yyval.expr= (ExprDef *)AppendStmt(&yystack.l_mark[-2].expr->common,&yystack.l_mark[0].expr->common); }
1492break;
1493case 108:
1494#line 533 "xkbparse.y"
1495	{ yyval.expr= yystack.l_mark[0].expr; }
1496break;
1497case 109:
1498#line 537 "xkbparse.y"
1499	{
1500			    ExprDef *expr;
1501			    expr= ExprCreate(ExprCoord,TypeUnknown);
1502			    expr->value.coord.x= yystack.l_mark[-3].ival;
1503			    expr->value.coord.y= yystack.l_mark[-1].ival;
1504			    yyval.expr= expr;
1505			}
1506break;
1507case 110:
1508#line 547 "xkbparse.y"
1509	{ yyval.doodad= DoodadCreate(yystack.l_mark[-5].uval,yystack.l_mark[-4].sval,yystack.l_mark[-2].var); }
1510break;
1511case 111:
1512#line 550 "xkbparse.y"
1513	{ yyval.uval= XkbTextDoodad; }
1514break;
1515case 112:
1516#line 551 "xkbparse.y"
1517	{ yyval.uval= XkbOutlineDoodad; }
1518break;
1519case 113:
1520#line 552 "xkbparse.y"
1521	{ yyval.uval= XkbSolidDoodad; }
1522break;
1523case 114:
1524#line 553 "xkbparse.y"
1525	{ yyval.uval= XkbLogoDoodad; }
1526break;
1527case 115:
1528#line 556 "xkbparse.y"
1529	{ yyval.sval= yystack.l_mark[0].sval; }
1530break;
1531case 116:
1532#line 557 "xkbparse.y"
1533	{ yyval.sval= yystack.l_mark[0].sval; }
1534break;
1535case 117:
1536#line 561 "xkbparse.y"
1537	{ yyval.sval= XkbInternAtom(NULL,"action",False); }
1538break;
1539case 118:
1540#line 563 "xkbparse.y"
1541	{ yyval.sval= XkbInternAtom(NULL,"interpret",False); }
1542break;
1543case 119:
1544#line 565 "xkbparse.y"
1545	{ yyval.sval= XkbInternAtom(NULL,"type",False); }
1546break;
1547case 120:
1548#line 567 "xkbparse.y"
1549	{ yyval.sval= XkbInternAtom(NULL,"key",False); }
1550break;
1551case 121:
1552#line 569 "xkbparse.y"
1553	{ yyval.sval= XkbInternAtom(NULL,"group",False); }
1554break;
1555case 122:
1556#line 571 "xkbparse.y"
1557	{yyval.sval=XkbInternAtom(NULL,"modifier_map",False);}
1558break;
1559case 123:
1560#line 573 "xkbparse.y"
1561	{ yyval.sval= XkbInternAtom(NULL,"indicator",False); }
1562break;
1563case 124:
1564#line 575 "xkbparse.y"
1565	{ yyval.sval= XkbInternAtom(NULL,"shape",False); }
1566break;
1567case 125:
1568#line 577 "xkbparse.y"
1569	{ yyval.sval= XkbInternAtom(NULL,"row",False); }
1570break;
1571case 126:
1572#line 579 "xkbparse.y"
1573	{ yyval.sval= XkbInternAtom(NULL,"section",False); }
1574break;
1575case 127:
1576#line 581 "xkbparse.y"
1577	{ yyval.sval= XkbInternAtom(NULL,"text",False); }
1578break;
1579case 128:
1580#line 584 "xkbparse.y"
1581	{ yyval.uval= yystack.l_mark[0].uval; }
1582break;
1583case 129:
1584#line 585 "xkbparse.y"
1585	{ yyval.uval= MergeDefault; }
1586break;
1587case 130:
1588#line 588 "xkbparse.y"
1589	{ yyval.uval= MergeDefault; }
1590break;
1591case 131:
1592#line 589 "xkbparse.y"
1593	{ yyval.uval= MergeAugment; }
1594break;
1595case 132:
1596#line 590 "xkbparse.y"
1597	{ yyval.uval= MergeOverride; }
1598break;
1599case 133:
1600#line 591 "xkbparse.y"
1601	{ yyval.uval= MergeReplace; }
1602break;
1603case 134:
1604#line 592 "xkbparse.y"
1605	{ yyval.uval= MergeAltForm; }
1606break;
1607case 135:
1608#line 595 "xkbparse.y"
1609	{ yyval.expr= yystack.l_mark[0].expr; }
1610break;
1611case 136:
1612#line 596 "xkbparse.y"
1613	{ yyval.expr= NULL; }
1614break;
1615case 137:
1616#line 600 "xkbparse.y"
1617	{ yyval.expr= (ExprDef *)AppendStmt(&yystack.l_mark[-2].expr->common,&yystack.l_mark[0].expr->common); }
1618break;
1619case 138:
1620#line 602 "xkbparse.y"
1621	{ yyval.expr= yystack.l_mark[0].expr; }
1622break;
1623case 139:
1624#line 606 "xkbparse.y"
1625	{ yyval.expr= ExprCreateBinary(OpDivide,yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1626break;
1627case 140:
1628#line 608 "xkbparse.y"
1629	{ yyval.expr= ExprCreateBinary(OpAdd,yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1630break;
1631case 141:
1632#line 610 "xkbparse.y"
1633	{ yyval.expr= ExprCreateBinary(OpSubtract,yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1634break;
1635case 142:
1636#line 612 "xkbparse.y"
1637	{ yyval.expr= ExprCreateBinary(OpMultiply,yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1638break;
1639case 143:
1640#line 614 "xkbparse.y"
1641	{ yyval.expr= ExprCreateBinary(OpAssign,yystack.l_mark[-2].expr,yystack.l_mark[0].expr); }
1642break;
1643case 144:
1644#line 616 "xkbparse.y"
1645	{ yyval.expr= yystack.l_mark[0].expr; }
1646break;
1647case 145:
1648#line 620 "xkbparse.y"
1649	{ yyval.expr= ExprCreateUnary(OpNegate,yystack.l_mark[0].expr->type,yystack.l_mark[0].expr); }
1650break;
1651case 146:
1652#line 622 "xkbparse.y"
1653	{ yyval.expr= ExprCreateUnary(OpUnaryPlus,yystack.l_mark[0].expr->type,yystack.l_mark[0].expr); }
1654break;
1655case 147:
1656#line 624 "xkbparse.y"
1657	{ yyval.expr= ExprCreateUnary(OpNot,TypeBoolean,yystack.l_mark[0].expr); }
1658break;
1659case 148:
1660#line 626 "xkbparse.y"
1661	{ yyval.expr= ExprCreateUnary(OpInvert,yystack.l_mark[0].expr->type,yystack.l_mark[0].expr); }
1662break;
1663case 149:
1664#line 628 "xkbparse.y"
1665	{ yyval.expr= yystack.l_mark[0].expr;  }
1666break;
1667case 150:
1668#line 630 "xkbparse.y"
1669	{ yyval.expr= ActionCreate(yystack.l_mark[-3].sval,yystack.l_mark[-1].expr); }
1670break;
1671case 151:
1672#line 632 "xkbparse.y"
1673	{ yyval.expr= yystack.l_mark[0].expr;  }
1674break;
1675case 152:
1676#line 634 "xkbparse.y"
1677	{ yyval.expr= yystack.l_mark[-1].expr;  }
1678break;
1679case 153:
1680#line 638 "xkbparse.y"
1681	{ yyval.expr= (ExprDef *)AppendStmt(&yystack.l_mark[-2].expr->common,&yystack.l_mark[0].expr->common); }
1682break;
1683case 154:
1684#line 640 "xkbparse.y"
1685	{ yyval.expr= yystack.l_mark[0].expr; }
1686break;
1687case 155:
1688#line 644 "xkbparse.y"
1689	{ yyval.expr= ActionCreate(yystack.l_mark[-3].sval,yystack.l_mark[-1].expr); }
1690break;
1691case 156:
1692#line 648 "xkbparse.y"
1693	{
1694			    ExprDef *expr;
1695                            expr= ExprCreate(ExprIdent,TypeUnknown);
1696                            expr->value.str= yystack.l_mark[0].sval;
1697                            yyval.expr= expr;
1698			}
1699break;
1700case 157:
1701#line 655 "xkbparse.y"
1702	{
1703                            ExprDef *expr;
1704                            expr= ExprCreate(ExprFieldRef,TypeUnknown);
1705                            expr->value.field.element= yystack.l_mark[-2].sval;
1706                            expr->value.field.field= yystack.l_mark[0].sval;
1707                            yyval.expr= expr;
1708			}
1709break;
1710case 158:
1711#line 663 "xkbparse.y"
1712	{
1713			    ExprDef *expr;
1714			    expr= ExprCreate(ExprArrayRef,TypeUnknown);
1715			    expr->value.array.element= None;
1716			    expr->value.array.field= yystack.l_mark[-3].sval;
1717			    expr->value.array.entry= yystack.l_mark[-1].expr;
1718			    yyval.expr= expr;
1719			}
1720break;
1721case 159:
1722#line 672 "xkbparse.y"
1723	{
1724			    ExprDef *expr;
1725			    expr= ExprCreate(ExprArrayRef,TypeUnknown);
1726			    expr->value.array.element= yystack.l_mark[-5].sval;
1727			    expr->value.array.field= yystack.l_mark[-3].sval;
1728			    expr->value.array.entry= yystack.l_mark[-1].expr;
1729			    yyval.expr= expr;
1730			}
1731break;
1732case 160:
1733#line 683 "xkbparse.y"
1734	{
1735			    ExprDef *expr;
1736                            expr= ExprCreate(ExprValue,TypeString);
1737                            expr->value.str= yystack.l_mark[0].sval;
1738                            yyval.expr= expr;
1739			}
1740break;
1741case 161:
1742#line 690 "xkbparse.y"
1743	{
1744			    ExprDef *expr;
1745                            expr= ExprCreate(ExprValue,TypeInt);
1746                            expr->value.ival= yystack.l_mark[0].ival;
1747                            yyval.expr= expr;
1748			}
1749break;
1750case 162:
1751#line 697 "xkbparse.y"
1752	{
1753			    ExprDef *expr;
1754			    expr= ExprCreate(ExprValue,TypeFloat);
1755			    expr->value.ival= yystack.l_mark[0].ival;
1756			    yyval.expr= expr;
1757			}
1758break;
1759case 163:
1760#line 704 "xkbparse.y"
1761	{
1762			    ExprDef *expr;
1763			    expr= ExprCreate(ExprValue,TypeKeyName);
1764			    memset(expr->value.keyName,0,5);
1765			    strncpy(expr->value.keyName,yystack.l_mark[0].str,4);
1766			    free(yystack.l_mark[0].str);
1767			    yyval.expr= expr;
1768			}
1769break;
1770case 164:
1771#line 714 "xkbparse.y"
1772	{ yyval.expr= yystack.l_mark[0].expr; }
1773break;
1774case 165:
1775#line 715 "xkbparse.y"
1776	{ yyval.expr= NULL; }
1777break;
1778case 166:
1779#line 719 "xkbparse.y"
1780	{ yyval.expr= AppendKeysymList(yystack.l_mark[-2].expr,yystack.l_mark[0].str); }
1781break;
1782case 167:
1783#line 721 "xkbparse.y"
1784	{ yyval.expr= CreateKeysymList(yystack.l_mark[0].str); }
1785break;
1786case 168:
1787#line 724 "xkbparse.y"
1788	{ yyval.str= strdup(scanBuf); }
1789break;
1790case 169:
1791#line 725 "xkbparse.y"
1792	{ yyval.str= strdup("section"); }
1793break;
1794case 170:
1795#line 727 "xkbparse.y"
1796	{
1797			    if (yystack.l_mark[0].ival<10)	{ yyval.str= malloc(2); yyval.str[0]= '0' + yystack.l_mark[0].ival; yyval.str[1]= '\0'; }
1798			    else	{ yyval.str= malloc(19); snprintf(yyval.str, 19, "0x%x", yystack.l_mark[0].ival); }
1799			}
1800break;
1801case 171:
1802#line 733 "xkbparse.y"
1803	{ yyval.ival= -yystack.l_mark[0].ival; }
1804break;
1805case 172:
1806#line 734 "xkbparse.y"
1807	{ yyval.ival= yystack.l_mark[0].ival; }
1808break;
1809case 173:
1810#line 737 "xkbparse.y"
1811	{ yyval.ival= scanInt; }
1812break;
1813case 174:
1814#line 738 "xkbparse.y"
1815	{ yyval.ival= scanInt*XkbGeomPtsPerMM; }
1816break;
1817case 175:
1818#line 741 "xkbparse.y"
1819	{ yyval.ival= scanInt; }
1820break;
1821case 176:
1822#line 744 "xkbparse.y"
1823	{ yyval.ival= scanInt; }
1824break;
1825case 177:
1826#line 747 "xkbparse.y"
1827	{ yyval.str= strdup(scanBuf); }
1828break;
1829case 178:
1830#line 750 "xkbparse.y"
1831	{ yyval.sval= XkbInternAtom(NULL,scanBuf,False); }
1832break;
1833case 179:
1834#line 751 "xkbparse.y"
1835	{ yyval.sval= XkbInternAtom(NULL,"default",False); }
1836break;
1837case 180:
1838#line 754 "xkbparse.y"
1839	{ yyval.sval= XkbInternAtom(NULL,scanBuf,False); }
1840break;
1841case 181:
1842#line 757 "xkbparse.y"
1843	{ yyval.str= yystack.l_mark[0].str; }
1844break;
1845case 182:
1846#line 758 "xkbparse.y"
1847	{ yyval.str= NULL; }
1848break;
1849case 183:
1850#line 761 "xkbparse.y"
1851	{ yyval.str= strdup(scanBuf); }
1852break;
1853#line 1853 "xkbparse.c"
1854    }
1855    yystack.s_mark -= yym;
1856    yystate = *yystack.s_mark;
1857    yystack.l_mark -= yym;
1858    yym = yylhs[yyn];
1859    if (yystate == 0 && yym == 0)
1860    {
1861#if YYDEBUG
1862        if (yydebug)
1863            printf("%sdebug: after reduction, shifting from state 0 to\
1864 state %d\n", YYPREFIX, YYFINAL);
1865#endif
1866        yystate = YYFINAL;
1867        *++yystack.s_mark = YYFINAL;
1868        *++yystack.l_mark = yyval;
1869        if (yychar < 0)
1870        {
1871            if ((yychar = yylex()) < 0) yychar = 0;
1872#if YYDEBUG
1873            if (yydebug)
1874            {
1875                yys = 0;
1876                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1877                if (!yys) yys = "illegal-symbol";
1878                printf("%sdebug: state %d, reading %d (%s)\n",
1879                        YYPREFIX, YYFINAL, yychar, yys);
1880            }
1881#endif
1882        }
1883        if (yychar == 0) goto yyaccept;
1884        goto yyloop;
1885    }
1886    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
1887            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
1888        yystate = yytable[yyn];
1889    else
1890        yystate = yydgoto[yym];
1891#if YYDEBUG
1892    if (yydebug)
1893        printf("%sdebug: after reduction, shifting from state %d \
1894to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
1895#endif
1896    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
1897    {
1898        goto yyoverflow;
1899    }
1900    *++yystack.s_mark = (short) yystate;
1901    *++yystack.l_mark = yyval;
1902    goto yyloop;
1903
1904yyoverflow:
1905    yyerror("yacc stack overflow");
1906
1907yyabort:
1908    yyfreestack(&yystack);
1909    return (1);
1910
1911yyaccept:
1912    yyfreestack(&yystack);
1913    return (0);
1914}
1915