/[svn]/linuxsampler/trunk/src/network/lscpparser.cpp
ViewVC logotype

Annotation of /linuxsampler/trunk/src/network/lscpparser.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 143 - (hide annotations) (download)
Wed Jun 23 18:54:08 2004 UTC (19 years, 10 months ago) by capela
File size: 57110 byte(s)
* SET CHANNEL AUDIO_OUTPUT_TYPE <chan> <driver> command is back!
  creates an audio output device instance of the given driver type
  ('Jack' or 'Alsa') with default parameters if none exists,
  otherwise it just picks the first available device and assign
  it to the intended sampler channel.

* The AudioOutputDevice class get's a new pure virtual method,
  Driver(), which is implemented on both of the existing inherited
  classes, AudioOutputDeviceAlsa and AudioOutputDeviceJack, with
  the sole purpose to return the driver type name as a String
  ('Alsa' and 'Jack', respectively).

* The quoting on the filename argument for the LOAD INSTRUMENT
  command has been made optional; you can have both ways, with
  single quotes or none, keeping compability with older LSCP
  specification.

* An additional sanity check is made on LOAD INSTRUMENT, whether
  the sampler channel has an audio output device assigned, thus
  preventing the server from crashing on instrument file load.

* The GET AUDIO_OUTPUT_DEVICE INFO now includes the missing
  'driver' item, as predicted by the draft protocol document.

1 senkov 135 /* A Bison parser, made by GNU Bison 1.875. */
2 schoenebeck 35
3     /* Skeleton parser for Yacc-like parsing with Bison,
4 senkov 135 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
5 schoenebeck 35
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2, or (at your option)
9     any later version.
10    
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     GNU General Public License for more details.
15    
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place - Suite 330,
19     Boston, MA 02111-1307, USA. */
20    
21     /* As a special exception, when this file is copied by Bison into a
22     Bison output file, you may use that output file without restriction.
23     This special exception was added by the Free Software Foundation
24     in version 1.24 of Bison. */
25    
26     /* Written by Richard Stallman by simplifying the original so called
27     ``semantic'' parser. */
28    
29     /* All symbols defined below should begin with yy or YY, to avoid
30     infringing on user name space. This should be done even for local
31     variables, as they might otherwise be expanded by user macros.
32     There are some unavoidable exceptions within include files to
33     define necessary library symbols; they are noted "INFRINGES ON
34     USER NAME SPACE" below. */
35    
36     /* Identify Bison output. */
37     #define YYBISON 1
38    
39     /* Skeleton name. */
40     #define YYSKELETON_NAME "yacc.c"
41    
42     /* Pure parsers. */
43     #define YYPURE 1
44    
45     /* Using locations. */
46     #define YYLSP_NEEDED 0
47    
48    
49    
50     /* Tokens. */
51     #ifndef YYTOKENTYPE
52     # define YYTOKENTYPE
53     /* Put the tokens into the symbol table, so that GDB and other debuggers
54     know about them. */
55     enum yytokentype {
56     CHAR = 258,
57     DOTNUM = 259,
58     NUMBER = 260,
59 senkov 135 STRINGVAL = 261,
60     SP = 262,
61     LF = 263,
62     CR = 264,
63     HASH = 265,
64     EQ = 266,
65     ADD = 267,
66     GET = 268,
67     CREATE = 269,
68     DESTROY = 270,
69     LIST = 271,
70     LOAD = 272,
71 senkov 141 NON_MODAL = 273,
72 senkov 135 REMOVE = 274,
73     SET = 275,
74     SUBSCRIBE = 276,
75     UNSUBSCRIBE = 277,
76     RESET = 278,
77     QUIT = 279,
78     CHANNEL = 280,
79     NOTIFICATION = 281,
80     AVAILABLE_ENGINES = 282,
81     AVAILABLE_AUDIO_OUTPUT_DRIVERS = 283,
82     CHANNELS = 284,
83     INFO = 285,
84     BUFFER_FILL = 286,
85     STREAM_COUNT = 287,
86     VOICE_COUNT = 288,
87     INSTRUMENT = 289,
88     ENGINE = 290,
89     AUDIO_OUTPUT_CHANNEL = 291,
90     AUDIO_OUTPUT_CHANNEL_PARAMETER = 292,
91     AUDIO_OUTPUT_DEVICE = 293,
92     AUDIO_OUTPUT_DEVICES = 294,
93     AUDIO_OUTPUT_DEVICE_PARAMETER = 295,
94     AUDIO_OUTPUT_DRIVER = 296,
95     AUDIO_OUTPUT_DRIVER_PARAMETER = 297,
96 capela 143 AUDIO_OUTPUT_TYPE = 298,
97     MIDI_INPUT_PORT = 299,
98     MIDI_INPUT_CHANNEL = 300,
99     MIDI_INPUT_TYPE = 301,
100     VOLUME = 302,
101     BYTES = 303,
102     PERCENTAGE = 304,
103     MISCELLANEOUS = 305
104 schoenebeck 35 };
105     #endif
106     #define CHAR 258
107     #define DOTNUM 259
108     #define NUMBER 260
109 senkov 135 #define STRINGVAL 261
110     #define SP 262
111     #define LF 263
112     #define CR 264
113     #define HASH 265
114     #define EQ 266
115     #define ADD 267
116     #define GET 268
117     #define CREATE 269
118     #define DESTROY 270
119     #define LIST 271
120     #define LOAD 272
121 senkov 141 #define NON_MODAL 273
122 senkov 135 #define REMOVE 274
123     #define SET 275
124     #define SUBSCRIBE 276
125     #define UNSUBSCRIBE 277
126     #define RESET 278
127     #define QUIT 279
128     #define CHANNEL 280
129     #define NOTIFICATION 281
130     #define AVAILABLE_ENGINES 282
131     #define AVAILABLE_AUDIO_OUTPUT_DRIVERS 283
132     #define CHANNELS 284
133     #define INFO 285
134     #define BUFFER_FILL 286
135     #define STREAM_COUNT 287
136     #define VOICE_COUNT 288
137     #define INSTRUMENT 289
138     #define ENGINE 290
139     #define AUDIO_OUTPUT_CHANNEL 291
140     #define AUDIO_OUTPUT_CHANNEL_PARAMETER 292
141     #define AUDIO_OUTPUT_DEVICE 293
142     #define AUDIO_OUTPUT_DEVICES 294
143     #define AUDIO_OUTPUT_DEVICE_PARAMETER 295
144     #define AUDIO_OUTPUT_DRIVER 296
145     #define AUDIO_OUTPUT_DRIVER_PARAMETER 297
146 capela 143 #define AUDIO_OUTPUT_TYPE 298
147     #define MIDI_INPUT_PORT 299
148     #define MIDI_INPUT_CHANNEL 300
149     #define MIDI_INPUT_TYPE 301
150     #define VOLUME 302
151     #define BYTES 303
152     #define PERCENTAGE 304
153     #define MISCELLANEOUS 305
154 schoenebeck 35
155    
156    
157    
158     /* Copy the first part of user declarations. */
159     #line 23 "lscp.y"
160    
161    
162     #include "lscpparser.h"
163     #include "lscpserver.h"
164    
165     // as we need an reentrant scanner, we have to pass the pointer to the scanner with each yylex() call
166     #define YYLEX_PARAM ((yyparse_param_t*) yyparse_param)->pScanner
167    
168     // to save us typing work in the rules action definitions
169     #define LSCPSERVER ((yyparse_param_t*) yyparse_param)->pServer
170    
171     // clears input buffer and restarts scanner.
172     void restart(yyparse_param_t* pparam, int& yychar);
173     #define RESTART restart((yyparse_param_t*) YYPARSE_PARAM, yychar)
174    
175     // external reference to the main scanner function yylex()
176     extern YY_DECL;
177    
178     // external reference to restart the lex scanner
179     extern void yyrestart(FILE* input_file, yyscan_t yyscanner);
180    
181     // we provide our own version of yyerror() so we don't have to link against the yacc library
182     void yyerror(const char* s);
183    
184    
185    
186     /* Enabling traces. */
187     #ifndef YYDEBUG
188     # define YYDEBUG 0
189     #endif
190    
191     /* Enabling verbose error messages. */
192     #ifdef YYERROR_VERBOSE
193     # undef YYERROR_VERBOSE
194     # define YYERROR_VERBOSE 1
195     #else
196     # define YYERROR_VERBOSE 0
197     #endif
198    
199     #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
200     typedef int YYSTYPE;
201     # define yystype YYSTYPE /* obsolescent; will be withdrawn */
202     # define YYSTYPE_IS_DECLARED 1
203     # define YYSTYPE_IS_TRIVIAL 1
204     #endif
205    
206    
207    
208     /* Copy the second part of user declarations. */
209    
210    
211     /* Line 214 of yacc.c. */
212 capela 143 #line 212 "y.tab.c"
213 schoenebeck 35
214     #if ! defined (yyoverflow) || YYERROR_VERBOSE
215    
216     /* The parser invokes alloca or malloc; define the necessary symbols. */
217    
218     # if YYSTACK_USE_ALLOCA
219     # define YYSTACK_ALLOC alloca
220     # else
221     # ifndef YYSTACK_USE_ALLOCA
222     # if defined (alloca) || defined (_ALLOCA_H)
223     # define YYSTACK_ALLOC alloca
224     # else
225     # ifdef __GNUC__
226     # define YYSTACK_ALLOC __builtin_alloca
227     # endif
228     # endif
229     # endif
230     # endif
231    
232     # ifdef YYSTACK_ALLOC
233     /* Pacify GCC's `empty if-body' warning. */
234     # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
235     # else
236     # if defined (__STDC__) || defined (__cplusplus)
237     # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
238     # define YYSIZE_T size_t
239     # endif
240     # define YYSTACK_ALLOC malloc
241     # define YYSTACK_FREE free
242     # endif
243     #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
244    
245    
246     #if (! defined (yyoverflow) \
247     && (! defined (__cplusplus) \
248     || (YYSTYPE_IS_TRIVIAL)))
249    
250     /* A type that is properly aligned for any stack member. */
251     union yyalloc
252     {
253     short yyss;
254     YYSTYPE yyvs;
255     };
256    
257     /* The size of the maximum gap between one aligned stack and the next. */
258     # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
259    
260     /* The size of an array large to enough to hold all stacks, each with
261     N elements. */
262     # define YYSTACK_BYTES(N) \
263     ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
264     + YYSTACK_GAP_MAXIMUM)
265    
266     /* Copy COUNT objects from FROM to TO. The source and destination do
267     not overlap. */
268     # ifndef YYCOPY
269     # if 1 < __GNUC__
270     # define YYCOPY(To, From, Count) \
271     __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
272     # else
273     # define YYCOPY(To, From, Count) \
274     do \
275     { \
276     register YYSIZE_T yyi; \
277     for (yyi = 0; yyi < (Count); yyi++) \
278     (To)[yyi] = (From)[yyi]; \
279     } \
280     while (0)
281     # endif
282     # endif
283    
284     /* Relocate STACK from its old location to the new one. The
285     local variables YYSIZE and YYSTACKSIZE give the old and new number of
286     elements in the stack, and YYPTR gives the new location of the
287     stack. Advance YYPTR to a properly aligned location for the next
288     stack. */
289     # define YYSTACK_RELOCATE(Stack) \
290     do \
291     { \
292     YYSIZE_T yynewbytes; \
293     YYCOPY (&yyptr->Stack, Stack, yysize); \
294     Stack = &yyptr->Stack; \
295     yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
296     yyptr += yynewbytes / sizeof (*yyptr); \
297     } \
298     while (0)
299    
300     #endif
301    
302     #if defined (__STDC__) || defined (__cplusplus)
303     typedef signed char yysigned_char;
304     #else
305     typedef short yysigned_char;
306     #endif
307    
308     /* YYFINAL -- State number of the termination state. */
309 senkov 141 #define YYFINAL 30
310 schoenebeck 35 /* YYLAST -- Last index in YYTABLE. */
311 capela 143 #define YYLAST 225
312 schoenebeck 35
313     /* YYNTOKENS -- Number of terminals. */
314 capela 143 #define YYNTOKENS 51
315 schoenebeck 35 /* YYNNTS -- Number of nonterminals. */
316 capela 143 #define YYNNTS 30
317 schoenebeck 35 /* YYNRULES -- Number of rules. */
318 capela 143 #define YYNRULES 92
319 schoenebeck 35 /* YYNRULES -- Number of states. */
320 capela 143 #define YYNSTATES 239
321 schoenebeck 35
322     /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
323     #define YYUNDEFTOK 2
324 capela 143 #define YYMAXUTOK 305
325 schoenebeck 35
326     #define YYTRANSLATE(YYX) \
327     ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
328    
329     /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
330     static const unsigned char yytranslate[] =
331     {
332     0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
333     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
334     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
335     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
336     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
337     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
338     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
339     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
340     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
341     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
342     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
343     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
344     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
345     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
346     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
347     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
348     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
349     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
350     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
351     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
352     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
353     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
354     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
355     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
356     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
357     2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
358     5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
359     15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
360     25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
361 schoenebeck 123 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
362 capela 143 45, 46, 47, 48, 49, 50
363 schoenebeck 35 };
364    
365     #if YYDEBUG
366     /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
367     YYRHS. */
368 schoenebeck 123 static const unsigned short yyprhs[] =
369 schoenebeck 35 {
370 schoenebeck 111 0, 0, 3, 5, 9, 14, 15, 17, 19, 21,
371 schoenebeck 123 23, 26, 29, 32, 35, 39, 43, 47, 51, 55,
372 senkov 141 59, 65, 69, 73, 77, 83, 85, 87, 89, 91,
373     93, 95, 97, 99, 101, 103, 105, 107, 109, 111,
374     113, 119, 127, 137, 139, 145, 153, 163, 165, 171,
375     179, 185, 191, 197, 205, 215, 219, 225, 229, 233,
376 capela 143 237, 241, 247, 255, 261, 267, 273, 279, 285, 289,
377     295, 297, 299, 301, 307, 315, 319, 321, 323, 325,
378     327, 329, 331, 333, 335, 337, 339, 341, 343, 345,
379     347, 349, 351
380 schoenebeck 35 };
381    
382     /* YYRHS -- A `-1'-separated list of the rules' RHS. */
383     static const yysigned_char yyrhs[] =
384     {
385 capela 143 52, 0, -1, 53, -1, 52, 8, 53, -1, 52,
386     9, 8, 53, -1, -1, 54, -1, 55, -1, 1,
387     -1, 10, -1, 54, 10, -1, 54, 7, -1, 54,
388     5, -1, 54, 80, -1, 12, 7, 25, -1, 13,
389     7, 58, -1, 14, 7, 60, -1, 15, 7, 61,
390     -1, 16, 7, 66, -1, 17, 7, 62, -1, 19,
391     7, 25, 7, 72, -1, 20, 7, 59, -1, 21,
392     7, 56, -1, 22, 7, 57, -1, 23, 7, 25,
393     7, 72, -1, 24, -1, 29, -1, 33, -1, 32,
394     -1, 31, -1, 30, -1, 50, -1, 29, -1, 33,
395     -1, 32, -1, 31, -1, 30, -1, 50, -1, 27,
396     -1, 28, -1, 41, 7, 30, 7, 80, -1, 42,
397     7, 30, 7, 80, 7, 80, -1, 42, 7, 30,
398     7, 80, 7, 80, 7, 64, -1, 39, -1, 38,
399 senkov 141 7, 30, 7, 5, -1, 36, 7, 30, 7, 5,
400     7, 5, -1, 37, 7, 30, 7, 5, 7, 5,
401 capela 143 7, 80, -1, 29, -1, 25, 7, 30, 7, 72,
402     -1, 25, 7, 31, 7, 65, 7, 72, -1, 25,
403     7, 32, 7, 72, -1, 25, 7, 33, 7, 72,
404     -1, 35, 7, 30, 7, 76, -1, 40, 7, 5,
405     7, 80, 11, 79, -1, 37, 7, 5, 7, 5,
406     7, 80, 11, 79, -1, 25, 7, 63, -1, 38,
407     7, 80, 7, 64, -1, 38, 7, 80, -1, 38,
408     7, 5, -1, 34, 7, 67, -1, 35, 7, 68,
409     -1, 38, 7, 72, 7, 5, -1, 36, 7, 72,
410     7, 74, 7, 74, -1, 43, 7, 72, 7, 69,
411     -1, 44, 7, 72, 7, 77, -1, 45, 7, 72,
412     7, 75, -1, 46, 7, 72, 7, 70, -1, 47,
413     7, 72, 7, 71, -1, 80, 11, 79, -1, 64,
414     7, 80, 11, 79, -1, 48, -1, 49, -1, 39,
415     -1, 78, 7, 73, 7, 72, -1, 18, 7, 78,
416     7, 73, 7, 72, -1, 76, 7, 72, -1, 80,
417     -1, 80, -1, 4, -1, 5, -1, 5, -1, 5,
418     -1, 5, -1, 5, -1, 80, -1, 6, -1, 6,
419     -1, 80, -1, 6, -1, 5, -1, 4, -1, 3,
420     -1, 80, 3, -1
421 schoenebeck 35 };
422    
423     /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
424     static const unsigned char yyrline[] =
425     {
426 senkov 141 0, 77, 77, 78, 79, 82, 83, 84, 85, 88,
427     89, 90, 91, 92, 95, 96, 97, 98, 99, 100,
428     101, 102, 103, 104, 105, 106, 109, 110, 111, 112,
429     113, 114, 117, 118, 119, 120, 121, 122, 125, 126,
430     127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
431     137, 138, 139, 142, 143, 144, 147, 148, 151, 154,
432 capela 143 155, 158, 159, 160, 161, 162, 163, 164, 167, 168,
433     171, 172, 175, 178, 179, 182, 185, 188, 191, 192,
434     195, 198, 201, 204, 207, 210, 213, 214, 217, 218,
435     219, 222, 223
436 schoenebeck 35 };
437     #endif
438    
439     #if YYDEBUG || YYERROR_VERBOSE
440     /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
441     First, the terminals, then, starting at YYNTOKENS, nonterminals. */
442     static const char *const yytname[] =
443     {
444 senkov 135 "$end", "error", "$undefined", "CHAR", "DOTNUM", "NUMBER", "STRINGVAL",
445     "SP", "LF", "CR", "HASH", "EQ", "ADD", "GET", "CREATE", "DESTROY",
446 senkov 141 "LIST", "LOAD", "NON_MODAL", "REMOVE", "SET", "SUBSCRIBE",
447 senkov 135 "UNSUBSCRIBE", "RESET", "QUIT", "CHANNEL", "NOTIFICATION",
448     "AVAILABLE_ENGINES", "AVAILABLE_AUDIO_OUTPUT_DRIVERS", "CHANNELS",
449     "INFO", "BUFFER_FILL", "STREAM_COUNT", "VOICE_COUNT", "INSTRUMENT",
450     "ENGINE", "AUDIO_OUTPUT_CHANNEL", "AUDIO_OUTPUT_CHANNEL_PARAMETER",
451     "AUDIO_OUTPUT_DEVICE", "AUDIO_OUTPUT_DEVICES",
452     "AUDIO_OUTPUT_DEVICE_PARAMETER", "AUDIO_OUTPUT_DRIVER",
453 capela 143 "AUDIO_OUTPUT_DRIVER_PARAMETER", "AUDIO_OUTPUT_TYPE", "MIDI_INPUT_PORT",
454 senkov 135 "MIDI_INPUT_CHANNEL", "MIDI_INPUT_TYPE", "VOLUME", "BYTES",
455     "PERCENTAGE", "MISCELLANEOUS", "$accept", "input", "line", "comment",
456     "command", "subscribe_event", "unsubscribe_event", "get_instruction",
457     "set_instruction", "create_instruction", "destroy_instruction",
458     "load_instruction", "set_chan_instruction", "key_val_list",
459     "buffer_size_type", "list_instruction", "load_instr_args",
460 capela 143 "load_engine_args", "audio_output_type", "midi_input_type", "volume",
461     "sampler_channel", "instrument_index", "audio_output_channel",
462     "midi_input_channel", "engine_name", "midi_input_port", "filename",
463     "param_val", "string", 0
464 schoenebeck 35 };
465     #endif
466    
467     # ifdef YYPRINT
468     /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
469     token YYLEX-NUM. */
470     static const unsigned short yytoknum[] =
471     {
472     0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
473     265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
474     275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
475 schoenebeck 123 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
476 capela 143 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
477     305
478 schoenebeck 35 };
479     # endif
480    
481     /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
482     static const unsigned char yyr1[] =
483     {
484 capela 143 0, 51, 52, 52, 52, 53, 53, 53, 53, 54,
485     54, 54, 54, 54, 55, 55, 55, 55, 55, 55,
486     55, 55, 55, 55, 55, 55, 56, 56, 56, 56,
487     56, 56, 57, 57, 57, 57, 57, 57, 58, 58,
488     58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
489     58, 58, 58, 59, 59, 59, 60, 60, 61, 62,
490     62, 63, 63, 63, 63, 63, 63, 63, 64, 64,
491     65, 65, 66, 67, 67, 68, 69, 70, 71, 71,
492     72, 73, 74, 75, 76, 77, 78, 78, 79, 79,
493     79, 80, 80
494 schoenebeck 35 };
495    
496     /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
497     static const unsigned char yyr2[] =
498     {
499 schoenebeck 111 0, 2, 1, 3, 4, 0, 1, 1, 1, 1,
500 schoenebeck 123 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
501 senkov 141 5, 3, 3, 3, 5, 1, 1, 1, 1, 1,
502 senkov 135 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
503 senkov 141 5, 7, 9, 1, 5, 7, 9, 1, 5, 7,
504     5, 5, 5, 7, 9, 3, 5, 3, 3, 3,
505 capela 143 3, 5, 7, 5, 5, 5, 5, 5, 3, 5,
506     1, 1, 1, 5, 7, 3, 1, 1, 1, 1,
507     1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
508     1, 1, 2
509 schoenebeck 35 };
510    
511     /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
512     STATE-NUM when YYTABLE doesn't specify something else to do. Zero
513     means the default is an error. */
514     static const unsigned char yydefact[] =
515     {
516 schoenebeck 111 0, 8, 9, 0, 0, 0, 0, 0, 0, 0,
517 senkov 141 0, 0, 0, 0, 25, 0, 2, 6, 7, 0,
518 schoenebeck 123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
519 capela 143 1, 0, 0, 91, 12, 11, 10, 13, 14, 0,
520 senkov 141 38, 39, 47, 0, 0, 0, 0, 43, 0, 0,
521 capela 143 15, 0, 16, 0, 17, 72, 18, 0, 0, 19,
522 senkov 141 0, 0, 0, 0, 21, 26, 30, 29, 28, 27,
523     31, 22, 32, 36, 35, 34, 33, 37, 23, 0,
524 capela 143 3, 0, 92, 0, 0, 0, 0, 0, 0, 0,
525 senkov 141 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
526 schoenebeck 123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
527 capela 143 57, 58, 86, 0, 59, 0, 87, 60, 0, 84,
528     80, 20, 0, 0, 0, 0, 0, 0, 0, 55,
529     0, 0, 24, 0, 0, 0, 0, 0, 0, 0,
530 schoenebeck 123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
531 capela 143 0, 0, 0, 0, 0, 0, 48, 70, 71, 0,
532     50, 51, 52, 0, 0, 44, 40, 0, 56, 0,
533     0, 81, 0, 75, 0, 0, 0, 0, 0, 0,
534 schoenebeck 123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
535 capela 143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
536     49, 45, 0, 41, 0, 90, 89, 88, 68, 0,
537     73, 82, 0, 61, 63, 76, 85, 64, 83, 65,
538     66, 77, 78, 79, 67, 0, 53, 0, 0, 0,
539     0, 0, 0, 46, 42, 69, 74, 62, 54
540 schoenebeck 35 };
541    
542     /* YYDEFGOTO[NTERM-NUM]. */
543     static const short yydefgoto[] =
544     {
545 senkov 141 -1, 15, 16, 17, 18, 71, 78, 50, 64, 52,
546 capela 143 54, 59, 129, 168, 159, 56, 114, 117, 214, 220,
547     224, 121, 172, 212, 219, 118, 217, 115, 208, 116
548 schoenebeck 35 };
549    
550     /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
551     STATE-NUM. */
552 capela 143 #define YYPACT_NINF -198
553 schoenebeck 123 static const short yypact[] =
554 schoenebeck 35 {
555 capela 143 3, -198, -198, -1, 1, 30, 53, 81, 83, 115,
556     116, 120, 121, 122, -198, 21, -198, 98, -198, 22,
557     43, -10, 20, 82, 40, 105, 8, 11, 33, 106,
558     -198, 3, 124, -198, -198, -198, -198, 131, -198, 128,
559     -198, -198, -198, 129, 130, 132, 133, -198, 134, 135,
560     -198, 136, -198, 137, -198, -198, -198, 138, 139, -198,
561     140, 141, 142, 143, -198, -198, -198, -198, -198, -198,
562     -198, -198, -198, -198, -198, -198, -198, -198, -198, 144,
563     -198, 3, -198, 79, 123, 125, 126, 127, 145, 147,
564     149, 153, 28, 149, 154, 51, 155, 156, 154, -198,
565     157, 158, 159, 160, 161, 164, 165, 166, 167, 171,
566     2, -198, -198, 173, -198, 175, 131, -198, 176, 131,
567     -198, -198, 177, 178, 179, 180, 181, 182, 183, -198,
568     184, 185, -198, 154, 68, 154, 154, 149, 188, 189,
569     190, 149, 149, 149, 101, 191, 154, 154, 154, 154,
570     154, 154, 154, 154, 192, 149, -198, -198, -198, 193,
571     -198, -198, -198, 194, 195, -198, 131, 7, 196, 56,
572     197, -198, 198, -198, 199, 200, 201, 202, 205, 206,
573     207, 208, 66, 154, 211, 212, 149, 149, 109, 191,
574     154, 213, 214, 149, 148, 215, 149, 114, 149, 109,
575     -198, -198, 216, 99, 88, -198, -198, -198, -198, 217,
576     -198, -198, 218, -198, -198, 131, -198, -198, -198, -198,
577     -198, 131, -198, -198, -198, 89, -198, 149, 149, 109,
578     154, 213, 109, 131, 196, -198, -198, -198, -198
579 schoenebeck 35 };
580    
581     /* YYPGOTO[NTERM-NUM]. */
582 senkov 135 static const short yypgoto[] =
583 schoenebeck 35 {
584 capela 143 -198, -198, -24, -198, -198, -198, -198, -198, -198, -198,
585     -198, -198, -198, -66, -198, -198, -198, -198, -198, -198,
586     -198, -97, -26, -33, -198, 62, -198, 77, -197, -17
587 schoenebeck 35 };
588    
589     /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
590     positive, shift that token. If negative, reduce the rule which
591     number is the opposite. If zero, do what YYDEFACT says.
592     If YYTABLE_NINF, syntax error. */
593 senkov 135 #define YYTABLE_NINF -6
594 schoenebeck 35 static const short yytable[] =
595     {
596 capela 143 37, 132, 226, -5, 1, 82, 19, 80, 20, 143,
597     82, -5, -5, 2, 186, 3, 4, 5, 6, 7,
598     8, 30, 9, 10, 11, 12, 13, 14, 51, 31,
599     32, 33, 235, 61, 112, 238, 156, 21, 160, 161,
600     65, 66, 67, 68, 69, 62, 113, 38, 63, 173,
601     174, 175, 176, 177, 178, 179, 180, 99, 53, 82,
602     22, 70, 72, 73, 74, 75, 76, 188, 39, 82,
603     40, 41, 42, 110, 57, 58, 119, 199, 43, 44,
604     45, 46, 47, 77, 48, 49, 200, 122, 23, 123,
605     24, 82, 82, 210, 124, 125, 126, 127, 128, 229,
606     232, 33, 82, 34, 33, 35, 228, 112, 36, 100,
607     101, 102, 103, 205, 206, 207, 157, 158, 222, 223,
608     119, 55, 25, 26, 166, 167, 169, 27, 28, 29,
609     60, 79, 81, 236, 82, 83, 84, 85, 182, 86,
610     87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
611     97, 98, 33, 104, 216, 105, 106, 107, 111, 120,
612     130, 131, 234, 209, 133, 134, 135, 136, 137, 203,
613     204, 138, 139, 140, 141, 108, 215, 109, 142, 221,
614     144, 225, 145, 146, 147, 148, 149, 150, 151, 152,
615     153, 154, 155, 163, 164, 165, 171, 181, 237, 162,
616     183, 184, 185, 187, 189, 190, 191, 192, 193, 194,
617     233, 169, 195, 196, 197, 198, 201, 202, 211, 213,
618     218, 170, 0, 227, 230, 231
619 schoenebeck 35 };
620    
621 schoenebeck 123 static const short yycheck[] =
622 schoenebeck 35 {
623 capela 143 17, 98, 199, 0, 1, 3, 7, 31, 7, 7,
624     3, 8, 9, 10, 7, 12, 13, 14, 15, 16,
625     17, 0, 19, 20, 21, 22, 23, 24, 38, 8,
626     9, 3, 229, 25, 6, 232, 133, 7, 135, 136,
627     29, 30, 31, 32, 33, 37, 18, 25, 40, 146,
628     147, 148, 149, 150, 151, 152, 153, 81, 38, 3,
629     7, 50, 29, 30, 31, 32, 33, 11, 25, 3,
630     27, 28, 29, 90, 34, 35, 93, 11, 35, 36,
631     37, 38, 39, 50, 41, 42, 183, 36, 7, 38,
632     7, 3, 3, 190, 43, 44, 45, 46, 47, 11,
633     11, 3, 3, 5, 3, 7, 7, 6, 10, 30,
634     31, 32, 33, 4, 5, 6, 48, 49, 4, 5,
635     137, 39, 7, 7, 141, 142, 143, 7, 7, 7,
636     25, 25, 8, 230, 3, 7, 7, 7, 155, 7,
637     7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
638     7, 7, 3, 30, 6, 30, 30, 30, 5, 5,
639     5, 5, 228, 189, 7, 7, 7, 7, 7, 186,
640     187, 7, 7, 7, 7, 30, 193, 30, 7, 196,
641     7, 198, 7, 7, 7, 7, 7, 7, 7, 7,
642     7, 7, 7, 5, 5, 5, 5, 5, 231, 137,
643     7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
644     227, 228, 7, 7, 7, 7, 5, 5, 5, 5,
645     5, 144, -1, 7, 7, 7
646 schoenebeck 35 };
647    
648     /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
649     symbol of state STATE-NUM. */
650     static const unsigned char yystos[] =
651     {
652 senkov 141 0, 1, 10, 12, 13, 14, 15, 16, 17, 19,
653 capela 143 20, 21, 22, 23, 24, 52, 53, 54, 55, 7,
654 senkov 135 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
655 capela 143 0, 8, 9, 3, 5, 7, 10, 80, 25, 25,
656 senkov 141 27, 28, 29, 35, 36, 37, 38, 39, 41, 42,
657 capela 143 58, 38, 60, 38, 61, 39, 66, 34, 35, 62,
658     25, 25, 37, 40, 59, 29, 30, 31, 32, 33,
659     50, 56, 29, 30, 31, 32, 33, 50, 57, 25,
660     53, 8, 3, 7, 7, 7, 7, 7, 7, 7,
661     7, 7, 7, 7, 7, 7, 7, 7, 7, 53,
662 senkov 141 30, 31, 32, 33, 30, 30, 30, 30, 30, 30,
663 capela 143 80, 5, 6, 18, 67, 78, 80, 68, 76, 80,
664     5, 72, 36, 38, 43, 44, 45, 46, 47, 63,
665     5, 5, 72, 7, 7, 7, 7, 7, 7, 7,
666 senkov 135 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
667 capela 143 7, 7, 7, 7, 7, 7, 72, 48, 49, 65,
668     72, 72, 76, 5, 5, 5, 80, 80, 64, 80,
669     78, 5, 73, 72, 72, 72, 72, 72, 72, 72,
670     72, 5, 80, 7, 7, 7, 7, 7, 11, 7,
671     7, 7, 7, 7, 7, 7, 7, 7, 7, 11,
672     72, 5, 5, 80, 80, 4, 5, 6, 79, 73,
673     72, 5, 74, 5, 69, 80, 6, 77, 5, 75,
674     70, 80, 4, 5, 71, 80, 79, 7, 7, 11,
675     7, 7, 11, 80, 64, 79, 72, 74, 79
676 schoenebeck 35 };
677    
678     #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
679     # define YYSIZE_T __SIZE_TYPE__
680     #endif
681     #if ! defined (YYSIZE_T) && defined (size_t)
682     # define YYSIZE_T size_t
683     #endif
684     #if ! defined (YYSIZE_T)
685     # if defined (__STDC__) || defined (__cplusplus)
686     # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
687     # define YYSIZE_T size_t
688     # endif
689     #endif
690     #if ! defined (YYSIZE_T)
691     # define YYSIZE_T unsigned int
692     #endif
693    
694     #define yyerrok (yyerrstatus = 0)
695     #define yyclearin (yychar = YYEMPTY)
696     #define YYEMPTY (-2)
697     #define YYEOF 0
698    
699     #define YYACCEPT goto yyacceptlab
700     #define YYABORT goto yyabortlab
701     #define YYERROR goto yyerrlab1
702    
703    
704     /* Like YYERROR except do call yyerror. This remains here temporarily
705     to ease the transition to the new meaning of YYERROR, for GCC.
706     Once GCC version 2 has supplanted version 1, this can go. */
707    
708     #define YYFAIL goto yyerrlab
709    
710     #define YYRECOVERING() (!!yyerrstatus)
711    
712     #define YYBACKUP(Token, Value) \
713     do \
714     if (yychar == YYEMPTY && yylen == 1) \
715     { \
716     yychar = (Token); \
717     yylval = (Value); \
718     yytoken = YYTRANSLATE (yychar); \
719     YYPOPSTACK; \
720     goto yybackup; \
721     } \
722     else \
723     { \
724     yyerror ("syntax error: cannot back up");\
725     YYERROR; \
726     } \
727     while (0)
728    
729     #define YYTERROR 1
730     #define YYERRCODE 256
731    
732     /* YYLLOC_DEFAULT -- Compute the default location (before the actions
733     are run). */
734    
735     #ifndef YYLLOC_DEFAULT
736     # define YYLLOC_DEFAULT(Current, Rhs, N) \
737     Current.first_line = Rhs[1].first_line; \
738     Current.first_column = Rhs[1].first_column; \
739     Current.last_line = Rhs[N].last_line; \
740     Current.last_column = Rhs[N].last_column;
741     #endif
742    
743     /* YYLEX -- calling `yylex' with the right arguments. */
744    
745     #ifdef YYLEX_PARAM
746     # define YYLEX yylex (&yylval, YYLEX_PARAM)
747     #else
748     # define YYLEX yylex (&yylval)
749     #endif
750    
751     /* Enable debugging if requested. */
752     #if YYDEBUG
753    
754     # ifndef YYFPRINTF
755     # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
756     # define YYFPRINTF fprintf
757     # endif
758    
759     # define YYDPRINTF(Args) \
760     do { \
761     if (yydebug) \
762     YYFPRINTF Args; \
763     } while (0)
764    
765     # define YYDSYMPRINT(Args) \
766     do { \
767     if (yydebug) \
768     yysymprint Args; \
769     } while (0)
770    
771     # define YYDSYMPRINTF(Title, Token, Value, Location) \
772     do { \
773     if (yydebug) \
774     { \
775     YYFPRINTF (stderr, "%s ", Title); \
776     yysymprint (stderr, \
777     Token, Value); \
778     YYFPRINTF (stderr, "\n"); \
779     } \
780     } while (0)
781    
782     /*------------------------------------------------------------------.
783     | yy_stack_print -- Print the state stack from its BOTTOM up to its |
784     | TOP (cinluded). |
785     `------------------------------------------------------------------*/
786    
787     #if defined (__STDC__) || defined (__cplusplus)
788     static void
789     yy_stack_print (short *bottom, short *top)
790     #else
791     static void
792     yy_stack_print (bottom, top)
793     short *bottom;
794     short *top;
795     #endif
796     {
797     YYFPRINTF (stderr, "Stack now");
798     for (/* Nothing. */; bottom <= top; ++bottom)
799     YYFPRINTF (stderr, " %d", *bottom);
800     YYFPRINTF (stderr, "\n");
801     }
802    
803     # define YY_STACK_PRINT(Bottom, Top) \
804     do { \
805     if (yydebug) \
806     yy_stack_print ((Bottom), (Top)); \
807     } while (0)
808    
809    
810     /*------------------------------------------------.
811     | Report that the YYRULE is going to be reduced. |
812     `------------------------------------------------*/
813    
814     #if defined (__STDC__) || defined (__cplusplus)
815     static void
816     yy_reduce_print (int yyrule)
817     #else
818     static void
819     yy_reduce_print (yyrule)
820     int yyrule;
821     #endif
822     {
823     int yyi;
824     unsigned int yylineno = yyrline[yyrule];
825     YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
826     yyrule - 1, yylineno);
827     /* Print the symbols being reduced, and their result. */
828     for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
829     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
830     YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
831     }
832    
833     # define YY_REDUCE_PRINT(Rule) \
834     do { \
835     if (yydebug) \
836     yy_reduce_print (Rule); \
837     } while (0)
838    
839     /* Nonzero means print parse trace. It is left uninitialized so that
840     multiple parsers can coexist. */
841     int yydebug;
842     #else /* !YYDEBUG */
843     # define YYDPRINTF(Args)
844     # define YYDSYMPRINT(Args)
845     # define YYDSYMPRINTF(Title, Token, Value, Location)
846     # define YY_STACK_PRINT(Bottom, Top)
847     # define YY_REDUCE_PRINT(Rule)
848     #endif /* !YYDEBUG */
849    
850    
851     /* YYINITDEPTH -- initial size of the parser's stacks. */
852     #ifndef YYINITDEPTH
853     # define YYINITDEPTH 200
854     #endif
855    
856     /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
857     if the built-in stack extension method is used).
858    
859     Do not make this value too large; the results are undefined if
860     SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
861     evaluated with infinite-precision integer arithmetic. */
862    
863     #if YYMAXDEPTH == 0
864     # undef YYMAXDEPTH
865     #endif
866    
867     #ifndef YYMAXDEPTH
868     # define YYMAXDEPTH 10000
869     #endif
870    
871    
872    
873     #if YYERROR_VERBOSE
874    
875     # ifndef yystrlen
876     # if defined (__GLIBC__) && defined (_STRING_H)
877     # define yystrlen strlen
878     # else
879     /* Return the length of YYSTR. */
880     static YYSIZE_T
881     # if defined (__STDC__) || defined (__cplusplus)
882     yystrlen (const char *yystr)
883     # else
884     yystrlen (yystr)
885     const char *yystr;
886     # endif
887     {
888     register const char *yys = yystr;
889    
890     while (*yys++ != '\0')
891     continue;
892    
893     return yys - yystr - 1;
894     }
895     # endif
896     # endif
897    
898     # ifndef yystpcpy
899     # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
900     # define yystpcpy stpcpy
901     # else
902     /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
903     YYDEST. */
904     static char *
905     # if defined (__STDC__) || defined (__cplusplus)
906     yystpcpy (char *yydest, const char *yysrc)
907     # else
908     yystpcpy (yydest, yysrc)
909     char *yydest;
910     const char *yysrc;
911     # endif
912     {
913     register char *yyd = yydest;
914     register const char *yys = yysrc;
915    
916     while ((*yyd++ = *yys++) != '\0')
917     continue;
918    
919     return yyd - 1;
920     }
921     # endif
922     # endif
923    
924     #endif /* !YYERROR_VERBOSE */
925    
926    
927    
928     #if YYDEBUG
929     /*--------------------------------.
930     | Print this symbol on YYOUTPUT. |
931     `--------------------------------*/
932    
933     #if defined (__STDC__) || defined (__cplusplus)
934     static void
935     yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
936     #else
937     static void
938     yysymprint (yyoutput, yytype, yyvaluep)
939     FILE *yyoutput;
940     int yytype;
941     YYSTYPE *yyvaluep;
942     #endif
943     {
944     /* Pacify ``unused variable'' warnings. */
945     (void) yyvaluep;
946    
947     if (yytype < YYNTOKENS)
948     {
949     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
950     # ifdef YYPRINT
951     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
952     # endif
953     }
954     else
955     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
956    
957     switch (yytype)
958     {
959     default:
960     break;
961     }
962     YYFPRINTF (yyoutput, ")");
963     }
964    
965     #endif /* ! YYDEBUG */
966     /*-----------------------------------------------.
967     | Release the memory associated to this symbol. |
968     `-----------------------------------------------*/
969    
970     #if defined (__STDC__) || defined (__cplusplus)
971     static void
972     yydestruct (int yytype, YYSTYPE *yyvaluep)
973     #else
974     static void
975     yydestruct (yytype, yyvaluep)
976     int yytype;
977     YYSTYPE *yyvaluep;
978     #endif
979     {
980     /* Pacify ``unused variable'' warnings. */
981     (void) yyvaluep;
982    
983     switch (yytype)
984     {
985    
986     default:
987     break;
988     }
989     }
990    
991    
992     /* Prevent warnings from -Wmissing-prototypes. */
993    
994     #ifdef YYPARSE_PARAM
995     # if defined (__STDC__) || defined (__cplusplus)
996     int yyparse (void *YYPARSE_PARAM);
997     # else
998     int yyparse ();
999     # endif
1000     #else /* ! YYPARSE_PARAM */
1001     #if defined (__STDC__) || defined (__cplusplus)
1002     int yyparse (void);
1003     #else
1004     int yyparse ();
1005     #endif
1006     #endif /* ! YYPARSE_PARAM */
1007    
1008    
1009    
1010    
1011    
1012    
1013     /*----------.
1014     | yyparse. |
1015     `----------*/
1016    
1017     #ifdef YYPARSE_PARAM
1018     # if defined (__STDC__) || defined (__cplusplus)
1019     int yyparse (void *YYPARSE_PARAM)
1020     # else
1021     int yyparse (YYPARSE_PARAM)
1022     void *YYPARSE_PARAM;
1023     # endif
1024     #else /* ! YYPARSE_PARAM */
1025     #if defined (__STDC__) || defined (__cplusplus)
1026     int
1027     yyparse (void)
1028     #else
1029     int
1030     yyparse ()
1031    
1032     #endif
1033     #endif
1034     {
1035     /* The lookahead symbol. */
1036     int yychar;
1037    
1038     /* The semantic value of the lookahead symbol. */
1039     YYSTYPE yylval;
1040    
1041     /* Number of syntax errors so far. */
1042     int yynerrs;
1043    
1044     register int yystate;
1045     register int yyn;
1046     int yyresult;
1047     /* Number of tokens to shift before error messages enabled. */
1048     int yyerrstatus;
1049     /* Lookahead token as an internal (translated) token number. */
1050     int yytoken = 0;
1051    
1052     /* Three stacks and their tools:
1053     `yyss': related to states,
1054     `yyvs': related to semantic values,
1055     `yyls': related to locations.
1056    
1057     Refer to the stacks thru separate pointers, to allow yyoverflow
1058     to reallocate them elsewhere. */
1059    
1060     /* The state stack. */
1061     short yyssa[YYINITDEPTH];
1062     short *yyss = yyssa;
1063     register short *yyssp;
1064    
1065     /* The semantic value stack. */
1066     YYSTYPE yyvsa[YYINITDEPTH];
1067     YYSTYPE *yyvs = yyvsa;
1068     register YYSTYPE *yyvsp;
1069    
1070    
1071    
1072     #define YYPOPSTACK (yyvsp--, yyssp--)
1073    
1074     YYSIZE_T yystacksize = YYINITDEPTH;
1075    
1076     /* The variables used to return semantic value and location from the
1077     action routines. */
1078     YYSTYPE yyval;
1079    
1080    
1081     /* When reducing, the number of symbols on the RHS of the reduced
1082     rule. */
1083     int yylen;
1084    
1085     YYDPRINTF ((stderr, "Starting parse\n"));
1086    
1087     yystate = 0;
1088     yyerrstatus = 0;
1089     yynerrs = 0;
1090     yychar = YYEMPTY; /* Cause a token to be read. */
1091    
1092     /* Initialize stack pointers.
1093     Waste one element of value and location stack
1094     so that they stay on the same level as the state stack.
1095     The wasted elements are never initialized. */
1096    
1097     yyssp = yyss;
1098     yyvsp = yyvs;
1099    
1100     goto yysetstate;
1101    
1102     /*------------------------------------------------------------.
1103     | yynewstate -- Push a new state, which is found in yystate. |
1104     `------------------------------------------------------------*/
1105     yynewstate:
1106     /* In all cases, when you get here, the value and location stacks
1107     have just been pushed. so pushing a state here evens the stacks.
1108     */
1109     yyssp++;
1110    
1111     yysetstate:
1112     *yyssp = yystate;
1113    
1114     if (yyss + yystacksize - 1 <= yyssp)
1115     {
1116     /* Get the current used size of the three stacks, in elements. */
1117     YYSIZE_T yysize = yyssp - yyss + 1;
1118    
1119     #ifdef yyoverflow
1120     {
1121     /* Give user a chance to reallocate the stack. Use copies of
1122     these so that the &'s don't force the real ones into
1123     memory. */
1124     YYSTYPE *yyvs1 = yyvs;
1125     short *yyss1 = yyss;
1126    
1127    
1128     /* Each stack pointer address is followed by the size of the
1129     data in use in that stack, in bytes. This used to be a
1130     conditional around just the two extra args, but that might
1131     be undefined if yyoverflow is a macro. */
1132     yyoverflow ("parser stack overflow",
1133     &yyss1, yysize * sizeof (*yyssp),
1134     &yyvs1, yysize * sizeof (*yyvsp),
1135    
1136     &yystacksize);
1137    
1138     yyss = yyss1;
1139     yyvs = yyvs1;
1140     }
1141     #else /* no yyoverflow */
1142     # ifndef YYSTACK_RELOCATE
1143     goto yyoverflowlab;
1144     # else
1145     /* Extend the stack our own way. */
1146     if (YYMAXDEPTH <= yystacksize)
1147     goto yyoverflowlab;
1148     yystacksize *= 2;
1149     if (YYMAXDEPTH < yystacksize)
1150     yystacksize = YYMAXDEPTH;
1151    
1152     {
1153     short *yyss1 = yyss;
1154     union yyalloc *yyptr =
1155     (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1156     if (! yyptr)
1157     goto yyoverflowlab;
1158     YYSTACK_RELOCATE (yyss);
1159     YYSTACK_RELOCATE (yyvs);
1160    
1161     # undef YYSTACK_RELOCATE
1162     if (yyss1 != yyssa)
1163     YYSTACK_FREE (yyss1);
1164     }
1165     # endif
1166     #endif /* no yyoverflow */
1167    
1168     yyssp = yyss + yysize - 1;
1169     yyvsp = yyvs + yysize - 1;
1170    
1171    
1172     YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1173     (unsigned long int) yystacksize));
1174    
1175     if (yyss + yystacksize - 1 <= yyssp)
1176     YYABORT;
1177     }
1178    
1179     YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1180    
1181     goto yybackup;
1182    
1183     /*-----------.
1184     | yybackup. |
1185     `-----------*/
1186     yybackup:
1187    
1188     /* Do appropriate processing given the current state. */
1189     /* Read a lookahead token if we need one and don't already have one. */
1190     /* yyresume: */
1191    
1192     /* First try to decide what to do without reference to lookahead token. */
1193    
1194     yyn = yypact[yystate];
1195     if (yyn == YYPACT_NINF)
1196     goto yydefault;
1197    
1198     /* Not known => get a lookahead token if don't already have one. */
1199    
1200     /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1201     if (yychar == YYEMPTY)
1202     {
1203     YYDPRINTF ((stderr, "Reading a token: "));
1204     yychar = YYLEX;
1205     }
1206    
1207     if (yychar <= YYEOF)
1208     {
1209     yychar = yytoken = YYEOF;
1210     YYDPRINTF ((stderr, "Now at end of input.\n"));
1211     }
1212     else
1213     {
1214     yytoken = YYTRANSLATE (yychar);
1215     YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1216     }
1217    
1218     /* If the proper action on seeing token YYTOKEN is to reduce or to
1219     detect an error, take that action. */
1220     yyn += yytoken;
1221     if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1222     goto yydefault;
1223     yyn = yytable[yyn];
1224     if (yyn <= 0)
1225     {
1226     if (yyn == 0 || yyn == YYTABLE_NINF)
1227     goto yyerrlab;
1228     yyn = -yyn;
1229     goto yyreduce;
1230     }
1231    
1232     if (yyn == YYFINAL)
1233     YYACCEPT;
1234    
1235     /* Shift the lookahead token. */
1236     YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1237    
1238     /* Discard the token being shifted unless it is eof. */
1239     if (yychar != YYEOF)
1240     yychar = YYEMPTY;
1241    
1242     *++yyvsp = yylval;
1243    
1244    
1245     /* Count tokens shifted since error; after three, turn off error
1246     status. */
1247     if (yyerrstatus)
1248     yyerrstatus--;
1249    
1250     yystate = yyn;
1251     goto yynewstate;
1252    
1253    
1254     /*-----------------------------------------------------------.
1255     | yydefault -- do the default action for the current state. |
1256     `-----------------------------------------------------------*/
1257     yydefault:
1258     yyn = yydefact[yystate];
1259     if (yyn == 0)
1260     goto yyerrlab;
1261     goto yyreduce;
1262    
1263    
1264     /*-----------------------------.
1265     | yyreduce -- Do a reduction. |
1266     `-----------------------------*/
1267     yyreduce:
1268     /* yyn is the number of a rule to reduce with. */
1269     yylen = yyr2[yyn];
1270    
1271     /* If YYLEN is nonzero, implement the default value of the action:
1272     `$$ = $1'.
1273    
1274     Otherwise, the following line sets YYVAL to garbage.
1275     This behavior is undocumented and Bison
1276     users should not rely upon it. Assigning to YYVAL
1277     unconditionally makes the parser a bit smaller, and it avoids a
1278     GCC warning that YYVAL may be used uninitialized. */
1279     yyval = yyvsp[1-yylen];
1280    
1281    
1282     YY_REDUCE_PRINT (yyn);
1283     switch (yyn)
1284     {
1285 schoenebeck 111 case 7:
1286 senkov 141 #line 84 "lscp.y"
1287 schoenebeck 35 { LSCPSERVER->AnswerClient(yyvsp[0].String); }
1288     break;
1289    
1290 schoenebeck 111 case 8:
1291 senkov 141 #line 85 "lscp.y"
1292 schoenebeck 35 { LSCPSERVER->AnswerClient("Err:0:Unknown command.\r\n"); RESTART; return LSCP_SYNTAX_ERROR; }
1293     break;
1294    
1295 schoenebeck 111 case 14:
1296 senkov 141 #line 95 "lscp.y"
1297 schoenebeck 35 { yyval.String = LSCPSERVER->AddChannel(); }
1298     break;
1299    
1300 schoenebeck 111 case 15:
1301 senkov 141 #line 96 "lscp.y"
1302 schoenebeck 35 { yyval.String = yyvsp[0].String; }
1303     break;
1304    
1305 schoenebeck 111 case 16:
1306 senkov 141 #line 97 "lscp.y"
1307 schoenebeck 35 { yyval.String = yyvsp[0].String; }
1308     break;
1309    
1310 schoenebeck 111 case 17:
1311 senkov 141 #line 98 "lscp.y"
1312 schoenebeck 123 { yyval.String = yyvsp[0].String; }
1313 schoenebeck 35 break;
1314    
1315 schoenebeck 111 case 18:
1316 senkov 141 #line 99 "lscp.y"
1317 schoenebeck 35 { yyval.String = yyvsp[0].String; }
1318     break;
1319    
1320 schoenebeck 111 case 19:
1321 senkov 141 #line 100 "lscp.y"
1322     { yyval.String = yyvsp[0].String; }
1323 schoenebeck 35 break;
1324    
1325 schoenebeck 111 case 20:
1326 senkov 141 #line 101 "lscp.y"
1327     { yyval.String = LSCPSERVER->RemoveChannel(yyvsp[0].Number); }
1328 schoenebeck 35 break;
1329    
1330 schoenebeck 111 case 21:
1331 senkov 141 #line 102 "lscp.y"
1332     { yyval.String = yyvsp[0].String; }
1333 schoenebeck 35 break;
1334    
1335 schoenebeck 111 case 22:
1336 senkov 141 #line 103 "lscp.y"
1337 senkov 135 { yyval.String = yyvsp[0].String; }
1338 schoenebeck 35 break;
1339    
1340 schoenebeck 111 case 23:
1341 senkov 141 #line 104 "lscp.y"
1342 senkov 135 { yyval.String = yyvsp[0].String; }
1343 schoenebeck 35 break;
1344    
1345 schoenebeck 111 case 24:
1346 senkov 141 #line 105 "lscp.y"
1347     { yyval.String = LSCPSERVER->ResetChannel(yyvsp[0].Number); }
1348 schoenebeck 35 break;
1349    
1350 schoenebeck 111 case 25:
1351 senkov 141 #line 106 "lscp.y"
1352     { LSCPSERVER->AnswerClient("Bye!\r\n"); return 0; }
1353 schoenebeck 35 break;
1354    
1355 schoenebeck 111 case 26:
1356 senkov 141 #line 109 "lscp.y"
1357     { yyval.String = LSCPSERVER->SubscribeNotification(event_channels); }
1358 schoenebeck 35 break;
1359    
1360 schoenebeck 111 case 27:
1361 senkov 141 #line 110 "lscp.y"
1362     { yyval.String = LSCPSERVER->SubscribeNotification(event_voice_count); }
1363 schoenebeck 35 break;
1364    
1365 schoenebeck 111 case 28:
1366 senkov 141 #line 111 "lscp.y"
1367     { yyval.String = LSCPSERVER->SubscribeNotification(event_stream_count); }
1368 schoenebeck 35 break;
1369    
1370 schoenebeck 111 case 29:
1371 senkov 141 #line 112 "lscp.y"
1372     { yyval.String = LSCPSERVER->SubscribeNotification(event_channel_buffer_fill); }
1373 schoenebeck 35 break;
1374    
1375 schoenebeck 111 case 30:
1376 senkov 141 #line 113 "lscp.y"
1377     { yyval.String = LSCPSERVER->SubscribeNotification(event_channel_info); }
1378 schoenebeck 35 break;
1379    
1380 schoenebeck 111 case 31:
1381 senkov 141 #line 114 "lscp.y"
1382     { yyval.String = LSCPSERVER->SubscribeNotification(event_misc); }
1383 schoenebeck 35 break;
1384    
1385 schoenebeck 111 case 32:
1386 senkov 141 #line 117 "lscp.y"
1387     { yyval.String = LSCPSERVER->UnsubscribeNotification(event_channels); }
1388 schoenebeck 35 break;
1389    
1390 schoenebeck 111 case 33:
1391 senkov 141 #line 118 "lscp.y"
1392     { yyval.String = LSCPSERVER->UnsubscribeNotification(event_voice_count); }
1393 schoenebeck 35 break;
1394    
1395 schoenebeck 111 case 34:
1396 senkov 141 #line 119 "lscp.y"
1397     { yyval.String = LSCPSERVER->UnsubscribeNotification(event_stream_count); }
1398 schoenebeck 35 break;
1399    
1400 schoenebeck 111 case 35:
1401 senkov 141 #line 120 "lscp.y"
1402     { yyval.String = LSCPSERVER->UnsubscribeNotification(event_channel_buffer_fill); }
1403 schoenebeck 35 break;
1404    
1405 schoenebeck 111 case 36:
1406 senkov 141 #line 121 "lscp.y"
1407     { yyval.String = LSCPSERVER->UnsubscribeNotification(event_channel_info); }
1408 schoenebeck 35 break;
1409    
1410 schoenebeck 111 case 37:
1411 senkov 141 #line 122 "lscp.y"
1412     { yyval.String = LSCPSERVER->UnsubscribeNotification(event_misc); }
1413 schoenebeck 123 break;
1414    
1415     case 38:
1416 senkov 141 #line 125 "lscp.y"
1417     { yyval.String = LSCPSERVER->GetAvailableEngines(); }
1418 schoenebeck 123 break;
1419    
1420     case 39:
1421 senkov 141 #line 126 "lscp.y"
1422     { yyval.String = LSCPSERVER->GetAvailableAudioOutputDrivers(); }
1423 schoenebeck 123 break;
1424    
1425     case 40:
1426 senkov 141 #line 127 "lscp.y"
1427     { yyval.String = LSCPSERVER->GetAudioOutputDriverInfo(yyvsp[0].String); }
1428 schoenebeck 123 break;
1429    
1430     case 41:
1431 senkov 141 #line 128 "lscp.y"
1432     { yyval.String = LSCPSERVER->GetAudioOutputDriverParameterInfo(yyvsp[-2].String, yyvsp[0].String); }
1433 schoenebeck 35 break;
1434    
1435 schoenebeck 123 case 42:
1436 senkov 141 #line 129 "lscp.y"
1437     { yyval.String = LSCPSERVER->GetAudioOutputDriverParameterInfo(yyvsp[-4].String, yyvsp[-2].String, yyvsp[0].KeyValList); }
1438 schoenebeck 123 break;
1439    
1440     case 43:
1441 senkov 141 #line 130 "lscp.y"
1442     { yyval.String = LSCPSERVER->GetAudioOutputDeviceCount(); }
1443 schoenebeck 123 break;
1444    
1445     case 44:
1446 senkov 141 #line 131 "lscp.y"
1447     { yyval.String = LSCPSERVER->GetAudioOutputDeviceInfo(yyvsp[0].Number); }
1448 schoenebeck 35 break;
1449    
1450 schoenebeck 123 case 45:
1451 senkov 141 #line 132 "lscp.y"
1452     { yyval.String = LSCPSERVER->GetAudioOutputChannelInfo(yyvsp[-2].Number, yyvsp[0].Number); }
1453 schoenebeck 35 break;
1454    
1455 schoenebeck 123 case 46:
1456 senkov 141 #line 133 "lscp.y"
1457     { yyval.String = LSCPSERVER->GetAudioOutputChannelParameterInfo(yyvsp[-4].Number, yyvsp[-2].Number, yyvsp[0].String); }
1458 schoenebeck 35 break;
1459    
1460 schoenebeck 123 case 47:
1461 senkov 141 #line 134 "lscp.y"
1462     { yyval.String = LSCPSERVER->GetChannels(); }
1463 schoenebeck 35 break;
1464    
1465 schoenebeck 123 case 48:
1466 senkov 141 #line 135 "lscp.y"
1467     { yyval.String = LSCPSERVER->GetChannelInfo(yyvsp[0].Number); }
1468 schoenebeck 35 break;
1469    
1470 schoenebeck 123 case 49:
1471 senkov 141 #line 136 "lscp.y"
1472     { yyval.String = LSCPSERVER->GetBufferFill(yyvsp[-2].FillResponse, yyvsp[0].Number); }
1473 schoenebeck 35 break;
1474    
1475 schoenebeck 123 case 50:
1476 senkov 141 #line 137 "lscp.y"
1477     { yyval.String = LSCPSERVER->GetStreamCount(yyvsp[0].Number); }
1478 schoenebeck 35 break;
1479    
1480 schoenebeck 123 case 51:
1481 senkov 141 #line 138 "lscp.y"
1482     { yyval.String = LSCPSERVER->GetVoiceCount(yyvsp[0].Number); }
1483 schoenebeck 123 break;
1484    
1485     case 52:
1486 senkov 141 #line 139 "lscp.y"
1487     { yyval.String = LSCPSERVER->GetEngineInfo(yyvsp[0].String); }
1488 schoenebeck 123 break;
1489    
1490     case 53:
1491 senkov 141 #line 142 "lscp.y"
1492     { yyval.String = LSCPSERVER->SetAudioOutputDeviceParameter(yyvsp[-4].Number, yyvsp[-2].String, yyvsp[0].String); }
1493 schoenebeck 123 break;
1494    
1495     case 54:
1496 senkov 141 #line 143 "lscp.y"
1497     { yyval.String = LSCPSERVER->SetAudioOutputChannelParameter(yyvsp[-6].Number, yyvsp[-4].Number, yyvsp[-2].String, yyvsp[0].String); }
1498 schoenebeck 123 break;
1499    
1500     case 55:
1501 senkov 141 #line 144 "lscp.y"
1502     { yyval.String = yyvsp[0].String; }
1503 schoenebeck 123 break;
1504    
1505     case 56:
1506 senkov 141 #line 147 "lscp.y"
1507     { yyval.String = LSCPSERVER->CreateAudioOutputDevice(yyvsp[-2].String,yyvsp[0].KeyValList); }
1508 schoenebeck 123 break;
1509    
1510     case 57:
1511 senkov 141 #line 148 "lscp.y"
1512     { yyval.String = LSCPSERVER->CreateAudioOutputDevice(yyvsp[0].String); }
1513 schoenebeck 123 break;
1514    
1515     case 58:
1516 senkov 141 #line 151 "lscp.y"
1517     { yyval.String = LSCPSERVER->DestroyAudioOutputDevice(yyvsp[0].Number); }
1518 schoenebeck 123 break;
1519    
1520     case 59:
1521 senkov 141 #line 154 "lscp.y"
1522     { yyval.String = yyvsp[0].String; }
1523 schoenebeck 123 break;
1524    
1525     case 60:
1526 senkov 141 #line 155 "lscp.y"
1527 senkov 135 { yyval.String = yyvsp[0].String; }
1528 schoenebeck 123 break;
1529    
1530     case 61:
1531 senkov 141 #line 158 "lscp.y"
1532     { yyval.String = LSCPSERVER->SetAudioOutputDevice(yyvsp[0].Number, yyvsp[-2].Number); }
1533 schoenebeck 123 break;
1534    
1535     case 62:
1536 senkov 141 #line 159 "lscp.y"
1537     { yyval.String = LSCPSERVER->SetAudioOutputChannel(yyvsp[-2].Number, yyvsp[0].Number, yyvsp[-4].Number); }
1538 schoenebeck 123 break;
1539    
1540 senkov 135 case 63:
1541 senkov 141 #line 160 "lscp.y"
1542 capela 143 { yyval.String = LSCPSERVER->SetAudioOutputType(yyvsp[0].String, yyvsp[-2].Number); }
1543 senkov 135 break;
1544    
1545     case 64:
1546 senkov 141 #line 161 "lscp.y"
1547 capela 143 { yyval.String = LSCPSERVER->SetMIDIInputPort(yyvsp[0].String, yyvsp[-2].Number); }
1548 senkov 135 break;
1549    
1550 schoenebeck 123 case 65:
1551 senkov 141 #line 162 "lscp.y"
1552 capela 143 { yyval.String = LSCPSERVER->SetMIDIInputChannel(yyvsp[0].Number, yyvsp[-2].Number); }
1553 schoenebeck 35 break;
1554    
1555 senkov 135 case 66:
1556 senkov 141 #line 163 "lscp.y"
1557 capela 143 { yyval.String = LSCPSERVER->SetMIDIInputType(yyvsp[0].String, yyvsp[-2].Number); }
1558 schoenebeck 35 break;
1559    
1560 senkov 135 case 67:
1561 capela 143 #line 164 "lscp.y"
1562     { yyval.String = LSCPSERVER->SetVolume(yyvsp[0].Dotnum, yyvsp[-2].Number); }
1563 senkov 135 break;
1564    
1565     case 68:
1566 senkov 141 #line 167 "lscp.y"
1567 capela 143 { yyval.KeyValList[yyvsp[-2].String] = yyvsp[0].String; }
1568 senkov 135 break;
1569    
1570     case 69:
1571 capela 143 #line 168 "lscp.y"
1572     { yyval.KeyValList = yyvsp[-4].KeyValList; yyval.KeyValList[yyvsp[-2].String] = yyvsp[0].String; }
1573 senkov 135 break;
1574    
1575     case 70:
1576 senkov 141 #line 171 "lscp.y"
1577 capela 143 { yyval.FillResponse = fill_response_bytes; }
1578 senkov 135 break;
1579    
1580     case 71:
1581 capela 143 #line 172 "lscp.y"
1582     { yyval.FillResponse = fill_response_percentage; }
1583 senkov 135 break;
1584    
1585     case 72:
1586 capela 143 #line 175 "lscp.y"
1587     { yyval.String = LSCPSERVER->GetAudioOutputDevices(); }
1588 senkov 135 break;
1589    
1590     case 73:
1591 senkov 141 #line 178 "lscp.y"
1592 capela 143 { yyval.String = LSCPSERVER->LoadInstrument(yyvsp[-4].String, yyvsp[-2].Number, yyvsp[0].Number); }
1593     break;
1594    
1595     case 74:
1596     #line 179 "lscp.y"
1597 senkov 141 { yyval.String = LSCPSERVER->LoadInstrument(yyvsp[-4].String, yyvsp[-2].Number, yyvsp[0].Number, true); }
1598 senkov 138 break;
1599    
1600 capela 143 case 75:
1601     #line 182 "lscp.y"
1602 senkov 135 { yyval.String = LSCPSERVER->LoadEngine(yyvsp[-2].String, yyvsp[0].Number); }
1603     break;
1604    
1605 capela 143 case 79:
1606     #line 192 "lscp.y"
1607 senkov 135 { yyval.Dotnum = yyvsp[0].Number; }
1608     break;
1609    
1610 capela 143 case 88:
1611     #line 217 "lscp.y"
1612 schoenebeck 35 { yyval.String = yyvsp[0].String; }
1613     break;
1614    
1615 capela 143 case 89:
1616     #line 218 "lscp.y"
1617 schoenebeck 35 { std::stringstream ss; ss << yyvsp[0].Number; yyval.String = ss.str(); }
1618     break;
1619    
1620 capela 143 case 90:
1621     #line 219 "lscp.y"
1622 senkov 135 { std::stringstream ss; ss << yyvsp[0].Dotnum; yyval.String = ss.str(); }
1623 schoenebeck 35 break;
1624    
1625 capela 143 case 91:
1626     #line 222 "lscp.y"
1627 schoenebeck 35 { std::string s; s = yyvsp[0].Char; yyval.String = s; }
1628     break;
1629    
1630 capela 143 case 92:
1631     #line 223 "lscp.y"
1632 schoenebeck 35 { yyval.String = yyvsp[-1].String + yyvsp[0].Char; }
1633     break;
1634    
1635    
1636     }
1637    
1638     /* Line 999 of yacc.c. */
1639 capela 143 #line 1639 "y.tab.c"
1640 schoenebeck 35
1641     yyvsp -= yylen;
1642     yyssp -= yylen;
1643    
1644    
1645     YY_STACK_PRINT (yyss, yyssp);
1646    
1647     *++yyvsp = yyval;
1648    
1649    
1650     /* Now `shift' the result of the reduction. Determine what state
1651     that goes to, based on the state we popped back to and the rule
1652     number reduced by. */
1653    
1654     yyn = yyr1[yyn];
1655    
1656     yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1657     if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1658     yystate = yytable[yystate];
1659     else
1660     yystate = yydefgoto[yyn - YYNTOKENS];
1661    
1662     goto yynewstate;
1663    
1664    
1665     /*------------------------------------.
1666     | yyerrlab -- here on detecting error |
1667     `------------------------------------*/
1668     yyerrlab:
1669     /* If not already recovering from an error, report this error. */
1670     if (!yyerrstatus)
1671     {
1672     ++yynerrs;
1673     #if YYERROR_VERBOSE
1674     yyn = yypact[yystate];
1675    
1676     if (YYPACT_NINF < yyn && yyn < YYLAST)
1677     {
1678     YYSIZE_T yysize = 0;
1679     int yytype = YYTRANSLATE (yychar);
1680     char *yymsg;
1681     int yyx, yycount;
1682    
1683     yycount = 0;
1684     /* Start YYX at -YYN if negative to avoid negative indexes in
1685     YYCHECK. */
1686     for (yyx = yyn < 0 ? -yyn : 0;
1687     yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
1688     if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1689     yysize += yystrlen (yytname[yyx]) + 15, yycount++;
1690     yysize += yystrlen ("syntax error, unexpected ") + 1;
1691     yysize += yystrlen (yytname[yytype]);
1692     yymsg = (char *) YYSTACK_ALLOC (yysize);
1693     if (yymsg != 0)
1694     {
1695     char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
1696     yyp = yystpcpy (yyp, yytname[yytype]);
1697    
1698     if (yycount < 5)
1699     {
1700     yycount = 0;
1701     for (yyx = yyn < 0 ? -yyn : 0;
1702     yyx < (int) (sizeof (yytname) / sizeof (char *));
1703     yyx++)
1704     if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1705     {
1706     const char *yyq = ! yycount ? ", expecting " : " or ";
1707     yyp = yystpcpy (yyp, yyq);
1708     yyp = yystpcpy (yyp, yytname[yyx]);
1709     yycount++;
1710     }
1711     }
1712     yyerror (yymsg);
1713     YYSTACK_FREE (yymsg);
1714     }
1715     else
1716     yyerror ("syntax error; also virtual memory exhausted");
1717     }
1718     else
1719     #endif /* YYERROR_VERBOSE */
1720     yyerror ("syntax error");
1721     }
1722    
1723    
1724    
1725     if (yyerrstatus == 3)
1726     {
1727     /* If just tried and failed to reuse lookahead token after an
1728     error, discard it. */
1729    
1730     /* Return failure if at end of input. */
1731     if (yychar == YYEOF)
1732     {
1733     /* Pop the error token. */
1734     YYPOPSTACK;
1735     /* Pop the rest of the stack. */
1736     while (yyss < yyssp)
1737     {
1738     YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1739     yydestruct (yystos[*yyssp], yyvsp);
1740     YYPOPSTACK;
1741     }
1742     YYABORT;
1743     }
1744    
1745     YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1746     yydestruct (yytoken, &yylval);
1747     yychar = YYEMPTY;
1748    
1749     }
1750    
1751     /* Else will try to reuse lookahead token after shifting the error
1752     token. */
1753     goto yyerrlab1;
1754    
1755    
1756     /*----------------------------------------------------.
1757     | yyerrlab1 -- error raised explicitly by an action. |
1758     `----------------------------------------------------*/
1759     yyerrlab1:
1760     yyerrstatus = 3; /* Each real token shifted decrements this. */
1761    
1762     for (;;)
1763     {
1764     yyn = yypact[yystate];
1765     if (yyn != YYPACT_NINF)
1766     {
1767     yyn += YYTERROR;
1768     if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1769     {
1770     yyn = yytable[yyn];
1771     if (0 < yyn)
1772     break;
1773     }
1774     }
1775    
1776     /* Pop the current state because it cannot handle the error token. */
1777     if (yyssp == yyss)
1778     YYABORT;
1779    
1780     YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1781     yydestruct (yystos[yystate], yyvsp);
1782     yyvsp--;
1783     yystate = *--yyssp;
1784    
1785     YY_STACK_PRINT (yyss, yyssp);
1786     }
1787    
1788     if (yyn == YYFINAL)
1789     YYACCEPT;
1790    
1791     YYDPRINTF ((stderr, "Shifting error token, "));
1792    
1793     *++yyvsp = yylval;
1794    
1795    
1796     yystate = yyn;
1797     goto yynewstate;
1798    
1799    
1800     /*-------------------------------------.
1801     | yyacceptlab -- YYACCEPT comes here. |
1802     `-------------------------------------*/
1803     yyacceptlab:
1804     yyresult = 0;
1805     goto yyreturn;
1806    
1807     /*-----------------------------------.
1808     | yyabortlab -- YYABORT comes here. |
1809     `-----------------------------------*/
1810     yyabortlab:
1811     yyresult = 1;
1812     goto yyreturn;
1813    
1814     #ifndef yyoverflow
1815     /*----------------------------------------------.
1816     | yyoverflowlab -- parser overflow comes here. |
1817     `----------------------------------------------*/
1818     yyoverflowlab:
1819     yyerror ("parser stack overflow");
1820     yyresult = 2;
1821     /* Fall through. */
1822     #endif
1823    
1824     yyreturn:
1825     #ifndef yyoverflow
1826     if (yyss != yyssa)
1827     YYSTACK_FREE (yyss);
1828     #endif
1829     return yyresult;
1830     }
1831    
1832    
1833 senkov 141 #line 77 "lscp.y"
1834 schoenebeck 35
1835    
1836     /**
1837     * Will be called when an error occured (usually syntax error).
1838     */
1839     void yyerror(const char* s) {
1840     dmsg(2,("LSCPParser: %s\n", s));
1841     }
1842    
1843     /**
1844     * Clears input buffer and restarts scanner.
1845     */
1846     void restart(yyparse_param_t* pparam, int& yychar) {
1847     // restart scanner
1848     yyrestart(stdin, pparam->pScanner);
1849     // flush input buffer
1850     static char buf[1024];
1851     while(recv(hSession, buf, 1024, MSG_DONTWAIT) > 0);
1852     // reset lookahead symbol
1853     yyclearin;
1854     }
1855    
1856    

  ViewVC Help
Powered by ViewVC