ref: 4c879fbc5fa9a9796fecd144fed13b12c19384fd
parent: d83f0b805f983c45614b2fca92f676c25801830c
author: Andrew Chambers <ac@acha.ninja>
date: Sun Apr 10 18:39:34 CDT 2022
Rework bootstrap, checkin minipeg.c.
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@
CFLAGS = -g -O2 -Wall
SRC = version.h tree.h compile.c tree.c peg.c
-GENSRC = minipeg.c peg-new.c peg-amalg.c www/index.html
+GENSRC = minipeg-new.c peg.c www/index.html
OBJ = compile.o tree.o peg.o
all: minipeg
@@ -18,37 +18,31 @@
$(MANDIR) :
mkdir -p $(MANDIR)
-# Minipeg built from individual c files.
+bootstrap-minipeg: minipeg.c
+ $(CC) $(CFLAGS) -o $@ minipeg.c
+
+peg.c: peg.peg bootstrap-minipeg
+ ./bootstrap-minipeg -o $@ peg.peg
+
minipeg: $(OBJ)
$(CC) $(CFLAGS) -o $@ $(OBJ)
-# Minipeg distributable amalgamation.
-minipeg-amalg: minipeg.c
- $(CC) $(CFLAGS) -o $@ minipeg.c
-
-minipeg.c: $(SRC) amalg.sh
+minipeg-new.c: $(SRC) amalg.sh
sh amalg.sh $(SRC) > $@
-peg-new.c: peg.peg minipeg
- ./minipeg -o $@ peg.peg
-
-peg-amalg.c: peg.peg minipeg-amalg
- ./minipeg-amalg -o $@ peg.peg
-
www/index.html: .FORCE
sh ./www/index.html.sh > $@
# Check the pregenerated peg.c matches the built peg-new.c.
# We also check peg-amalg.c to test our amalgamation process.
-check-self-host: peg.c peg-new.c peg-amalg.c .FORCE
- diff -u peg-new.c peg.c
- diff -u peg-amalg.c peg.c
+check-self-host: minipeg-new.c .FORCE
+ diff -u minipeg.c minipeg-new.c
check: minipeg check-self-host .FORCE
$(SHELL) -ec '(cd examples; $(MAKE))'
clean : .FORCE
- rm -f minipeg minipeg-amalg $(GENSRC) $(OBJ)
+ rm -f minipeg bootstrap-minipeg $(GENSRC) $(OBJ)
$(SHELL) -ec '(cd examples; $(MAKE) clean)'
.FORCE :
--- /dev/null
+++ b/minipeg.c
@@ -1,0 +1,2810 @@
+/*
+ -----------------------------------------------------------------------
+ | This file is a generated redistributable version of minipeg. |
+ | See https://github.com/andrewchambers/minipeg for more information. |
+ -----------------------------------------------------------------------
+ Copyright (c) 2007-2013, Ian Piumarta
+ Copyright (c) 2022, Andrew Chambers
+ All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the 'Software'), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, and/or sell copies of the
+ Software, and to permit persons to whom the Software is furnished to do so,
+ provided that the above copyright notice(s) and this permission notice appear
+ in all copies or substantial portions of the Software. Inclusion of the
+ above copyright notice(s) and this permission notice in supporting
+ documentation would be appreciated but is not required.
+
+ THE SOFTWARE IS PROVIDED 'AS IS'. USE ENTIRELY AT YOUR OWN RISK.
+
+*/
+#include <assert.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#line 0 "version.h"
+#define MINIPEG_VERSION "0.1.19"
+#line 0 "tree.h"
+
+enum { Unknown= 0, Rule, Variable, Name, Dot, Character, String, Class, Action, Inline, Predicate, Error, Alternate, Sequence, PeekFor, PeekNot, Query, Star, Plus };
+
+enum {
+ RuleUsed = 1<<0,
+ RuleReached = 1<<1,
+};
+
+typedef union Node Node;
+
+struct Rule { int type; Node *next; char *name; Node *variables; Node *expression; int id; int flags; };
+struct Variable { int type; Node *next; char *name; Node *value; int offset; };
+struct Name { int type; Node *next; Node *rule; Node *variable; };
+struct Dot { int type; Node *next; };
+struct Character { int type; Node *next; char *value; };
+struct String { int type; Node *next; char *value; };
+struct Class { int type; Node *next; unsigned char *value; };
+struct Action { int type; Node *next; char *text; Node *list; char *name; Node *rule; int line; };
+struct Inline { int type; Node *next; char *text; };
+struct Predicate { int type; Node *next; char *text; };
+struct Error { int type; Node *next; Node *element; char *text; };
+struct Alternate { int type; Node *next; Node *first; Node *last; };
+struct Sequence { int type; Node *next; Node *first; Node *last; };
+struct PeekFor { int type; Node *next; Node *element; };
+struct PeekNot { int type; Node *next; Node *element; };
+struct Query { int type; Node *next; Node *element; };
+struct Star { int type; Node *next; Node *element; };
+struct Plus { int type; Node *next; Node *element; };
+struct Any { int type; Node *next; };
+
+union Node
+{
+ int type;
+ struct Rule rule;
+ struct Variable variable;
+ struct Name name;
+ struct Dot dot;
+ struct Character character;
+ struct String string;
+ struct Class cclass;
+ struct Action action;
+ struct Inline inLine;
+ struct Predicate predicate;
+ struct Error error;
+ struct Alternate alternate;
+ struct Sequence sequence;
+ struct PeekFor peekFor;
+ struct PeekNot peekNot;
+ struct Query query;
+ struct Star star;
+ struct Plus plus;
+ struct Any any;
+};
+
+extern Node *actions;
+extern Node *rules;
+extern Node *start;
+
+extern int ruleCount;
+
+extern FILE *output;
+
+extern Node *makeRule(char *name);
+extern Node *findRule(char *name);
+extern Node *beginRule(Node *rule);
+extern void Rule_setExpression(Node *rule, Node *expression);
+extern Node *Rule_beToken(Node *rule);
+extern Node *makeVariable(char *name);
+extern Node *makeName(Node *rule);
+extern Node *makeDot(void);
+extern Node *makeCharacter(char *text);
+extern Node *makeString(char *text);
+extern Node *makeClass(char *text);
+extern Node *makeAction(int lineNumber, char *text);
+extern Node *makeInline(char *text);
+extern Node *makePredicate(char *text);
+extern Node *makeError(Node *e, char *text);
+extern Node *makeAlternate(Node *e);
+extern Node *Alternate_append(Node *e, Node *f);
+extern Node *makeSequence(Node *e);
+extern Node *Sequence_append(Node *e, Node *f);
+extern Node *makePeekFor(Node *e);
+extern Node *makePeekNot(Node *e);
+extern Node *makeQuery(Node *e);
+extern Node *makeStar(Node *e);
+extern Node *makePlus(Node *e);
+extern Node *push(Node *node);
+extern Node *top(void);
+extern Node *pop(void);
+
+extern void Rule_compile_c_header(void);
+extern void Rule_compile_c(Node *node, int nolines);
+
+extern void Node_print(Node *node);
+extern void Rule_print(Node *node);
+#line 0 "compile.c"
+
+#ifdef WIN32
+# undef inline
+# define inline __inline
+#endif
+
+
+static int yyl(void)
+{
+ static int prev= 0;
+ return ++prev;
+}
+
+static void charClassSet (unsigned char bits[], int c) { bits[c >> 3] |= (1 << (c & 7)); }
+static void charClassClear(unsigned char bits[], int c) { bits[c >> 3] &= ~(1 << (c & 7)); }
+
+typedef void (*setter)(unsigned char bits[], int c);
+
+static inline int oigit(int c) { return ('0' <= c && c <= '7'); }
+static inline int higit(int c) { return ('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f'); }
+
+static inline int hexval(int c)
+{
+ if ('0' <= c && c <= '9') return c - '0';
+ if ('A' <= c && c <= 'F') return 10 - 'A' + c;
+ if ('a' <= c && c <= 'f') return 10 - 'a' + c;
+ return 0;
+}
+
+static int cnext(unsigned char **ccp)
+{
+ unsigned char *cclass= *ccp;
+ int c= *cclass++;
+ if (c)
+ {
+ if ('\\' == c && *cclass)
+ {
+ switch (c= *cclass++)
+ {
+ case 'a': c= '\a'; break; /* bel */
+ case 'b': c= '\b'; break; /* bs */
+ case 'e': c= '\033'; break; /* esc */
+ case 'f': c= '\f'; break; /* ff */
+ case 'n': c= '\n'; break; /* nl */
+ case 'r': c= '\r'; break; /* cr */
+ case 't': c= '\t'; break; /* ht */
+ case 'v': c= '\v'; break; /* vt */
+ case 'x':
+ c= 0;
+ if (higit(*cclass)) c= (c << 4) + hexval(*cclass++);
+ if (higit(*cclass)) c= (c << 4) + hexval(*cclass++);
+ break;
+ default:
+ if (oigit(c))
+ {
+ c -= '0';
+ if (oigit(*cclass)) c= (c << 3) + *cclass++ - '0';
+ if (oigit(*cclass)) c= (c << 3) + *cclass++ - '0';
+ }
+ break;
+ }
+ }
+ *ccp= cclass;
+ }
+ return c;
+}
+
+static char *makeCharClass(unsigned char *cclass)
+{
+ unsigned char bits[32];
+ setter set;
+ int c, prev= -1;
+ static char string[256];
+ char *ptr;
+
+ if ('^' == *cclass)
+ {
+ memset(bits, 255, 32);
+ set= charClassClear;
+ ++cclass;
+ }
+ else
+ {
+ memset(bits, 0, 32);
+ set= charClassSet;
+ }
+
+ while (*cclass)
+ {
+ if ('-' == *cclass && cclass[1] && prev >= 0)
+ {
+ ++cclass;
+ for (c= cnext(&cclass); prev <= c; ++prev)
+ set(bits, prev);
+ prev= -1;
+ }
+ else
+ {
+ c= cnext(&cclass);
+ set(bits, prev= c);
+ }
+ }
+
+ ptr= string;
+ for (c= 0; c < 32; ++c)
+ ptr += sprintf(ptr, "\\%03o", bits[c]);
+
+ return string;
+}
+
+static void begin(void) { fprintf(output, "\n {"); }
+static void end(void) { fprintf(output, "\n }"); }
+static void label(int n) { fprintf(output, "\n l%d:;\t", n); }
+static void jump(int n) { fprintf(output, " goto l%d;", n); }
+static void save(int n) { fprintf(output, " int yypos%d= yy->__pos, yythunkpos%d= yy->__thunkpos;", n, n); }
+static void restore(int n) { fprintf(output, " yy->__pos= yypos%d; yy->__thunkpos= yythunkpos%d;", n, n); }
+
+static void Node_compile_c_ko(Node *node, int ko)
+{
+ assert(node);
+ switch (node->type)
+ {
+ case Rule:
+ fprintf(stderr, "\ninternal error #1 (%s)\n", node->rule.name);
+ exit(1);
+ break;
+
+ case Dot:
+ fprintf(output, " if (!yymatchDot(yy)) goto l%d;", ko);
+ break;
+
+ case Name:
+ fprintf(output, " if (!yy_%s(yy)) goto l%d;", node->name.rule->rule.name, ko);
+ if (node->name.variable)
+ fprintf(output, " yyDo(yy, yySet, %d, 0);", node->name.variable->variable.offset);
+ break;
+
+ case Character:
+ case String:
+ {
+ int len= strlen(node->string.value);
+ if (1 == len)
+ {
+ if ('\'' == node->string.value[0])
+ fprintf(output, " if (!yymatchChar(yy, '\\'')) goto l%d;", ko);
+ else
+ fprintf(output, " if (!yymatchChar(yy, '%s')) goto l%d;", node->string.value, ko);
+ }
+ else
+ if (2 == len && '\\' == node->string.value[0])
+ fprintf(output, " if (!yymatchChar(yy, '%s')) goto l%d;", node->string.value, ko);
+ else
+ fprintf(output, " if (!yymatchString(yy, \"%s\")) goto l%d;", node->string.value, ko);
+ }
+ break;
+
+ case Class:
+ fprintf(output, " if (!yymatchClass(yy, (unsigned char *)\"%s\")) goto l%d;", makeCharClass(node->cclass.value), ko);
+ break;
+
+ case Action:
+ fprintf(output, " yyDo(yy, yy%s, yy->__begin, yy->__end);", node->action.name);
+ break;
+
+ case Inline:
+ fprintf(output, " yyText(yy, yy->__begin, yy->__end);\n");
+ fprintf(output, "#define yytext yy->__text\n");
+ fprintf(output, "#define yyleng yy->__textlen\n");
+ fprintf(output, "%s;\n", node->inLine.text);
+ fprintf(output, "#undef yytext\n");
+ fprintf(output, "#undef yyleng\n");
+ break;
+
+ case Predicate:
+ fprintf(output, " yyText(yy, yy->__begin, yy->__end); {\n");
+ fprintf(output, "#define yytext yy->__text\n");
+ fprintf(output, "#define yyleng yy->__textlen\n");
+ fprintf(output, "if (!(%s)) goto l%d;\n", node->predicate.text, ko);
+ fprintf(output, "#undef yytext\n");
+ fprintf(output, "#undef yyleng\n");
+ fprintf(output, " }");
+ break;
+
+ case Error:
+ {
+ int eok= yyl(), eko= yyl();
+ Node_compile_c_ko(node->error.element, eko);
+ jump(eok);
+ label(eko);
+ fprintf(output, " yyText(yy, yy->__begin, yy->__end); {\n");
+ fprintf(output, "#define yytext yy->__text\n");
+ fprintf(output, "#define yyleng yy->__textlen\n");
+ fprintf(output, " %s;\n", node->error.text);
+ fprintf(output, "#undef yytext\n");
+ fprintf(output, "#undef yyleng\n");
+ fprintf(output, " }");
+ jump(ko);
+ label(eok);
+ }
+ break;
+
+ case Alternate:
+ {
+ int ok= yyl();
+ begin();
+ save(ok);
+ for (node= node->alternate.first; node; node= node->alternate.next)
+ if (node->alternate.next)
+ {
+ int next= yyl();
+ Node_compile_c_ko(node, next);
+ jump(ok);
+ label(next);
+ restore(ok);
+ }
+ else
+ Node_compile_c_ko(node, ko);
+ end();
+ label(ok);
+ }
+ break;
+
+ case Sequence:
+ for (node= node->sequence.first; node; node= node->sequence.next)
+ Node_compile_c_ko(node, ko);
+ break;
+
+ case PeekFor:
+ {
+ int ok= yyl();
+ begin();
+ save(ok);
+ Node_compile_c_ko(node->peekFor.element, ko);
+ restore(ok);
+ end();
+ }
+ break;
+
+ case PeekNot:
+ {
+ int ok= yyl();
+ begin();
+ save(ok);
+ Node_compile_c_ko(node->peekFor.element, ok);
+ jump(ko);
+ label(ok);
+ restore(ok);
+ end();
+ }
+ break;
+
+ case Query:
+ {
+ int qko= yyl(), qok= yyl();
+ begin();
+ save(qko);
+ Node_compile_c_ko(node->query.element, qko);
+ jump(qok);
+ label(qko);
+ restore(qko);
+ end();
+ label(qok);
+ }
+ break;
+
+ case Star:
+ {
+ int again= yyl(), out= yyl();
+ label(again);
+ begin();
+ save(out);
+ Node_compile_c_ko(node->star.element, out);
+ jump(again);
+ label(out);
+ restore(out);
+ end();
+ }
+ break;
+
+ case Plus:
+ {
+ int again= yyl(), out= yyl();
+ Node_compile_c_ko(node->plus.element, ko);
+ label(again);
+ begin();
+ save(out);
+ Node_compile_c_ko(node->plus.element, out);
+ jump(again);
+ label(out);
+ restore(out);
+ end();
+ }
+ break;
+
+ default:
+ fprintf(stderr, "\nNode_compile_c_ko: illegal node type %d\n", node->type);
+ exit(1);
+ }
+}
+
+
+static int countVariables(Node *node)
+{
+ int count= 0;
+ while (node)
+ {
+ ++count;
+ node= node->variable.next;
+ }
+ return count;
+}
+
+static void defineVariables(Node *node)
+{
+ int count= 0;
+ while (node)
+ {
+ fprintf(output, "#define %s yy->__val[%d]\n", node->variable.name, --count);
+ node->variable.offset= count;
+ node= node->variable.next;
+ }
+ fprintf(output, "#define __ yy->__\n");
+ fprintf(output, "#define yypos yy->__pos\n");
+ fprintf(output, "#define yythunkpos yy->__thunkpos\n");
+}
+
+static void undefineVariables(Node *node)
+{
+ fprintf(output, "#undef yythunkpos\n");
+ fprintf(output, "#undef yypos\n");
+ fprintf(output, "#undef yy\n");
+ while (node)
+ {
+ fprintf(output, "#undef %s\n", node->variable.name);
+ node= node->variable.next;
+ }
+}
+
+
+static void Rule_compile_c2(Node *node)
+{
+ assert(node);
+ assert(Rule == node->type);
+
+ if (!node->rule.expression)
+ fprintf(stderr, "rule '%s' used but not defined\n", node->rule.name);
+ else
+ {
+ int ko= yyl(), safe;
+
+ if ((!(RuleUsed & node->rule.flags)) && (node != start))
+ fprintf(stderr, "rule '%s' defined but not used\n", node->rule.name);
+
+ safe= ((Query == node->rule.expression->type) || (Star == node->rule.expression->type));
+
+ fprintf(output, "\nYY_RULE(int) yy_%s(yycontext *yy)\n{", node->rule.name);
+ if (!safe) save(0);
+ if (node->rule.variables)
+ fprintf(output, " yyDo(yy, yyPush, %d, 0);", countVariables(node->rule.variables));
+ fprintf(output, "\n yyprintf((stderr, \"%%s\\n\", \"%s\"));", node->rule.name);
+ Node_compile_c_ko(node->rule.expression, ko);
+ fprintf(output, "\n yyprintf((stderr, \" ok %%s @ %%s\\n\", \"%s\", yy->__buf+yy->__pos));", node->rule.name);
+ if (node->rule.variables)
+ fprintf(output, " yyDo(yy, yyPop, %d, 0);", countVariables(node->rule.variables));
+ fprintf(output, "\n return 1;");
+ if (!safe)
+ {
+ label(ko);
+ restore(0);
+ fprintf(output, "\n yyprintf((stderr, \" fail %%s @ %%s\\n\", \"%s\", yy->__buf+yy->__pos));", node->rule.name);
+ fprintf(output, "\n return 0;");
+ }
+ fprintf(output, "\n}");
+ }
+
+ if (node->rule.next)
+ Rule_compile_c2(node->rule.next);
+}
+
+static char *header=
+"#include <stdio.h>\n"
+"#include <stdlib.h>\n"
+"#include <string.h>\n";
+
+static char *preamble= "\
+#ifndef YY_MAYBE_UNUSED\n\
+#define YY_MAYBE_UNUSED __attribute__((unused))\n\
+#endif\n\
+#ifndef YY_MALLOC\n\
+#define YY_MALLOC(C, N) malloc(N)\n\
+#endif\n\
+#ifndef YY_REALLOC\n\
+#define YY_REALLOC(C, P, N) realloc(P, N)\n\
+#endif\n\
+#ifndef YY_FREE\n\
+#define YY_FREE(C, P) free(P)\n\
+#endif\n\
+#ifndef YY_LOCAL\n\
+#define YY_LOCAL(T) static T\n\
+#endif\n\
+#ifndef YY_ACTION\n\
+#define YY_ACTION(T) static T\n\
+#endif\n\
+#ifndef YY_RULE\n\
+#define YY_RULE(T) static T\n\
+#endif\n\
+#ifndef YY_PARSE\n\
+#define YY_PARSE(T) T\n\
+#endif\n\
+#ifndef YYPARSE\n\
+#define YYPARSE yyparse\n\
+#endif\n\
+#ifndef YYPARSEFROM\n\
+#define YYPARSEFROM yyparsefrom\n\
+#endif\n\
+#ifndef YYRELEASE\n\
+#define YYRELEASE yyrelease\n\
+#endif\n\
+#ifndef YY_BEGIN\n\
+#define YY_BEGIN ( yy->__begin= yy->__pos, 1)\n\
+#endif\n\
+#ifndef YY_END\n\
+#define YY_END ( yy->__end= yy->__pos, 1)\n\
+#endif\n\
+#ifdef YY_DEBUG\n\
+# define yyprintf(args) fprintf args\n\
+#else\n\
+# define yyprintf(args)\n\
+#endif\n\
+#ifndef YYSTYPE\n\
+#define YYSTYPE int\n\
+#endif\n\
+#ifndef YY_STACK_SIZE\n\
+#define YY_STACK_SIZE 128\n\
+#endif\n\
+\n\
+#ifndef YY_BUFFER_SIZE\n\
+#define YY_BUFFER_SIZE 1024\n\
+#endif\n\
+\n\
+#ifndef YY_PART\n\
+\n\
+typedef struct _yycontext yycontext;\n\
+typedef void (*yyaction)(yycontext *yy, char *yytext, int yyleng);\n\
+typedef struct _yythunk { int begin, end; yyaction action; struct _yythunk *next; } yythunk;\n\
+\n\
+struct _yycontext {\n\
+ char *__buf;\n\
+ int __buflen;\n\
+ int __pos;\n\
+ int __limit;\n\
+ char *__text;\n\
+ int __textlen;\n\
+ int __begin;\n\
+ int __end;\n\
+ int __textmax;\n\
+ yythunk *__thunks;\n\
+ int __thunkslen;\n\
+ int __thunkpos;\n\
+ YYSTYPE __;\n\
+ YYSTYPE *__val;\n\
+ YYSTYPE *__vals;\n\
+ int __valslen;\n\
+#ifdef YY_CTX_MEMBERS\n\
+ YY_CTX_MEMBERS\n\
+#endif\n\
+};\n\
+\n\
+#ifdef YY_CTX_LOCAL\n\
+#define YY_CTX_PARAM_ yycontext *yyctx,\n\
+#define YY_CTX_PARAM yycontext *yyctx\n\
+#define YY_CTX_ARG_ yyctx,\n\
+#define YY_CTX_ARG yyctx\n\
+#ifndef YY_INPUT\n\
+#define YY_INPUT(yy, buf, result, max_size) \\\n\
+ { \\\n\
+ int yyc= getchar(); \\\n\
+ result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \\\n\
+ yyprintf((stderr, \"<%c>\", yyc)); \\\n\
+ }\n\
+#endif\n\
+#else\n\
+#define YY_CTX_PARAM_\n\
+#define YY_CTX_PARAM\n\
+#define YY_CTX_ARG_\n\
+#define YY_CTX_ARG\n\
+yycontext _yyctx= { 0, 0 };\n\
+yycontext *yyctx= &_yyctx;\n\
+#ifndef YY_INPUT\n\
+#define YY_INPUT(buf, result, max_size) \\\n\
+ { \\\n\
+ int yyc= getchar(); \\\n\
+ result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \\\n\
+ yyprintf((stderr, \"<%c>\", yyc)); \\\n\
+ }\n\
+#endif\n\
+#endif\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yyrefill(yycontext *yy)\n\
+{\n\
+ int yyn;\n\
+ while (yy->__buflen - yy->__pos < 512)\n\
+ {\n\
+ yy->__buflen *= 2;\n\
+ yy->__buf= (char *)YY_REALLOC(yy, yy->__buf, yy->__buflen);\n\
+ }\n\
+#ifdef YY_CTX_LOCAL\n\
+ YY_INPUT(yy, (yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos));\n\
+#else\n\
+ YY_INPUT((yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos));\n\
+#endif\n\
+ if (!yyn) return 0;\n\
+ yy->__limit += yyn;\n\
+ return 1;\n\
+}\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchDot(yycontext *yy)\n\
+{\n\
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;\n\
+ ++yy->__pos;\n\
+ return 1;\n\
+}\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchChar(yycontext *yy, int c)\n\
+{\n\
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;\n\
+ if ((unsigned char)yy->__buf[yy->__pos] == c)\n\
+ {\n\
+ ++yy->__pos;\n\
+ yyprintf((stderr, \" ok yymatchChar(yy, %c) @ %s\\n\", c, yy->__buf+yy->__pos));\n\
+ return 1;\n\
+ }\n\
+ yyprintf((stderr, \" fail yymatchChar(yy, %c) @ %s\\n\", c, yy->__buf+yy->__pos));\n\
+ return 0;\n\
+}\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchString(yycontext *yy, const char *s)\n\
+{\n\
+ int yysav= yy->__pos;\n\
+ while (*s)\n\
+ {\n\
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;\n\
+ if (yy->__buf[yy->__pos] != *s)\n\
+ {\n\
+ yy->__pos= yysav;\n\
+ return 0;\n\
+ }\n\
+ ++s;\n\
+ ++yy->__pos;\n\
+ }\n\
+ return 1;\n\
+}\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchClass(yycontext *yy, unsigned char *bits)\n\
+{\n\
+ int c;\n\
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;\n\
+ c= (unsigned char)yy->__buf[yy->__pos];\n\
+ if (bits[c >> 3] & (1 << (c & 7)))\n\
+ {\n\
+ ++yy->__pos;\n\
+ yyprintf((stderr, \" ok yymatchClass @ %s\\n\", yy->__buf+yy->__pos));\n\
+ return 1;\n\
+ }\n\
+ yyprintf((stderr, \" fail yymatchClass @ %s\\n\", yy->__buf+yy->__pos));\n\
+ return 0;\n\
+}\n\
+\n\
+YY_LOCAL(void) YY_MAYBE_UNUSED yyDo(yycontext *yy, yyaction action, int begin, int end)\n\
+{\n\
+ while (yy->__thunkpos >= yy->__thunkslen)\n\
+ {\n\
+ yy->__thunkslen *= 2;\n\
+ yy->__thunks= (yythunk *)YY_REALLOC(yy, yy->__thunks, sizeof(yythunk) * yy->__thunkslen);\n\
+ }\n\
+ yy->__thunks[yy->__thunkpos].begin= begin;\n\
+ yy->__thunks[yy->__thunkpos].end= end;\n\
+ yy->__thunks[yy->__thunkpos].action= action;\n\
+ ++yy->__thunkpos;\n\
+}\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yyText(yycontext *yy, int begin, int end)\n\
+{\n\
+ int yyleng= end - begin;\n\
+ if (yyleng <= 0)\n\
+ yyleng= 0;\n\
+ else\n\
+ {\n\
+ while (yy->__textlen < (yyleng + 1))\n\
+ {\n\
+ yy->__textlen *= 2;\n\
+ yy->__text= (char *)YY_REALLOC(yy, yy->__text, yy->__textlen);\n\
+ }\n\
+ memcpy(yy->__text, yy->__buf + begin, yyleng);\n\
+ }\n\
+ yy->__text[yyleng]= '\\0';\n\
+ return yyleng;\n\
+}\n\
+\n\
+YY_LOCAL(void) yyDone(yycontext *yy)\n\
+{\n\
+ int pos;\n\
+ for (pos= 0; pos < yy->__thunkpos; ++pos)\n\
+ {\n\
+ yythunk *thunk= &yy->__thunks[pos];\n\
+ int yyleng= thunk->end ? yyText(yy, thunk->begin, thunk->end) : thunk->begin;\n\
+ yyprintf((stderr, \"DO [%d] %p %s\\n\", pos, thunk->action, yy->__text));\n\
+ thunk->action(yy, yy->__text, yyleng);\n\
+ }\n\
+ yy->__thunkpos= 0;\n\
+}\n\
+\n\
+YY_LOCAL(void) yyCommit(yycontext *yy)\n\
+{\n\
+ if ((yy->__limit -= yy->__pos))\n\
+ {\n\
+ memmove(yy->__buf, yy->__buf + yy->__pos, yy->__limit);\n\
+ }\n\
+ yy->__begin -= yy->__pos;\n\
+ yy->__end -= yy->__pos;\n\
+ yy->__pos= yy->__thunkpos= 0;\n\
+}\n\
+\n\
+YY_LOCAL(int) YY_MAYBE_UNUSED yyAccept(yycontext *yy, int tp0)\n\
+{\n\
+ if (tp0)\n\
+ {\n\
+ fprintf(stderr, \"accept denied at %d\\n\", tp0);\n\
+ return 0;\n\
+ }\n\
+ else\n\
+ {\n\
+ yyDone(yy);\n\
+ yyCommit(yy);\n\
+ }\n\
+ return 1;\n\
+}\n\
+\n\
+YY_LOCAL(void) YY_MAYBE_UNUSED yyPush(yycontext *yy, char *text, int count)\n\
+{\n\
+ yy->__val += count;\n\
+ while (yy->__valslen <= yy->__val - yy->__vals)\n\
+ {\n\
+ long offset= yy->__val - yy->__vals;\n\
+ yy->__valslen *= 2;\n\
+ yy->__vals= (YYSTYPE *)YY_REALLOC(yy, yy->__vals, sizeof(YYSTYPE) * yy->__valslen);\n\
+ yy->__val= yy->__vals + offset;\n\
+ }\n\
+}\n\
+YY_LOCAL(void) YY_MAYBE_UNUSED yyPop(yycontext *yy, char *text, int count) { yy->__val -= count; }\n\
+YY_LOCAL(void) YY_MAYBE_UNUSED yySet(yycontext *yy, char *text, int count) { yy->__val[count]= yy->__; }\n\
+\n\
+#endif /* YY_PART */\n\
+\n\
+#define YYACCEPT yyAccept(yy, yythunkpos0)\n\
+\n\
+";
+
+static char *footer= "\n\
+\n\
+#ifndef YY_PART\n\
+\n\
+typedef int (*yyrule)(yycontext *yy);\n\
+\n\
+YY_PARSE(int) YYPARSEFROM(YY_CTX_PARAM_ yyrule yystart)\n\
+{\n\
+ int yyok;\n\
+ if (!yyctx->__buflen)\n\
+ {\n\
+ yyctx->__buflen= YY_BUFFER_SIZE;\n\
+ yyctx->__buf= (char *)YY_MALLOC(yyctx, yyctx->__buflen);\n\
+ yyctx->__textlen= YY_BUFFER_SIZE;\n\
+ yyctx->__text= (char *)YY_MALLOC(yyctx, yyctx->__textlen);\n\
+ yyctx->__thunkslen= YY_STACK_SIZE;\n\
+ yyctx->__thunks= (yythunk *)YY_MALLOC(yyctx, sizeof(yythunk) * yyctx->__thunkslen);\n\
+ yyctx->__valslen= YY_STACK_SIZE;\n\
+ yyctx->__vals= (YYSTYPE *)YY_MALLOC(yyctx, sizeof(YYSTYPE) * yyctx->__valslen);\n\
+ yyctx->__begin= yyctx->__end= yyctx->__pos= yyctx->__limit= yyctx->__thunkpos= 0;\n\
+ }\n\
+ yyctx->__begin= yyctx->__end= yyctx->__pos;\n\
+ yyctx->__thunkpos= 0;\n\
+ yyctx->__val= yyctx->__vals;\n\
+ yyok= yystart(yyctx);\n\
+ if (yyok) yyDone(yyctx);\n\
+ yyCommit(yyctx);\n\
+ return yyok;\n\
+}\n\
+\n\
+YY_PARSE(int) YYPARSE(YY_CTX_PARAM)\n\
+{\n\
+ return YYPARSEFROM(YY_CTX_ARG_ yy_%s);\n\
+}\n\
+\n\
+YY_PARSE(yycontext *) YYRELEASE(yycontext *yyctx)\n\
+{\n\
+ if (yyctx->__buflen)\n\
+ {\n\
+ yyctx->__buflen= 0;\n\
+ YY_FREE(yyctx, yyctx->__buf);\n\
+ YY_FREE(yyctx, yyctx->__text);\n\
+ YY_FREE(yyctx, yyctx->__thunks);\n\
+ YY_FREE(yyctx, yyctx->__vals);\n\
+ }\n\
+ return yyctx;\n\
+}\n\
+\n\
+#endif\n\
+";
+
+void Rule_compile_c_header(void)
+{
+ fprintf(output, "/* A recursive-descent parser generated by minipeg %s */\n", MINIPEG_VERSION);
+ fprintf(output, "\n");
+ fprintf(output, "%s", header);
+ fprintf(output, "#define YYRULECOUNT %d\n", ruleCount);
+}
+
+int consumesInput(Node *node)
+{
+ if (!node) return 0;
+
+ switch (node->type)
+ {
+ case Rule:
+ {
+ int result= 0;
+ if (RuleReached & node->rule.flags)
+ fprintf(stderr, "possible infinite left recursion in rule '%s'\n", node->rule.name);
+ else
+ {
+ node->rule.flags |= RuleReached;
+ result= consumesInput(node->rule.expression);
+ node->rule.flags &= ~RuleReached;
+ }
+ return result;
+ }
+ break;
+
+ case Dot: return 1;
+ case Name: return consumesInput(node->name.rule);
+ case Character:
+ case String: return strlen(node->string.value) > 0;
+ case Class: return 1;
+ case Action: return 0;
+ case Inline: return 0;
+ case Predicate: return 0;
+ case Error: return consumesInput(node->error.element);
+
+ case Alternate:
+ {
+ Node *n;
+ for (n= node->alternate.first; n; n= n->alternate.next)
+ if (!consumesInput(n))
+ return 0;
+ }
+ return 1;
+
+ case Sequence:
+ {
+ Node *n;
+ for (n= node->alternate.first; n; n= n->alternate.next)
+ if (consumesInput(n))
+ return 1;
+ }
+ return 0;
+
+ case PeekFor: return 0;
+ case PeekNot: return 0;
+ case Query: return 0;
+ case Star: return 0;
+ case Plus: return consumesInput(node->plus.element);
+
+ default:
+ fprintf(stderr, "\nconsumesInput: illegal node type %d\n", node->type);
+ exit(1);
+ }
+ return 0;
+}
+
+
+void Rule_compile_c(Node *node, int nolines)
+{
+ Node *n;
+
+ for (n= rules; n; n= n->rule.next)
+ consumesInput(n);
+
+ fprintf(output, "%s", preamble);
+ for (n= node; n; n= n->rule.next)
+ fprintf(output, "YY_RULE(int) yy_%s(yycontext *yy); /* %d */\n", n->rule.name, n->rule.id);
+ fprintf(output, "\n");
+ for (n= actions; n; n= n->action.list)
+ {
+ fprintf(output, "YY_ACTION(void) yy%s(yycontext *yy, char *yytext, int yyleng)\n{\n", n->action.name);
+ defineVariables(n->action.rule->rule.variables);
+ fprintf(output, " yyprintf((stderr, \"do yy%s\\n\"));\n", n->action.name);
+ fprintf(output, " {\n");
+ if (!nolines)
+ fprintf(output, "#line %i\n", n->action.line);
+ fprintf(output, " %s;\n", n->action.text);
+ fprintf(output, " }\n");
+ undefineVariables(n->action.rule->rule.variables);
+ fprintf(output, "}\n");
+ }
+ Rule_compile_c2(node);
+ fprintf(output, footer, start->rule.name);
+}
+#line 0 "tree.c"
+
+#ifdef WIN32
+# undef inline
+# define inline __inline
+#endif
+
+
+Node *actions= 0;
+Node *rules= 0;
+Node *thisRule= 0;
+Node *start= 0;
+
+FILE *output= 0;
+
+int actionCount= 0;
+int ruleCount= 0;
+int lastToken= -1;
+
+static inline Node *_newNode(int type, int size)
+{
+ Node *node= calloc(1, size);
+ node->type= type;
+ return node;
+}
+
+#define newNode(T) _newNode(T, sizeof(struct T))
+
+Node *makeRule(char *name)
+{
+ Node *node= newNode(Rule);
+ node->rule.name= strdup(name);
+ node->rule.id= ++ruleCount;
+ node->rule.flags= 0;
+ node->rule.next= rules;
+ rules= node;
+ return node;
+}
+
+Node *findRule(char *name)
+{
+ Node *n;
+ char *ptr;
+ for (ptr= name; *ptr; ptr++) if ('-' == *ptr) *ptr= '_';
+ for (n= rules; n; n= n->any.next)
+ {
+ assert(Rule == n->type);
+ if (!strcmp(name, n->rule.name))
+ return n;
+ }
+ return makeRule(name);
+}
+
+Node *beginRule(Node *rule)
+{
+ actionCount= 0;
+ return thisRule= rule;
+}
+
+void Rule_setExpression(Node *node, Node *expression)
+{
+ assert(node);
+#ifdef DEBUG
+ Node_print(node); fprintf(stderr, " [%d]<- ", node->type); Node_print(expression); fprintf(stderr, "\n");
+#endif
+ assert(Rule == node->type);
+ node->rule.expression= expression;
+ if (!start || !strcmp(node->rule.name, "start"))
+ start= node;
+}
+
+Node *makeVariable(char *name)
+{
+ Node *node;
+ assert(thisRule);
+ for (node= thisRule->rule.variables; node; node= node->variable.next)
+ if (!strcmp(name, node->variable.name))
+ return node;
+ node= newNode(Variable);
+ node->variable.name= strdup(name);
+ node->variable.next= thisRule->rule.variables;
+ thisRule->rule.variables= node;
+ return node;
+}
+
+Node *makeName(Node *rule)
+{
+ Node *node= newNode(Name);
+ node->name.rule= rule;
+ node->name.variable= 0;
+ rule->rule.flags |= RuleUsed;
+ return node;
+}
+
+Node *makeDot(void)
+{
+ return newNode(Dot);
+}
+
+Node *makeCharacter(char *text)
+{
+ Node *node= newNode(Character);
+ node->character.value= strdup(text);
+ return node;
+}
+
+Node *makeString(char *text)
+{
+ Node *node= newNode(String);
+ node->string.value= strdup(text);
+ return node;
+}
+
+Node *makeClass(char *text)
+{
+ Node *node= newNode(Class);
+ node->cclass.value= (unsigned char *)strdup(text);
+ return node;
+}
+
+Node *makeAction(int lineNumber, char *text)
+{
+ Node *node= newNode(Action);
+ char name[1024];
+ assert(thisRule);
+ sprintf(name, "_%d_%s", ++actionCount, thisRule->rule.name);
+ node->action.name= strdup(name);
+ node->action.text= strdup(text);
+ node->action.list= actions;
+ node->action.rule= thisRule;
+ node->action.line= lineNumber;
+ actions= node;
+ {
+ char *ptr;
+ for (ptr= node->action.text; *ptr; ++ptr)
+ if ('$' == ptr[0] && '$' == ptr[1])
+ ptr[1]= ptr[0]= '_';
+ }
+ return node;
+}
+
+Node *makeInline(char *text)
+{
+ Node *node= newNode(Inline);
+ node->inLine.text= strdup(text);
+ return node;
+}
+
+Node *makePredicate(char *text)
+{
+ Node *node= newNode(Predicate);
+ node->predicate.text= strdup(text);
+ return node;
+}
+
+Node *makeError(Node *e, char *text)
+{
+ Node *node= newNode(Error);
+ node->error.element= e;
+ node->error.text= strdup(text);
+ return node;
+}
+
+Node *makeAlternate(Node *e)
+{
+ if (Alternate != e->type)
+ {
+ Node *node= newNode(Alternate);
+ node->alternate.first=
+ node->alternate.last= e;
+ return node;
+ }
+ return e;
+}
+
+Node *Alternate_append(Node *a, Node *e)
+{
+ a= makeAlternate(a);
+ a->alternate.last->any.next= e;
+ a->alternate.last= e;
+ return a;
+}
+
+Node *makeSequence(Node *e)
+{
+ if (Sequence != e->type)
+ {
+ Node *node= newNode(Sequence);
+ node->sequence.first=
+ node->sequence.last= e;
+ return node;
+ }
+ return e;
+}
+
+Node *Sequence_append(Node *a, Node *e)
+{
+ a= makeSequence(a);
+ a->sequence.last->any.next= e;
+ a->sequence.last= e;
+ return a;
+}
+
+Node *makePeekFor(Node *e)
+{
+ Node *node= newNode(PeekFor);
+ node->peekFor.element= e;
+ return node;
+}
+
+Node *makePeekNot(Node *e)
+{
+ Node *node= newNode(PeekNot);
+ node->peekNot.element= e;
+ return node;
+}
+
+Node *makeQuery(Node *e)
+{
+ Node *node= newNode(Query);
+ node->query.element= e;
+ return node;
+}
+
+Node *makeStar(Node *e)
+{
+ Node *node= newNode(Star);
+ node->star.element= e;
+ return node;
+}
+
+Node *makePlus(Node *e)
+{
+ Node *node= newNode(Plus);
+ node->plus.element= e;
+ return node;
+}
+
+
+static Node *stack[1024];
+static Node **stackPointer= stack;
+
+
+#ifdef DEBUG
+static void dumpStack(void)
+{
+ Node **p;
+ for (p= stack + 1; p <= stackPointer; ++p)
+ {
+ fprintf(stderr, "### %d\t", p - stack);
+ Node_print(*p);
+ fprintf(stderr, "\n");
+ }
+}
+#endif
+
+Node *push(Node *node)
+{
+ assert(node);
+ assert(stackPointer < stack + 1023);
+#ifdef DEBUG
+ dumpStack(); fprintf(stderr, " PUSH "); Node_print(node); fprintf(stderr, "\n");
+#endif
+ return *++stackPointer= node;
+}
+
+Node *top(void)
+{
+ assert(stackPointer > stack);
+ return *stackPointer;
+}
+
+Node *pop(void)
+{
+ assert(stackPointer > stack);
+#ifdef DEBUG
+ dumpStack(); fprintf(stderr, " POP\n");
+#endif
+ return *stackPointer--;
+}
+
+
+static void Node_fprint(FILE *stream, Node *node)
+{
+ assert(node);
+ switch (node->type)
+ {
+ case Rule: fprintf(stream, " %s", node->rule.name); break;
+ case Variable: fprintf(stream, " %s:", node->variable.name); break;
+ case Name: fprintf(stream, " %s", node->name.rule->rule.name); break;
+ case Dot: fprintf(stream, " ."); break;
+ case Character: fprintf(stream, " '%s'", node->character.value); break;
+ case String: fprintf(stream, " \"%s\"", node->string.value); break;
+ case Class: fprintf(stream, " [%s]", node->cclass.value); break;
+ case Action: fprintf(stream, " { %s }", node->action.text); break;
+ case Predicate: fprintf(stream, " ?{ %s }", node->action.text); break;
+
+ case Alternate: node= node->alternate.first;
+ fprintf(stream, " (");
+ Node_fprint(stream, node);
+ while ((node= node->any.next))
+ {
+ fprintf(stream, " |");
+ Node_fprint(stream, node);
+ }
+ fprintf(stream, " )");
+ break;
+
+ case Sequence: node= node->sequence.first;
+ fprintf(stream, " (");
+ Node_fprint(stream, node);
+ while ((node= node->any.next))
+ Node_fprint(stream, node);
+ fprintf(stream, " )");
+ break;
+
+ case PeekFor: fprintf(stream, "&"); Node_fprint(stream, node->query.element); break;
+ case PeekNot: fprintf(stream, "!"); Node_fprint(stream, node->query.element); break;
+ case Query: Node_fprint(stream, node->query.element); fprintf(stream, "?"); break;
+ case Star: Node_fprint(stream, node->query.element); fprintf(stream, "*"); break;
+ case Plus: Node_fprint(stream, node->query.element); fprintf(stream, "+"); break;
+ default:
+ fprintf(stream, "\nunknown node type %d\n", node->type);
+ exit(1);
+ }
+}
+
+void Node_print(Node *node) { Node_fprint(stderr, node); }
+
+static void Rule_fprint(FILE *stream, Node *node)
+{
+ assert(Rule == node->type);
+ fprintf(stream, "%s.%d =", node->rule.name, node->rule.id);
+ if (node->rule.expression)
+ Node_fprint(stream, node->rule.expression);
+ else
+ fprintf(stream, " UNDEFINED");
+ fprintf(stream, " ;\n");
+}
+
+void Rule_print(Node *node) { Rule_fprint(stderr, node); }
+#line 0 "peg.c"
+/* A recursive-descent parser generated by minipeg 0.1.19 */
+
+#define YYRULECOUNT 38
+#line 1 "peg.peg"
+
+
+
+ typedef struct Header Header;
+
+ struct Header {
+ int line;
+ char *text;
+ Header *next;
+ };
+
+ FILE *input= 0;
+
+ int verboseFlag= 0;
+ int nolinesFlag= 0;
+
+ static int lineNumber= 0;
+ static int headerLine= 0;
+ static int actionLine= 0;
+ static char *fileName= 0;
+ static int trailerLine= 0;
+ static char *trailer= 0;
+ static Header *headers= 0;
+
+ void makeHeader(int line, char *text);
+ void makeTrailer(int line, char *text);
+
+ void yyerror(char *message);
+
+# define YY_INPUT(buf, result, max) \
+ { \
+ int c= getc(input); \
+ /* if ('\n' == c || '\r' == c) ++lineNumber; */ \
+ result= (EOF == c) ? 0 : (*(buf)= c, 1); \
+ }
+
+# define YY_LOCAL(T) static T
+# define YY_RULE(T) static T
+
+#ifndef YY_MAYBE_UNUSED
+#define YY_MAYBE_UNUSED __attribute__((unused))
+#endif
+#ifndef YY_MALLOC
+#define YY_MALLOC(C, N) malloc(N)
+#endif
+#ifndef YY_REALLOC
+#define YY_REALLOC(C, P, N) realloc(P, N)
+#endif
+#ifndef YY_FREE
+#define YY_FREE(C, P) free(P)
+#endif
+#ifndef YY_LOCAL
+#define YY_LOCAL(T) static T
+#endif
+#ifndef YY_ACTION
+#define YY_ACTION(T) static T
+#endif
+#ifndef YY_RULE
+#define YY_RULE(T) static T
+#endif
+#ifndef YY_PARSE
+#define YY_PARSE(T) T
+#endif
+#ifndef YYPARSE
+#define YYPARSE yyparse
+#endif
+#ifndef YYPARSEFROM
+#define YYPARSEFROM yyparsefrom
+#endif
+#ifndef YYRELEASE
+#define YYRELEASE yyrelease
+#endif
+#ifndef YY_BEGIN
+#define YY_BEGIN ( yy->__begin= yy->__pos, 1)
+#endif
+#ifndef YY_END
+#define YY_END ( yy->__end= yy->__pos, 1)
+#endif
+#ifdef YY_DEBUG
+# define yyprintf(args) fprintf args
+#else
+# define yyprintf(args)
+#endif
+#ifndef YYSTYPE
+#define YYSTYPE int
+#endif
+#ifndef YY_STACK_SIZE
+#define YY_STACK_SIZE 128
+#endif
+
+#ifndef YY_BUFFER_SIZE
+#define YY_BUFFER_SIZE 1024
+#endif
+
+#ifndef YY_PART
+
+typedef struct _yycontext yycontext;
+typedef void (*yyaction)(yycontext *yy, char *yytext, int yyleng);
+typedef struct _yythunk { int begin, end; yyaction action; struct _yythunk *next; } yythunk;
+
+struct _yycontext {
+ char *__buf;
+ int __buflen;
+ int __pos;
+ int __limit;
+ char *__text;
+ int __textlen;
+ int __begin;
+ int __end;
+ int __textmax;
+ yythunk *__thunks;
+ int __thunkslen;
+ int __thunkpos;
+ YYSTYPE __;
+ YYSTYPE *__val;
+ YYSTYPE *__vals;
+ int __valslen;
+#ifdef YY_CTX_MEMBERS
+ YY_CTX_MEMBERS
+#endif
+};
+
+#ifdef YY_CTX_LOCAL
+#define YY_CTX_PARAM_ yycontext *yyctx,
+#define YY_CTX_PARAM yycontext *yyctx
+#define YY_CTX_ARG_ yyctx,
+#define YY_CTX_ARG yyctx
+#ifndef YY_INPUT
+#define YY_INPUT(yy, buf, result, max_size) \
+ { \
+ int yyc= getchar(); \
+ result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \
+ yyprintf((stderr, "<%c>", yyc)); \
+ }
+#endif
+#else
+#define YY_CTX_PARAM_
+#define YY_CTX_PARAM
+#define YY_CTX_ARG_
+#define YY_CTX_ARG
+yycontext _yyctx= { 0, 0 };
+yycontext *yyctx= &_yyctx;
+#ifndef YY_INPUT
+#define YY_INPUT(buf, result, max_size) \
+ { \
+ int yyc= getchar(); \
+ result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \
+ yyprintf((stderr, "<%c>", yyc)); \
+ }
+#endif
+#endif
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yyrefill(yycontext *yy)
+{
+ int yyn;
+ while (yy->__buflen - yy->__pos < 512)
+ {
+ yy->__buflen *= 2;
+ yy->__buf= (char *)YY_REALLOC(yy, yy->__buf, yy->__buflen);
+ }
+#ifdef YY_CTX_LOCAL
+ YY_INPUT(yy, (yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos));
+#else
+ YY_INPUT((yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos));
+#endif
+ if (!yyn) return 0;
+ yy->__limit += yyn;
+ return 1;
+}
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchDot(yycontext *yy)
+{
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
+ ++yy->__pos;
+ return 1;
+}
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchChar(yycontext *yy, int c)
+{
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
+ if ((unsigned char)yy->__buf[yy->__pos] == c)
+ {
+ ++yy->__pos;
+ yyprintf((stderr, " ok yymatchChar(yy, %c) @ %s\n", c, yy->__buf+yy->__pos));
+ return 1;
+ }
+ yyprintf((stderr, " fail yymatchChar(yy, %c) @ %s\n", c, yy->__buf+yy->__pos));
+ return 0;
+}
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchString(yycontext *yy, const char *s)
+{
+ int yysav= yy->__pos;
+ while (*s)
+ {
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
+ if (yy->__buf[yy->__pos] != *s)
+ {
+ yy->__pos= yysav;
+ return 0;
+ }
+ ++s;
+ ++yy->__pos;
+ }
+ return 1;
+}
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yymatchClass(yycontext *yy, unsigned char *bits)
+{
+ int c;
+ if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
+ c= (unsigned char)yy->__buf[yy->__pos];
+ if (bits[c >> 3] & (1 << (c & 7)))
+ {
+ ++yy->__pos;
+ yyprintf((stderr, " ok yymatchClass @ %s\n", yy->__buf+yy->__pos));
+ return 1;
+ }
+ yyprintf((stderr, " fail yymatchClass @ %s\n", yy->__buf+yy->__pos));
+ return 0;
+}
+
+YY_LOCAL(void) YY_MAYBE_UNUSED yyDo(yycontext *yy, yyaction action, int begin, int end)
+{
+ while (yy->__thunkpos >= yy->__thunkslen)
+ {
+ yy->__thunkslen *= 2;
+ yy->__thunks= (yythunk *)YY_REALLOC(yy, yy->__thunks, sizeof(yythunk) * yy->__thunkslen);
+ }
+ yy->__thunks[yy->__thunkpos].begin= begin;
+ yy->__thunks[yy->__thunkpos].end= end;
+ yy->__thunks[yy->__thunkpos].action= action;
+ ++yy->__thunkpos;
+}
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yyText(yycontext *yy, int begin, int end)
+{
+ int yyleng= end - begin;
+ if (yyleng <= 0)
+ yyleng= 0;
+ else
+ {
+ while (yy->__textlen < (yyleng + 1))
+ {
+ yy->__textlen *= 2;
+ yy->__text= (char *)YY_REALLOC(yy, yy->__text, yy->__textlen);
+ }
+ memcpy(yy->__text, yy->__buf + begin, yyleng);
+ }
+ yy->__text[yyleng]= '\0';
+ return yyleng;
+}
+
+YY_LOCAL(void) yyDone(yycontext *yy)
+{
+ int pos;
+ for (pos= 0; pos < yy->__thunkpos; ++pos)
+ {
+ yythunk *thunk= &yy->__thunks[pos];
+ int yyleng= thunk->end ? yyText(yy, thunk->begin, thunk->end) : thunk->begin;
+ yyprintf((stderr, "DO [%d] %p %s\n", pos, thunk->action, yy->__text));
+ thunk->action(yy, yy->__text, yyleng);
+ }
+ yy->__thunkpos= 0;
+}
+
+YY_LOCAL(void) yyCommit(yycontext *yy)
+{
+ if ((yy->__limit -= yy->__pos))
+ {
+ memmove(yy->__buf, yy->__buf + yy->__pos, yy->__limit);
+ }
+ yy->__begin -= yy->__pos;
+ yy->__end -= yy->__pos;
+ yy->__pos= yy->__thunkpos= 0;
+}
+
+YY_LOCAL(int) YY_MAYBE_UNUSED yyAccept(yycontext *yy, int tp0)
+{
+ if (tp0)
+ {
+ fprintf(stderr, "accept denied at %d\n", tp0);
+ return 0;
+ }
+ else
+ {
+ yyDone(yy);
+ yyCommit(yy);
+ }
+ return 1;
+}
+
+YY_LOCAL(void) YY_MAYBE_UNUSED yyPush(yycontext *yy, char *text, int count)
+{
+ yy->__val += count;
+ while (yy->__valslen <= yy->__val - yy->__vals)
+ {
+ long offset= yy->__val - yy->__vals;
+ yy->__valslen *= 2;
+ yy->__vals= (YYSTYPE *)YY_REALLOC(yy, yy->__vals, sizeof(YYSTYPE) * yy->__valslen);
+ yy->__val= yy->__vals + offset;
+ }
+}
+YY_LOCAL(void) YY_MAYBE_UNUSED yyPop(yycontext *yy, char *text, int count) { yy->__val -= count; }
+YY_LOCAL(void) YY_MAYBE_UNUSED yySet(yycontext *yy, char *text, int count) { yy->__val[count]= yy->__; }
+
+#endif /* YY_PART */
+
+#define YYACCEPT yyAccept(yy, yythunkpos0)
+
+YY_RULE(int) yy_comment(yycontext *yy); /* 38 */
+YY_RULE(int) yy_space(yycontext *yy); /* 37 */
+YY_RULE(int) yy_braces(yycontext *yy); /* 36 */
+YY_RULE(int) yy_range(yycontext *yy); /* 35 */
+YY_RULE(int) yy_char(yycontext *yy); /* 34 */
+YY_RULE(int) yy_END(yycontext *yy); /* 33 */
+YY_RULE(int) yy_BEGIN(yycontext *yy); /* 32 */
+YY_RULE(int) yy_DOT(yycontext *yy); /* 31 */
+YY_RULE(int) yy_class(yycontext *yy); /* 30 */
+YY_RULE(int) yy_literal(yycontext *yy); /* 29 */
+YY_RULE(int) yy_CLOSE(yycontext *yy); /* 28 */
+YY_RULE(int) yy_OPEN(yycontext *yy); /* 27 */
+YY_RULE(int) yy_COLON(yycontext *yy); /* 26 */
+YY_RULE(int) yy_PLUS(yycontext *yy); /* 25 */
+YY_RULE(int) yy_STAR(yycontext *yy); /* 24 */
+YY_RULE(int) yy_QUESTION(yycontext *yy); /* 23 */
+YY_RULE(int) yy_primary(yycontext *yy); /* 22 */
+YY_RULE(int) yy_NOT(yycontext *yy); /* 21 */
+YY_RULE(int) yy_suffix(yycontext *yy); /* 20 */
+YY_RULE(int) yy_AND(yycontext *yy); /* 19 */
+YY_RULE(int) yy_AT(yycontext *yy); /* 18 */
+YY_RULE(int) yy_action(yycontext *yy); /* 17 */
+YY_RULE(int) yy_TILDE(yycontext *yy); /* 16 */
+YY_RULE(int) yy_prefix(yycontext *yy); /* 15 */
+YY_RULE(int) yy_error(yycontext *yy); /* 14 */
+YY_RULE(int) yy_BAR(yycontext *yy); /* 13 */
+YY_RULE(int) yy_sequence(yycontext *yy); /* 12 */
+YY_RULE(int) yy_expression(yycontext *yy); /* 11 */
+YY_RULE(int) yy_EQUAL(yycontext *yy); /* 10 */
+YY_RULE(int) yy_identifier(yycontext *yy); /* 9 */
+YY_RULE(int) yy_RPERCENT(yycontext *yy); /* 8 */
+YY_RULE(int) yy_end_of_line(yycontext *yy); /* 7 */
+YY_RULE(int) yy_end_of_file(yycontext *yy); /* 6 */
+YY_RULE(int) yy_trailer(yycontext *yy); /* 5 */
+YY_RULE(int) yy_definition(yycontext *yy); /* 4 */
+YY_RULE(int) yy_declaration(yycontext *yy); /* 3 */
+YY_RULE(int) yy__(yycontext *yy); /* 2 */
+YY_RULE(int) yy_grammar(yycontext *yy); /* 1 */
+
+YY_ACTION(void) yy_1_end_of_line(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_end_of_line\n"));
+ {
+#line 139
+ ++lineNumber ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_action(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_action\n"));
+ {
+#line 113
+ actionLine= lineNumber ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_9_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_9_primary\n"));
+ {
+#line 93
+ push(makePredicate("YY_END")); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_8_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_8_primary\n"));
+ {
+#line 92
+ push(makePredicate("YY_BEGIN")); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_7_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_7_primary\n"));
+ {
+#line 91
+ push(makeAction(actionLine, yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_6_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_6_primary\n"));
+ {
+#line 90
+ push(makeDot()); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_5_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_5_primary\n"));
+ {
+#line 89
+ push(makeClass(yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_4_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_4_primary\n"));
+ {
+#line 88
+ push(makeString(yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_3_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_3_primary\n"));
+ {
+#line 86
+ push(makeName(findRule(yytext))); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_2_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_2_primary\n"));
+ {
+#line 85
+ Node *name= makeName(findRule(yytext)); name->name.variable= pop(); push(name); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_primary(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_primary\n"));
+ {
+#line 84
+ push(makeVariable(yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_3_suffix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_3_suffix\n"));
+ {
+#line 81
+ push(makePlus (pop())); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_2_suffix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_2_suffix\n"));
+ {
+#line 80
+ push(makeStar (pop())); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_suffix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_suffix\n"));
+ {
+#line 79
+ push(makeQuery(pop())); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_4_prefix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_4_prefix\n"));
+ {
+#line 76
+ push(makePeekNot(pop())); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_3_prefix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_3_prefix\n"));
+ {
+#line 75
+ push(makePeekFor(pop())); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_2_prefix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_2_prefix\n"));
+ {
+#line 74
+ push(makePredicate(yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_prefix(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_prefix\n"));
+ {
+#line 73
+ push(makeInline(yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_error(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_error\n"));
+ {
+#line 70
+ push(makeError(pop(), yytext)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_sequence(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_sequence\n"));
+ {
+#line 67
+ Node *f= pop(); push(Sequence_append(pop(), f)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_expression(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_expression\n"));
+ {
+#line 64
+ Node *f= pop(); push(Alternate_append(pop(), f)); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_2_definition(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_2_definition\n"));
+ {
+#line 62
+ Node *e= pop(); Rule_setExpression(pop(), e); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_definition(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_definition\n"));
+ {
+#line 60
+ if (push(beginRule(findRule(yytext)))->rule.expression)
+ fprintf(stderr, "rule '%s' redefined\n", yytext); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_2_trailer(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_2_trailer\n"));
+ {
+#line 58
+ makeTrailer(headerLine, yytext); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_trailer(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_trailer\n"));
+ {
+#line 57
+ headerLine= lineNumber ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_2_declaration(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_2_declaration\n"));
+ {
+#line 55
+ makeHeader(headerLine, yytext); ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+YY_ACTION(void) yy_1_declaration(yycontext *yy, char *yytext, int yyleng)
+{
+#define __ yy->__
+#define yypos yy->__pos
+#define yythunkpos yy->__thunkpos
+ yyprintf((stderr, "do yy_1_declaration\n"));
+ {
+#line 53
+ headerLine= lineNumber; ;
+ }
+#undef yythunkpos
+#undef yypos
+#undef yy
+}
+
+YY_RULE(int) yy_comment(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "comment")); if (!yymatchChar(yy, '#')) goto l1;
+ l2:;
+ { int yypos3= yy->__pos, yythunkpos3= yy->__thunkpos;
+ { int yypos4= yy->__pos, yythunkpos4= yy->__thunkpos; if (!yy_end_of_line(yy)) goto l4; goto l3;
+ l4:; yy->__pos= yypos4; yy->__thunkpos= yythunkpos4;
+ } if (!yymatchDot(yy)) goto l3; goto l2;
+ l3:; yy->__pos= yypos3; yy->__thunkpos= yythunkpos3;
+ } if (!yy_end_of_line(yy)) goto l1;
+ yyprintf((stderr, " ok %s @ %s\n", "comment", yy->__buf+yy->__pos));
+ return 1;
+ l1:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "comment", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_space(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "space"));
+ { int yypos6= yy->__pos, yythunkpos6= yy->__thunkpos; if (!yymatchChar(yy, ' ')) goto l7; goto l6;
+ l7:; yy->__pos= yypos6; yy->__thunkpos= yythunkpos6; if (!yymatchChar(yy, '\t')) goto l8; goto l6;
+ l8:; yy->__pos= yypos6; yy->__thunkpos= yythunkpos6; if (!yy_end_of_line(yy)) goto l5;
+ }
+ l6:;
+ yyprintf((stderr, " ok %s @ %s\n", "space", yy->__buf+yy->__pos));
+ return 1;
+ l5:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "space", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_braces(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "braces"));
+ { int yypos10= yy->__pos, yythunkpos10= yy->__thunkpos; if (!yymatchChar(yy, '{')) goto l11;
+ l12:;
+ { int yypos13= yy->__pos, yythunkpos13= yy->__thunkpos; if (!yy_braces(yy)) goto l13; goto l12;
+ l13:; yy->__pos= yypos13; yy->__thunkpos= yythunkpos13;
+ } if (!yymatchChar(yy, '}')) goto l11; goto l10;
+ l11:; yy->__pos= yypos10; yy->__thunkpos= yythunkpos10;
+ { int yypos14= yy->__pos, yythunkpos14= yy->__thunkpos; if (!yymatchChar(yy, '}')) goto l14; goto l9;
+ l14:; yy->__pos= yypos14; yy->__thunkpos= yythunkpos14;
+ }
+ { int yypos15= yy->__pos, yythunkpos15= yy->__thunkpos; if (!yy_end_of_line(yy)) goto l16; goto l15;
+ l16:; yy->__pos= yypos15; yy->__thunkpos= yythunkpos15; if (!yymatchDot(yy)) goto l9;
+ }
+ l15:;
+ }
+ l10:;
+ yyprintf((stderr, " ok %s @ %s\n", "braces", yy->__buf+yy->__pos));
+ return 1;
+ l9:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "braces", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_range(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "range"));
+ { int yypos18= yy->__pos, yythunkpos18= yy->__thunkpos; if (!yy_char(yy)) goto l19; if (!yymatchChar(yy, '-')) goto l19; if (!yy_char(yy)) goto l19; goto l18;
+ l19:; yy->__pos= yypos18; yy->__thunkpos= yythunkpos18; if (!yy_char(yy)) goto l17;
+ }
+ l18:;
+ yyprintf((stderr, " ok %s @ %s\n", "range", yy->__buf+yy->__pos));
+ return 1;
+ l17:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "range", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_char(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "char"));
+ { int yypos21= yy->__pos, yythunkpos21= yy->__thunkpos; if (!yymatchChar(yy, '\\')) goto l22; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\204\040\000\000\000\000\000\070\146\100\124\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l22; goto l21;
+ l22:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l23; if (!yymatchChar(yy, 'x')) goto l23; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l23; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l23; goto l21;
+ l23:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l24; if (!yymatchChar(yy, 'x')) goto l24; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l24; goto l21;
+ l24:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l25; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l25; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l25; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l25; goto l21;
+ l25:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l26; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l26;
+ { int yypos27= yy->__pos, yythunkpos27= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l27; goto l28;
+ l27:; yy->__pos= yypos27; yy->__thunkpos= yythunkpos27;
+ }
+ l28:; goto l21;
+ l26:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21;
+ { int yypos29= yy->__pos, yythunkpos29= yy->__thunkpos; if (!yymatchChar(yy, '\\')) goto l29; goto l20;
+ l29:; yy->__pos= yypos29; yy->__thunkpos= yythunkpos29;
+ } if (!yymatchDot(yy)) goto l20;
+ }
+ l21:;
+ yyprintf((stderr, " ok %s @ %s\n", "char", yy->__buf+yy->__pos));
+ return 1;
+ l20:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "char", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_END(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "END")); if (!yymatchChar(yy, '>')) goto l30; if (!yy__(yy)) goto l30;
+ yyprintf((stderr, " ok %s @ %s\n", "END", yy->__buf+yy->__pos));
+ return 1;
+ l30:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "END", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_BEGIN(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "BEGIN")); if (!yymatchChar(yy, '<')) goto l31; if (!yy__(yy)) goto l31;
+ yyprintf((stderr, " ok %s @ %s\n", "BEGIN", yy->__buf+yy->__pos));
+ return 1;
+ l31:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "BEGIN", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_DOT(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "DOT")); if (!yymatchChar(yy, '.')) goto l32; if (!yy__(yy)) goto l32;
+ yyprintf((stderr, " ok %s @ %s\n", "DOT", yy->__buf+yy->__pos));
+ return 1;
+ l32:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "DOT", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_class(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "class")); if (!yymatchChar(yy, '[')) goto l33; yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l33;
+#undef yytext
+#undef yyleng
+ }
+ l34:;
+ { int yypos35= yy->__pos, yythunkpos35= yy->__thunkpos;
+ { int yypos36= yy->__pos, yythunkpos36= yy->__thunkpos; if (!yymatchChar(yy, ']')) goto l36; goto l35;
+ l36:; yy->__pos= yypos36; yy->__thunkpos= yythunkpos36;
+ } if (!yy_range(yy)) goto l35; goto l34;
+ l35:; yy->__pos= yypos35; yy->__thunkpos= yythunkpos35;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l33;
+#undef yytext
+#undef yyleng
+ } if (!yymatchChar(yy, ']')) goto l33; if (!yy__(yy)) goto l33;
+ yyprintf((stderr, " ok %s @ %s\n", "class", yy->__buf+yy->__pos));
+ return 1;
+ l33:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "class", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_literal(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "literal"));
+ { int yypos38= yy->__pos, yythunkpos38= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l39; yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l39;
+#undef yytext
+#undef yyleng
+ }
+ l40:;
+ { int yypos41= yy->__pos, yythunkpos41= yy->__thunkpos;
+ { int yypos42= yy->__pos, yythunkpos42= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l42; goto l41;
+ l42:; yy->__pos= yypos42; yy->__thunkpos= yythunkpos42;
+ } if (!yy_char(yy)) goto l41; goto l40;
+ l41:; yy->__pos= yypos41; yy->__thunkpos= yythunkpos41;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l39;
+#undef yytext
+#undef yyleng
+ } if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l39; if (!yy__(yy)) goto l39; goto l38;
+ l39:; yy->__pos= yypos38; yy->__thunkpos= yythunkpos38; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l37; yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l37;
+#undef yytext
+#undef yyleng
+ }
+ l43:;
+ { int yypos44= yy->__pos, yythunkpos44= yy->__thunkpos;
+ { int yypos45= yy->__pos, yythunkpos45= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l45; goto l44;
+ l45:; yy->__pos= yypos45; yy->__thunkpos= yythunkpos45;
+ } if (!yy_char(yy)) goto l44; goto l43;
+ l44:; yy->__pos= yypos44; yy->__thunkpos= yythunkpos44;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l37;
+#undef yytext
+#undef yyleng
+ } if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l37; if (!yy__(yy)) goto l37;
+ }
+ l38:;
+ yyprintf((stderr, " ok %s @ %s\n", "literal", yy->__buf+yy->__pos));
+ return 1;
+ l37:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "literal", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_CLOSE(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "CLOSE")); if (!yymatchChar(yy, ')')) goto l46; if (!yy__(yy)) goto l46;
+ yyprintf((stderr, " ok %s @ %s\n", "CLOSE", yy->__buf+yy->__pos));
+ return 1;
+ l46:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "CLOSE", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_OPEN(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "OPEN")); if (!yymatchChar(yy, '(')) goto l47; if (!yy__(yy)) goto l47;
+ yyprintf((stderr, " ok %s @ %s\n", "OPEN", yy->__buf+yy->__pos));
+ return 1;
+ l47:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "OPEN", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_COLON(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "COLON")); if (!yymatchChar(yy, ':')) goto l48; if (!yy__(yy)) goto l48;
+ yyprintf((stderr, " ok %s @ %s\n", "COLON", yy->__buf+yy->__pos));
+ return 1;
+ l48:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "COLON", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_PLUS(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "PLUS")); if (!yymatchChar(yy, '+')) goto l49; if (!yy__(yy)) goto l49;
+ yyprintf((stderr, " ok %s @ %s\n", "PLUS", yy->__buf+yy->__pos));
+ return 1;
+ l49:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "PLUS", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_STAR(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "STAR")); if (!yymatchChar(yy, '*')) goto l50; if (!yy__(yy)) goto l50;
+ yyprintf((stderr, " ok %s @ %s\n", "STAR", yy->__buf+yy->__pos));
+ return 1;
+ l50:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "STAR", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_QUESTION(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "QUESTION")); if (!yymatchChar(yy, '?')) goto l51; if (!yy__(yy)) goto l51;
+ yyprintf((stderr, " ok %s @ %s\n", "QUESTION", yy->__buf+yy->__pos));
+ return 1;
+ l51:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "QUESTION", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_primary(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "primary"));
+ { int yypos53= yy->__pos, yythunkpos53= yy->__thunkpos; if (!yy_identifier(yy)) goto l54; yyDo(yy, yy_1_primary, yy->__begin, yy->__end); if (!yy_COLON(yy)) goto l54; if (!yy_identifier(yy)) goto l54;
+ { int yypos55= yy->__pos, yythunkpos55= yy->__thunkpos; if (!yy_EQUAL(yy)) goto l55; goto l54;
+ l55:; yy->__pos= yypos55; yy->__thunkpos= yythunkpos55;
+ } yyDo(yy, yy_2_primary, yy->__begin, yy->__end); goto l53;
+ l54:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_identifier(yy)) goto l56;
+ { int yypos57= yy->__pos, yythunkpos57= yy->__thunkpos; if (!yy_EQUAL(yy)) goto l57; goto l56;
+ l57:; yy->__pos= yypos57; yy->__thunkpos= yythunkpos57;
+ } yyDo(yy, yy_3_primary, yy->__begin, yy->__end); goto l53;
+ l56:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_OPEN(yy)) goto l58; if (!yy_expression(yy)) goto l58; if (!yy_CLOSE(yy)) goto l58; goto l53;
+ l58:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_literal(yy)) goto l59; yyDo(yy, yy_4_primary, yy->__begin, yy->__end); goto l53;
+ l59:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_class(yy)) goto l60; yyDo(yy, yy_5_primary, yy->__begin, yy->__end); goto l53;
+ l60:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_DOT(yy)) goto l61; yyDo(yy, yy_6_primary, yy->__begin, yy->__end); goto l53;
+ l61:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_action(yy)) goto l62; yyDo(yy, yy_7_primary, yy->__begin, yy->__end); goto l53;
+ l62:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_BEGIN(yy)) goto l63; yyDo(yy, yy_8_primary, yy->__begin, yy->__end); goto l53;
+ l63:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_END(yy)) goto l52; yyDo(yy, yy_9_primary, yy->__begin, yy->__end);
+ }
+ l53:;
+ yyprintf((stderr, " ok %s @ %s\n", "primary", yy->__buf+yy->__pos));
+ return 1;
+ l52:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "primary", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_NOT(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "NOT")); if (!yymatchChar(yy, '!')) goto l64; if (!yy__(yy)) goto l64;
+ yyprintf((stderr, " ok %s @ %s\n", "NOT", yy->__buf+yy->__pos));
+ return 1;
+ l64:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "NOT", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_suffix(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "suffix")); if (!yy_primary(yy)) goto l65;
+ { int yypos66= yy->__pos, yythunkpos66= yy->__thunkpos;
+ { int yypos68= yy->__pos, yythunkpos68= yy->__thunkpos; if (!yy_QUESTION(yy)) goto l69; yyDo(yy, yy_1_suffix, yy->__begin, yy->__end); goto l68;
+ l69:; yy->__pos= yypos68; yy->__thunkpos= yythunkpos68; if (!yy_STAR(yy)) goto l70; yyDo(yy, yy_2_suffix, yy->__begin, yy->__end); goto l68;
+ l70:; yy->__pos= yypos68; yy->__thunkpos= yythunkpos68; if (!yy_PLUS(yy)) goto l66; yyDo(yy, yy_3_suffix, yy->__begin, yy->__end);
+ }
+ l68:; goto l67;
+ l66:; yy->__pos= yypos66; yy->__thunkpos= yythunkpos66;
+ }
+ l67:;
+ yyprintf((stderr, " ok %s @ %s\n", "suffix", yy->__buf+yy->__pos));
+ return 1;
+ l65:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "suffix", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_AND(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "AND")); if (!yymatchChar(yy, '&')) goto l71; if (!yy__(yy)) goto l71;
+ yyprintf((stderr, " ok %s @ %s\n", "AND", yy->__buf+yy->__pos));
+ return 1;
+ l71:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "AND", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_AT(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "AT")); if (!yymatchChar(yy, '@')) goto l72; if (!yy__(yy)) goto l72;
+ yyprintf((stderr, " ok %s @ %s\n", "AT", yy->__buf+yy->__pos));
+ return 1;
+ l72:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "AT", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_action(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "action")); if (!yymatchChar(yy, '{')) goto l73; yyDo(yy, yy_1_action, yy->__begin, yy->__end); yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l73;
+#undef yytext
+#undef yyleng
+ }
+ l74:;
+ { int yypos75= yy->__pos, yythunkpos75= yy->__thunkpos; if (!yy_braces(yy)) goto l75; goto l74;
+ l75:; yy->__pos= yypos75; yy->__thunkpos= yythunkpos75;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l73;
+#undef yytext
+#undef yyleng
+ } if (!yymatchChar(yy, '}')) goto l73; if (!yy__(yy)) goto l73;
+ yyprintf((stderr, " ok %s @ %s\n", "action", yy->__buf+yy->__pos));
+ return 1;
+ l73:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "action", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_TILDE(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "TILDE")); if (!yymatchChar(yy, '~')) goto l76; if (!yy__(yy)) goto l76;
+ yyprintf((stderr, " ok %s @ %s\n", "TILDE", yy->__buf+yy->__pos));
+ return 1;
+ l76:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "TILDE", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_prefix(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "prefix"));
+ { int yypos78= yy->__pos, yythunkpos78= yy->__thunkpos; if (!yy_AT(yy)) goto l79; if (!yy_action(yy)) goto l79; yyDo(yy, yy_1_prefix, yy->__begin, yy->__end); goto l78;
+ l79:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_AND(yy)) goto l80; if (!yy_action(yy)) goto l80; yyDo(yy, yy_2_prefix, yy->__begin, yy->__end); goto l78;
+ l80:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_AND(yy)) goto l81; if (!yy_suffix(yy)) goto l81; yyDo(yy, yy_3_prefix, yy->__begin, yy->__end); goto l78;
+ l81:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_NOT(yy)) goto l82; if (!yy_suffix(yy)) goto l82; yyDo(yy, yy_4_prefix, yy->__begin, yy->__end); goto l78;
+ l82:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_suffix(yy)) goto l77;
+ }
+ l78:;
+ yyprintf((stderr, " ok %s @ %s\n", "prefix", yy->__buf+yy->__pos));
+ return 1;
+ l77:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "prefix", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_error(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "error")); if (!yy_prefix(yy)) goto l83;
+ { int yypos84= yy->__pos, yythunkpos84= yy->__thunkpos; if (!yy_TILDE(yy)) goto l84; if (!yy_action(yy)) goto l84; yyDo(yy, yy_1_error, yy->__begin, yy->__end); goto l85;
+ l84:; yy->__pos= yypos84; yy->__thunkpos= yythunkpos84;
+ }
+ l85:;
+ yyprintf((stderr, " ok %s @ %s\n", "error", yy->__buf+yy->__pos));
+ return 1;
+ l83:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "error", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_BAR(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "BAR")); if (!yymatchChar(yy, '|')) goto l86; if (!yy__(yy)) goto l86;
+ yyprintf((stderr, " ok %s @ %s\n", "BAR", yy->__buf+yy->__pos));
+ return 1;
+ l86:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "BAR", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_sequence(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "sequence")); if (!yy_error(yy)) goto l87;
+ l88:;
+ { int yypos89= yy->__pos, yythunkpos89= yy->__thunkpos; if (!yy_error(yy)) goto l89; yyDo(yy, yy_1_sequence, yy->__begin, yy->__end); goto l88;
+ l89:; yy->__pos= yypos89; yy->__thunkpos= yythunkpos89;
+ }
+ yyprintf((stderr, " ok %s @ %s\n", "sequence", yy->__buf+yy->__pos));
+ return 1;
+ l87:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "sequence", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_expression(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "expression")); if (!yy_sequence(yy)) goto l90;
+ l91:;
+ { int yypos92= yy->__pos, yythunkpos92= yy->__thunkpos; if (!yy_BAR(yy)) goto l92; if (!yy_sequence(yy)) goto l92; yyDo(yy, yy_1_expression, yy->__begin, yy->__end); goto l91;
+ l92:; yy->__pos= yypos92; yy->__thunkpos= yythunkpos92;
+ }
+ yyprintf((stderr, " ok %s @ %s\n", "expression", yy->__buf+yy->__pos));
+ return 1;
+ l90:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "expression", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_EQUAL(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "EQUAL")); if (!yymatchChar(yy, '=')) goto l93; if (!yy__(yy)) goto l93;
+ yyprintf((stderr, " ok %s @ %s\n", "EQUAL", yy->__buf+yy->__pos));
+ return 1;
+ l93:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "EQUAL", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_identifier(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "identifier")); yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l94;
+#undef yytext
+#undef yyleng
+ } if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\040\000\000\376\377\377\207\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l94;
+ l95:;
+ { int yypos96= yy->__pos, yythunkpos96= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\040\377\003\376\377\377\207\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l96; goto l95;
+ l96:; yy->__pos= yypos96; yy->__thunkpos= yythunkpos96;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l94;
+#undef yytext
+#undef yyleng
+ } if (!yy__(yy)) goto l94;
+ yyprintf((stderr, " ok %s @ %s\n", "identifier", yy->__buf+yy->__pos));
+ return 1;
+ l94:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "identifier", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_RPERCENT(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "RPERCENT")); if (!yymatchString(yy, "%}")) goto l97; if (!yy__(yy)) goto l97;
+ yyprintf((stderr, " ok %s @ %s\n", "RPERCENT", yy->__buf+yy->__pos));
+ return 1;
+ l97:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "RPERCENT", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_end_of_line(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "end_of_line"));
+ { int yypos99= yy->__pos, yythunkpos99= yy->__thunkpos; if (!yymatchString(yy, "\r\n")) goto l100; goto l99;
+ l100:; yy->__pos= yypos99; yy->__thunkpos= yythunkpos99; if (!yymatchChar(yy, '\n')) goto l101; goto l99;
+ l101:; yy->__pos= yypos99; yy->__thunkpos= yythunkpos99; if (!yymatchChar(yy, '\r')) goto l98;
+ }
+ l99:; yyDo(yy, yy_1_end_of_line, yy->__begin, yy->__end);
+ yyprintf((stderr, " ok %s @ %s\n", "end_of_line", yy->__buf+yy->__pos));
+ return 1;
+ l98:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "end_of_line", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_end_of_file(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "end_of_file"));
+ { int yypos103= yy->__pos, yythunkpos103= yy->__thunkpos; if (!yymatchDot(yy)) goto l103; goto l102;
+ l103:; yy->__pos= yypos103; yy->__thunkpos= yythunkpos103;
+ }
+ yyprintf((stderr, " ok %s @ %s\n", "end_of_file", yy->__buf+yy->__pos));
+ return 1;
+ l102:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "end_of_file", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_trailer(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "trailer")); if (!yymatchString(yy, "%%")) goto l104; yyDo(yy, yy_1_trailer, yy->__begin, yy->__end); yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l104;
+#undef yytext
+#undef yyleng
+ }
+ l105:;
+ { int yypos106= yy->__pos, yythunkpos106= yy->__thunkpos; if (!yymatchDot(yy)) goto l106; goto l105;
+ l106:; yy->__pos= yypos106; yy->__thunkpos= yythunkpos106;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l104;
+#undef yytext
+#undef yyleng
+ } yyDo(yy, yy_2_trailer, yy->__begin, yy->__end);
+ yyprintf((stderr, " ok %s @ %s\n", "trailer", yy->__buf+yy->__pos));
+ return 1;
+ l104:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "trailer", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_definition(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "definition")); if (!yy_identifier(yy)) goto l107; yyDo(yy, yy_1_definition, yy->__begin, yy->__end); if (!yy_EQUAL(yy)) goto l107; if (!yy_expression(yy)) goto l107; yyDo(yy, yy_2_definition, yy->__begin, yy->__end);
+ yyprintf((stderr, " ok %s @ %s\n", "definition", yy->__buf+yy->__pos));
+ return 1;
+ l107:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "definition", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy_declaration(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "declaration")); if (!yymatchString(yy, "%{")) goto l108; yyDo(yy, yy_1_declaration, yy->__begin, yy->__end); yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_BEGIN)) goto l108;
+#undef yytext
+#undef yyleng
+ }
+ l109:;
+ { int yypos110= yy->__pos, yythunkpos110= yy->__thunkpos;
+ { int yypos111= yy->__pos, yythunkpos111= yy->__thunkpos; if (!yymatchString(yy, "%}")) goto l111; goto l110;
+ l111:; yy->__pos= yypos111; yy->__thunkpos= yythunkpos111;
+ }
+ { int yypos112= yy->__pos, yythunkpos112= yy->__thunkpos; if (!yy_end_of_line(yy)) goto l113; goto l112;
+ l113:; yy->__pos= yypos112; yy->__thunkpos= yythunkpos112; if (!yymatchDot(yy)) goto l110;
+ }
+ l112:; goto l109;
+ l110:; yy->__pos= yypos110; yy->__thunkpos= yythunkpos110;
+ } yyText(yy, yy->__begin, yy->__end); {
+#define yytext yy->__text
+#define yyleng yy->__textlen
+if (!(YY_END)) goto l108;
+#undef yytext
+#undef yyleng
+ } if (!yy_RPERCENT(yy)) goto l108; yyDo(yy, yy_2_declaration, yy->__begin, yy->__end);
+ yyprintf((stderr, " ok %s @ %s\n", "declaration", yy->__buf+yy->__pos));
+ return 1;
+ l108:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "declaration", yy->__buf+yy->__pos));
+ return 0;
+}
+YY_RULE(int) yy__(yycontext *yy)
+{
+ yyprintf((stderr, "%s\n", "_"));
+ l115:;
+ { int yypos116= yy->__pos, yythunkpos116= yy->__thunkpos;
+ { int yypos117= yy->__pos, yythunkpos117= yy->__thunkpos; if (!yy_space(yy)) goto l118; goto l117;
+ l118:; yy->__pos= yypos117; yy->__thunkpos= yythunkpos117; if (!yy_comment(yy)) goto l116;
+ }
+ l117:; goto l115;
+ l116:; yy->__pos= yypos116; yy->__thunkpos= yythunkpos116;
+ }
+ yyprintf((stderr, " ok %s @ %s\n", "_", yy->__buf+yy->__pos));
+ return 1;
+}
+YY_RULE(int) yy_grammar(yycontext *yy)
+{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
+ yyprintf((stderr, "%s\n", "grammar")); if (!yy__(yy)) goto l119;
+ { int yypos122= yy->__pos, yythunkpos122= yy->__thunkpos; if (!yy_declaration(yy)) goto l123; goto l122;
+ l123:; yy->__pos= yypos122; yy->__thunkpos= yythunkpos122; if (!yy_definition(yy)) goto l119;
+ }
+ l122:;
+ l120:;
+ { int yypos121= yy->__pos, yythunkpos121= yy->__thunkpos;
+ { int yypos124= yy->__pos, yythunkpos124= yy->__thunkpos; if (!yy_declaration(yy)) goto l125; goto l124;
+ l125:; yy->__pos= yypos124; yy->__thunkpos= yythunkpos124; if (!yy_definition(yy)) goto l121;
+ }
+ l124:; goto l120;
+ l121:; yy->__pos= yypos121; yy->__thunkpos= yythunkpos121;
+ }
+ { int yypos126= yy->__pos, yythunkpos126= yy->__thunkpos; if (!yy_trailer(yy)) goto l126; goto l127;
+ l126:; yy->__pos= yypos126; yy->__thunkpos= yythunkpos126;
+ }
+ l127:; if (!yy_end_of_file(yy)) goto l119;
+ yyprintf((stderr, " ok %s @ %s\n", "grammar", yy->__buf+yy->__pos));
+ return 1;
+ l119:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
+ yyprintf((stderr, " fail %s @ %s\n", "grammar", yy->__buf+yy->__pos));
+ return 0;
+}
+
+#ifndef YY_PART
+
+typedef int (*yyrule)(yycontext *yy);
+
+YY_PARSE(int) YYPARSEFROM(YY_CTX_PARAM_ yyrule yystart)
+{
+ int yyok;
+ if (!yyctx->__buflen)
+ {
+ yyctx->__buflen= YY_BUFFER_SIZE;
+ yyctx->__buf= (char *)YY_MALLOC(yyctx, yyctx->__buflen);
+ yyctx->__textlen= YY_BUFFER_SIZE;
+ yyctx->__text= (char *)YY_MALLOC(yyctx, yyctx->__textlen);
+ yyctx->__thunkslen= YY_STACK_SIZE;
+ yyctx->__thunks= (yythunk *)YY_MALLOC(yyctx, sizeof(yythunk) * yyctx->__thunkslen);
+ yyctx->__valslen= YY_STACK_SIZE;
+ yyctx->__vals= (YYSTYPE *)YY_MALLOC(yyctx, sizeof(YYSTYPE) * yyctx->__valslen);
+ yyctx->__begin= yyctx->__end= yyctx->__pos= yyctx->__limit= yyctx->__thunkpos= 0;
+ }
+ yyctx->__begin= yyctx->__end= yyctx->__pos;
+ yyctx->__thunkpos= 0;
+ yyctx->__val= yyctx->__vals;
+ yyok= yystart(yyctx);
+ if (yyok) yyDone(yyctx);
+ yyCommit(yyctx);
+ return yyok;
+}
+
+YY_PARSE(int) YYPARSE(YY_CTX_PARAM)
+{
+ return YYPARSEFROM(YY_CTX_ARG_ yy_grammar);
+}
+
+YY_PARSE(yycontext *) YYRELEASE(yycontext *yyctx)
+{
+ if (yyctx->__buflen)
+ {
+ yyctx->__buflen= 0;
+ YY_FREE(yyctx, yyctx->__buf);
+ YY_FREE(yyctx, yyctx->__text);
+ YY_FREE(yyctx, yyctx->__thunks);
+ YY_FREE(yyctx, yyctx->__vals);
+ }
+ return yyctx;
+}
+
+#endif
+#line 142 "peg.peg"
+
+
+void yyerror(char *message)
+{
+ fprintf(stderr, "%s:%d: %s", fileName, lineNumber, message);
+ if (yyctx->__text[0]) fprintf(stderr, " near token '%s'", yyctx->__text);
+ if (yyctx->__pos < yyctx->__limit || !feof(input))
+ {
+ yyctx->__buf[yyctx->__limit]= '\0';
+ fprintf(stderr, " before text \"");
+ while (yyctx->__pos < yyctx->__limit)
+ {
+ if ('\n' == yyctx->__buf[yyctx->__pos] || '\r' == yyctx->__buf[yyctx->__pos]) break;
+ fputc(yyctx->__buf[yyctx->__pos++], stderr);
+ }
+ if (yyctx->__pos == yyctx->__limit)
+ {
+ int c;
+ while (EOF != (c= fgetc(input)) && '\n' != c && '\r' != c)
+ fputc(c, stderr);
+ }
+ fputc('\"', stderr);
+ }
+ fprintf(stderr, "\n");
+ exit(1);
+}
+
+void makeHeader(int line, char *text)
+{
+ Header *header= (Header *)malloc(sizeof(Header));
+ header->line= line;
+ header->text= strdup(text);
+ header->next= headers;
+ headers= header;
+}
+
+void makeTrailer(int line, char *text)
+{
+ trailerLine= line;
+ trailer= strdup(text);
+}
+
+static void version(char *name)
+{
+ printf("%s version %s\n", name, MINIPEG_VERSION);
+}
+
+static void usage(char *name)
+{
+ version(name);
+ fprintf(stderr, "usage: %s [<option>...] [<file>...]\n", name);
+ fprintf(stderr, "where <option> can be\n");
+ fprintf(stderr, " -h print this help information\n");
+ fprintf(stderr, " -o <ofile> write output to <ofile>\n");
+ fprintf(stderr, " -P do not generate #line directives\n");
+ fprintf(stderr, " -v be verbose\n");
+ fprintf(stderr, " -V print version number and exit\n");
+ fprintf(stderr, "if no <file> is given, input is read from stdin\n");
+ fprintf(stderr, "if no <ofile> is given, output is written to stdout\n");
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ Node *n;
+ int c;
+
+ output= stdout;
+ input= stdin;
+ lineNumber= 1;
+ fileName= "<stdin>";
+
+ while (-1 != (c= getopt(argc, argv, "PVho:v")))
+ {
+ switch (c)
+ {
+ case 'V':
+ version(basename(argv[0]));
+ exit(0);
+
+ case 'h':
+ usage(basename(argv[0]));
+ break;
+
+ case 'o':
+ if (!(output= fopen(optarg, "w")))
+ {
+ perror(optarg);
+ exit(1);
+ }
+ break;
+
+ case 'P':
+ nolinesFlag= 1;
+ break;
+
+ case 'v':
+ verboseFlag= 1;
+ break;
+
+ default:
+ fprintf(stderr, "for usage try: %s -h\n", argv[0]);
+ exit(1);
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc)
+ {
+ for (; argc; --argc, ++argv)
+ {
+ if (!strcmp(*argv, "-"))
+ {
+ input= stdin;
+ fileName= "<stdin>";
+ }
+ else
+ {
+ if (!(input= fopen(*argv, "r")))
+ {
+ perror(*argv);
+ exit(1);
+ }
+ fileName= *argv;
+ }
+ lineNumber= 1;
+ if (!yyparse())
+ yyerror("syntax error");
+ if (input != stdin)
+ fclose(input);
+ }
+ }
+ else
+ if (!yyparse())
+ yyerror("syntax error");
+
+ if (verboseFlag)
+ for (n= rules; n; n= n->any.next)
+ Rule_print(n);
+
+ Rule_compile_c_header();
+
+ for (; headers; headers= headers->next)
+ fprintf(output, "#line %i \"%s\"\n%s\n", headers->line, fileName, headers->text);
+
+ if (rules)
+ Rule_compile_c(rules, nolinesFlag);
+
+ if (trailer) {
+ if (!nolinesFlag)
+ fprintf(output, "#line %i \"%s\"\n", trailerLine, fileName);
+ fprintf(output, "%s\n", trailer);
+ }
+
+ return 0;
+}
+
--- a/peg.c
+++ /dev/null
@@ -1,1545 +1,0 @@
-/* A recursive-descent parser generated by minipeg 0.1.19 */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#define YYRULECOUNT 38
-#line 1 "peg.peg"
-
-#include "tree.h"
-#include "version.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <libgen.h>
-#include <assert.h>
-
- typedef struct Header Header;
-
- struct Header {
- int line;
- char *text;
- Header *next;
- };
-
- FILE *input= 0;
-
- int verboseFlag= 0;
- int nolinesFlag= 0;
-
- static int lineNumber= 0;
- static int headerLine= 0;
- static int actionLine= 0;
- static char *fileName= 0;
- static int trailerLine= 0;
- static char *trailer= 0;
- static Header *headers= 0;
-
- void makeHeader(int line, char *text);
- void makeTrailer(int line, char *text);
-
- void yyerror(char *message);
-
-# define YY_INPUT(buf, result, max) \
- { \
- int c= getc(input); \
- /* if ('\n' == c || '\r' == c) ++lineNumber; */ \
- result= (EOF == c) ? 0 : (*(buf)= c, 1); \
- }
-
-# define YY_LOCAL(T) static T
-# define YY_RULE(T) static T
-
-#ifndef YY_MAYBE_UNUSED
-#define YY_MAYBE_UNUSED __attribute__((unused))
-#endif
-#ifndef YY_MALLOC
-#define YY_MALLOC(C, N) malloc(N)
-#endif
-#ifndef YY_REALLOC
-#define YY_REALLOC(C, P, N) realloc(P, N)
-#endif
-#ifndef YY_FREE
-#define YY_FREE(C, P) free(P)
-#endif
-#ifndef YY_LOCAL
-#define YY_LOCAL(T) static T
-#endif
-#ifndef YY_ACTION
-#define YY_ACTION(T) static T
-#endif
-#ifndef YY_RULE
-#define YY_RULE(T) static T
-#endif
-#ifndef YY_PARSE
-#define YY_PARSE(T) T
-#endif
-#ifndef YYPARSE
-#define YYPARSE yyparse
-#endif
-#ifndef YYPARSEFROM
-#define YYPARSEFROM yyparsefrom
-#endif
-#ifndef YYRELEASE
-#define YYRELEASE yyrelease
-#endif
-#ifndef YY_BEGIN
-#define YY_BEGIN ( yy->__begin= yy->__pos, 1)
-#endif
-#ifndef YY_END
-#define YY_END ( yy->__end= yy->__pos, 1)
-#endif
-#ifdef YY_DEBUG
-# define yyprintf(args) fprintf args
-#else
-# define yyprintf(args)
-#endif
-#ifndef YYSTYPE
-#define YYSTYPE int
-#endif
-#ifndef YY_STACK_SIZE
-#define YY_STACK_SIZE 128
-#endif
-
-#ifndef YY_BUFFER_SIZE
-#define YY_BUFFER_SIZE 1024
-#endif
-
-#ifndef YY_PART
-
-typedef struct _yycontext yycontext;
-typedef void (*yyaction)(yycontext *yy, char *yytext, int yyleng);
-typedef struct _yythunk { int begin, end; yyaction action; struct _yythunk *next; } yythunk;
-
-struct _yycontext {
- char *__buf;
- int __buflen;
- int __pos;
- int __limit;
- char *__text;
- int __textlen;
- int __begin;
- int __end;
- int __textmax;
- yythunk *__thunks;
- int __thunkslen;
- int __thunkpos;
- YYSTYPE __;
- YYSTYPE *__val;
- YYSTYPE *__vals;
- int __valslen;
-#ifdef YY_CTX_MEMBERS
- YY_CTX_MEMBERS
-#endif
-};
-
-#ifdef YY_CTX_LOCAL
-#define YY_CTX_PARAM_ yycontext *yyctx,
-#define YY_CTX_PARAM yycontext *yyctx
-#define YY_CTX_ARG_ yyctx,
-#define YY_CTX_ARG yyctx
-#ifndef YY_INPUT
-#define YY_INPUT(yy, buf, result, max_size) \
- { \
- int yyc= getchar(); \
- result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \
- yyprintf((stderr, "<%c>", yyc)); \
- }
-#endif
-#else
-#define YY_CTX_PARAM_
-#define YY_CTX_PARAM
-#define YY_CTX_ARG_
-#define YY_CTX_ARG
-yycontext _yyctx= { 0, 0 };
-yycontext *yyctx= &_yyctx;
-#ifndef YY_INPUT
-#define YY_INPUT(buf, result, max_size) \
- { \
- int yyc= getchar(); \
- result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \
- yyprintf((stderr, "<%c>", yyc)); \
- }
-#endif
-#endif
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yyrefill(yycontext *yy)
-{
- int yyn;
- while (yy->__buflen - yy->__pos < 512)
- {
- yy->__buflen *= 2;
- yy->__buf= (char *)YY_REALLOC(yy, yy->__buf, yy->__buflen);
- }
-#ifdef YY_CTX_LOCAL
- YY_INPUT(yy, (yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos));
-#else
- YY_INPUT((yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos));
-#endif
- if (!yyn) return 0;
- yy->__limit += yyn;
- return 1;
-}
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yymatchDot(yycontext *yy)
-{
- if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
- ++yy->__pos;
- return 1;
-}
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yymatchChar(yycontext *yy, int c)
-{
- if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
- if ((unsigned char)yy->__buf[yy->__pos] == c)
- {
- ++yy->__pos;
- yyprintf((stderr, " ok yymatchChar(yy, %c) @ %s\n", c, yy->__buf+yy->__pos));
- return 1;
- }
- yyprintf((stderr, " fail yymatchChar(yy, %c) @ %s\n", c, yy->__buf+yy->__pos));
- return 0;
-}
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yymatchString(yycontext *yy, const char *s)
-{
- int yysav= yy->__pos;
- while (*s)
- {
- if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
- if (yy->__buf[yy->__pos] != *s)
- {
- yy->__pos= yysav;
- return 0;
- }
- ++s;
- ++yy->__pos;
- }
- return 1;
-}
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yymatchClass(yycontext *yy, unsigned char *bits)
-{
- int c;
- if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0;
- c= (unsigned char)yy->__buf[yy->__pos];
- if (bits[c >> 3] & (1 << (c & 7)))
- {
- ++yy->__pos;
- yyprintf((stderr, " ok yymatchClass @ %s\n", yy->__buf+yy->__pos));
- return 1;
- }
- yyprintf((stderr, " fail yymatchClass @ %s\n", yy->__buf+yy->__pos));
- return 0;
-}
-
-YY_LOCAL(void) YY_MAYBE_UNUSED yyDo(yycontext *yy, yyaction action, int begin, int end)
-{
- while (yy->__thunkpos >= yy->__thunkslen)
- {
- yy->__thunkslen *= 2;
- yy->__thunks= (yythunk *)YY_REALLOC(yy, yy->__thunks, sizeof(yythunk) * yy->__thunkslen);
- }
- yy->__thunks[yy->__thunkpos].begin= begin;
- yy->__thunks[yy->__thunkpos].end= end;
- yy->__thunks[yy->__thunkpos].action= action;
- ++yy->__thunkpos;
-}
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yyText(yycontext *yy, int begin, int end)
-{
- int yyleng= end - begin;
- if (yyleng <= 0)
- yyleng= 0;
- else
- {
- while (yy->__textlen < (yyleng + 1))
- {
- yy->__textlen *= 2;
- yy->__text= (char *)YY_REALLOC(yy, yy->__text, yy->__textlen);
- }
- memcpy(yy->__text, yy->__buf + begin, yyleng);
- }
- yy->__text[yyleng]= '\0';
- return yyleng;
-}
-
-YY_LOCAL(void) yyDone(yycontext *yy)
-{
- int pos;
- for (pos= 0; pos < yy->__thunkpos; ++pos)
- {
- yythunk *thunk= &yy->__thunks[pos];
- int yyleng= thunk->end ? yyText(yy, thunk->begin, thunk->end) : thunk->begin;
- yyprintf((stderr, "DO [%d] %p %s\n", pos, thunk->action, yy->__text));
- thunk->action(yy, yy->__text, yyleng);
- }
- yy->__thunkpos= 0;
-}
-
-YY_LOCAL(void) yyCommit(yycontext *yy)
-{
- if ((yy->__limit -= yy->__pos))
- {
- memmove(yy->__buf, yy->__buf + yy->__pos, yy->__limit);
- }
- yy->__begin -= yy->__pos;
- yy->__end -= yy->__pos;
- yy->__pos= yy->__thunkpos= 0;
-}
-
-YY_LOCAL(int) YY_MAYBE_UNUSED yyAccept(yycontext *yy, int tp0)
-{
- if (tp0)
- {
- fprintf(stderr, "accept denied at %d\n", tp0);
- return 0;
- }
- else
- {
- yyDone(yy);
- yyCommit(yy);
- }
- return 1;
-}
-
-YY_LOCAL(void) YY_MAYBE_UNUSED yyPush(yycontext *yy, char *text, int count)
-{
- yy->__val += count;
- while (yy->__valslen <= yy->__val - yy->__vals)
- {
- long offset= yy->__val - yy->__vals;
- yy->__valslen *= 2;
- yy->__vals= (YYSTYPE *)YY_REALLOC(yy, yy->__vals, sizeof(YYSTYPE) * yy->__valslen);
- yy->__val= yy->__vals + offset;
- }
-}
-YY_LOCAL(void) YY_MAYBE_UNUSED yyPop(yycontext *yy, char *text, int count) { yy->__val -= count; }
-YY_LOCAL(void) YY_MAYBE_UNUSED yySet(yycontext *yy, char *text, int count) { yy->__val[count]= yy->__; }
-
-#endif /* YY_PART */
-
-#define YYACCEPT yyAccept(yy, yythunkpos0)
-
-YY_RULE(int) yy_comment(yycontext *yy); /* 38 */
-YY_RULE(int) yy_space(yycontext *yy); /* 37 */
-YY_RULE(int) yy_braces(yycontext *yy); /* 36 */
-YY_RULE(int) yy_range(yycontext *yy); /* 35 */
-YY_RULE(int) yy_char(yycontext *yy); /* 34 */
-YY_RULE(int) yy_END(yycontext *yy); /* 33 */
-YY_RULE(int) yy_BEGIN(yycontext *yy); /* 32 */
-YY_RULE(int) yy_DOT(yycontext *yy); /* 31 */
-YY_RULE(int) yy_class(yycontext *yy); /* 30 */
-YY_RULE(int) yy_literal(yycontext *yy); /* 29 */
-YY_RULE(int) yy_CLOSE(yycontext *yy); /* 28 */
-YY_RULE(int) yy_OPEN(yycontext *yy); /* 27 */
-YY_RULE(int) yy_COLON(yycontext *yy); /* 26 */
-YY_RULE(int) yy_PLUS(yycontext *yy); /* 25 */
-YY_RULE(int) yy_STAR(yycontext *yy); /* 24 */
-YY_RULE(int) yy_QUESTION(yycontext *yy); /* 23 */
-YY_RULE(int) yy_primary(yycontext *yy); /* 22 */
-YY_RULE(int) yy_NOT(yycontext *yy); /* 21 */
-YY_RULE(int) yy_suffix(yycontext *yy); /* 20 */
-YY_RULE(int) yy_AND(yycontext *yy); /* 19 */
-YY_RULE(int) yy_AT(yycontext *yy); /* 18 */
-YY_RULE(int) yy_action(yycontext *yy); /* 17 */
-YY_RULE(int) yy_TILDE(yycontext *yy); /* 16 */
-YY_RULE(int) yy_prefix(yycontext *yy); /* 15 */
-YY_RULE(int) yy_error(yycontext *yy); /* 14 */
-YY_RULE(int) yy_BAR(yycontext *yy); /* 13 */
-YY_RULE(int) yy_sequence(yycontext *yy); /* 12 */
-YY_RULE(int) yy_expression(yycontext *yy); /* 11 */
-YY_RULE(int) yy_EQUAL(yycontext *yy); /* 10 */
-YY_RULE(int) yy_identifier(yycontext *yy); /* 9 */
-YY_RULE(int) yy_RPERCENT(yycontext *yy); /* 8 */
-YY_RULE(int) yy_end_of_line(yycontext *yy); /* 7 */
-YY_RULE(int) yy_end_of_file(yycontext *yy); /* 6 */
-YY_RULE(int) yy_trailer(yycontext *yy); /* 5 */
-YY_RULE(int) yy_definition(yycontext *yy); /* 4 */
-YY_RULE(int) yy_declaration(yycontext *yy); /* 3 */
-YY_RULE(int) yy__(yycontext *yy); /* 2 */
-YY_RULE(int) yy_grammar(yycontext *yy); /* 1 */
-
-YY_ACTION(void) yy_1_end_of_line(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_end_of_line\n"));
- {
-#line 139
- ++lineNumber ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_action(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_action\n"));
- {
-#line 113
- actionLine= lineNumber ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_9_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_9_primary\n"));
- {
-#line 93
- push(makePredicate("YY_END")); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_8_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_8_primary\n"));
- {
-#line 92
- push(makePredicate("YY_BEGIN")); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_7_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_7_primary\n"));
- {
-#line 91
- push(makeAction(actionLine, yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_6_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_6_primary\n"));
- {
-#line 90
- push(makeDot()); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_5_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_5_primary\n"));
- {
-#line 89
- push(makeClass(yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_4_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_4_primary\n"));
- {
-#line 88
- push(makeString(yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_3_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_3_primary\n"));
- {
-#line 86
- push(makeName(findRule(yytext))); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_2_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_2_primary\n"));
- {
-#line 85
- Node *name= makeName(findRule(yytext)); name->name.variable= pop(); push(name); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_primary(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_primary\n"));
- {
-#line 84
- push(makeVariable(yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_3_suffix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_3_suffix\n"));
- {
-#line 81
- push(makePlus (pop())); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_2_suffix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_2_suffix\n"));
- {
-#line 80
- push(makeStar (pop())); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_suffix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_suffix\n"));
- {
-#line 79
- push(makeQuery(pop())); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_4_prefix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_4_prefix\n"));
- {
-#line 76
- push(makePeekNot(pop())); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_3_prefix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_3_prefix\n"));
- {
-#line 75
- push(makePeekFor(pop())); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_2_prefix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_2_prefix\n"));
- {
-#line 74
- push(makePredicate(yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_prefix(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_prefix\n"));
- {
-#line 73
- push(makeInline(yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_error(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_error\n"));
- {
-#line 70
- push(makeError(pop(), yytext)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_sequence(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_sequence\n"));
- {
-#line 67
- Node *f= pop(); push(Sequence_append(pop(), f)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_expression(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_expression\n"));
- {
-#line 64
- Node *f= pop(); push(Alternate_append(pop(), f)); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_2_definition(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_2_definition\n"));
- {
-#line 62
- Node *e= pop(); Rule_setExpression(pop(), e); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_definition(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_definition\n"));
- {
-#line 60
- if (push(beginRule(findRule(yytext)))->rule.expression)
- fprintf(stderr, "rule '%s' redefined\n", yytext); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_2_trailer(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_2_trailer\n"));
- {
-#line 58
- makeTrailer(headerLine, yytext); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_trailer(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_trailer\n"));
- {
-#line 57
- headerLine= lineNumber ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_2_declaration(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_2_declaration\n"));
- {
-#line 55
- makeHeader(headerLine, yytext); ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-YY_ACTION(void) yy_1_declaration(yycontext *yy, char *yytext, int yyleng)
-{
-#define __ yy->__
-#define yypos yy->__pos
-#define yythunkpos yy->__thunkpos
- yyprintf((stderr, "do yy_1_declaration\n"));
- {
-#line 53
- headerLine= lineNumber; ;
- }
-#undef yythunkpos
-#undef yypos
-#undef yy
-}
-
-YY_RULE(int) yy_comment(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "comment")); if (!yymatchChar(yy, '#')) goto l1;
- l2:;
- { int yypos3= yy->__pos, yythunkpos3= yy->__thunkpos;
- { int yypos4= yy->__pos, yythunkpos4= yy->__thunkpos; if (!yy_end_of_line(yy)) goto l4; goto l3;
- l4:; yy->__pos= yypos4; yy->__thunkpos= yythunkpos4;
- } if (!yymatchDot(yy)) goto l3; goto l2;
- l3:; yy->__pos= yypos3; yy->__thunkpos= yythunkpos3;
- } if (!yy_end_of_line(yy)) goto l1;
- yyprintf((stderr, " ok %s @ %s\n", "comment", yy->__buf+yy->__pos));
- return 1;
- l1:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "comment", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_space(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "space"));
- { int yypos6= yy->__pos, yythunkpos6= yy->__thunkpos; if (!yymatchChar(yy, ' ')) goto l7; goto l6;
- l7:; yy->__pos= yypos6; yy->__thunkpos= yythunkpos6; if (!yymatchChar(yy, '\t')) goto l8; goto l6;
- l8:; yy->__pos= yypos6; yy->__thunkpos= yythunkpos6; if (!yy_end_of_line(yy)) goto l5;
- }
- l6:;
- yyprintf((stderr, " ok %s @ %s\n", "space", yy->__buf+yy->__pos));
- return 1;
- l5:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "space", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_braces(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "braces"));
- { int yypos10= yy->__pos, yythunkpos10= yy->__thunkpos; if (!yymatchChar(yy, '{')) goto l11;
- l12:;
- { int yypos13= yy->__pos, yythunkpos13= yy->__thunkpos; if (!yy_braces(yy)) goto l13; goto l12;
- l13:; yy->__pos= yypos13; yy->__thunkpos= yythunkpos13;
- } if (!yymatchChar(yy, '}')) goto l11; goto l10;
- l11:; yy->__pos= yypos10; yy->__thunkpos= yythunkpos10;
- { int yypos14= yy->__pos, yythunkpos14= yy->__thunkpos; if (!yymatchChar(yy, '}')) goto l14; goto l9;
- l14:; yy->__pos= yypos14; yy->__thunkpos= yythunkpos14;
- }
- { int yypos15= yy->__pos, yythunkpos15= yy->__thunkpos; if (!yy_end_of_line(yy)) goto l16; goto l15;
- l16:; yy->__pos= yypos15; yy->__thunkpos= yythunkpos15; if (!yymatchDot(yy)) goto l9;
- }
- l15:;
- }
- l10:;
- yyprintf((stderr, " ok %s @ %s\n", "braces", yy->__buf+yy->__pos));
- return 1;
- l9:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "braces", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_range(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "range"));
- { int yypos18= yy->__pos, yythunkpos18= yy->__thunkpos; if (!yy_char(yy)) goto l19; if (!yymatchChar(yy, '-')) goto l19; if (!yy_char(yy)) goto l19; goto l18;
- l19:; yy->__pos= yypos18; yy->__thunkpos= yythunkpos18; if (!yy_char(yy)) goto l17;
- }
- l18:;
- yyprintf((stderr, " ok %s @ %s\n", "range", yy->__buf+yy->__pos));
- return 1;
- l17:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "range", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_char(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "char"));
- { int yypos21= yy->__pos, yythunkpos21= yy->__thunkpos; if (!yymatchChar(yy, '\\')) goto l22; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\204\040\000\000\000\000\000\070\146\100\124\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l22; goto l21;
- l22:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l23; if (!yymatchChar(yy, 'x')) goto l23; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l23; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l23; goto l21;
- l23:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l24; if (!yymatchChar(yy, 'x')) goto l24; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l24; goto l21;
- l24:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l25; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l25; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l25; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l25; goto l21;
- l25:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21; if (!yymatchChar(yy, '\\')) goto l26; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l26;
- { int yypos27= yy->__pos, yythunkpos27= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l27; goto l28;
- l27:; yy->__pos= yypos27; yy->__thunkpos= yythunkpos27;
- }
- l28:; goto l21;
- l26:; yy->__pos= yypos21; yy->__thunkpos= yythunkpos21;
- { int yypos29= yy->__pos, yythunkpos29= yy->__thunkpos; if (!yymatchChar(yy, '\\')) goto l29; goto l20;
- l29:; yy->__pos= yypos29; yy->__thunkpos= yythunkpos29;
- } if (!yymatchDot(yy)) goto l20;
- }
- l21:;
- yyprintf((stderr, " ok %s @ %s\n", "char", yy->__buf+yy->__pos));
- return 1;
- l20:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "char", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_END(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "END")); if (!yymatchChar(yy, '>')) goto l30; if (!yy__(yy)) goto l30;
- yyprintf((stderr, " ok %s @ %s\n", "END", yy->__buf+yy->__pos));
- return 1;
- l30:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "END", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_BEGIN(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "BEGIN")); if (!yymatchChar(yy, '<')) goto l31; if (!yy__(yy)) goto l31;
- yyprintf((stderr, " ok %s @ %s\n", "BEGIN", yy->__buf+yy->__pos));
- return 1;
- l31:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "BEGIN", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_DOT(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "DOT")); if (!yymatchChar(yy, '.')) goto l32; if (!yy__(yy)) goto l32;
- yyprintf((stderr, " ok %s @ %s\n", "DOT", yy->__buf+yy->__pos));
- return 1;
- l32:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "DOT", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_class(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "class")); if (!yymatchChar(yy, '[')) goto l33; yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l33;
-#undef yytext
-#undef yyleng
- }
- l34:;
- { int yypos35= yy->__pos, yythunkpos35= yy->__thunkpos;
- { int yypos36= yy->__pos, yythunkpos36= yy->__thunkpos; if (!yymatchChar(yy, ']')) goto l36; goto l35;
- l36:; yy->__pos= yypos36; yy->__thunkpos= yythunkpos36;
- } if (!yy_range(yy)) goto l35; goto l34;
- l35:; yy->__pos= yypos35; yy->__thunkpos= yythunkpos35;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l33;
-#undef yytext
-#undef yyleng
- } if (!yymatchChar(yy, ']')) goto l33; if (!yy__(yy)) goto l33;
- yyprintf((stderr, " ok %s @ %s\n", "class", yy->__buf+yy->__pos));
- return 1;
- l33:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "class", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_literal(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "literal"));
- { int yypos38= yy->__pos, yythunkpos38= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l39; yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l39;
-#undef yytext
-#undef yyleng
- }
- l40:;
- { int yypos41= yy->__pos, yythunkpos41= yy->__thunkpos;
- { int yypos42= yy->__pos, yythunkpos42= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l42; goto l41;
- l42:; yy->__pos= yypos42; yy->__thunkpos= yythunkpos42;
- } if (!yy_char(yy)) goto l41; goto l40;
- l41:; yy->__pos= yypos41; yy->__thunkpos= yythunkpos41;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l39;
-#undef yytext
-#undef yyleng
- } if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l39; if (!yy__(yy)) goto l39; goto l38;
- l39:; yy->__pos= yypos38; yy->__thunkpos= yythunkpos38; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l37; yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l37;
-#undef yytext
-#undef yyleng
- }
- l43:;
- { int yypos44= yy->__pos, yythunkpos44= yy->__thunkpos;
- { int yypos45= yy->__pos, yythunkpos45= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l45; goto l44;
- l45:; yy->__pos= yypos45; yy->__thunkpos= yythunkpos45;
- } if (!yy_char(yy)) goto l44; goto l43;
- l44:; yy->__pos= yypos44; yy->__thunkpos= yythunkpos44;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l37;
-#undef yytext
-#undef yyleng
- } if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l37; if (!yy__(yy)) goto l37;
- }
- l38:;
- yyprintf((stderr, " ok %s @ %s\n", "literal", yy->__buf+yy->__pos));
- return 1;
- l37:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "literal", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_CLOSE(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "CLOSE")); if (!yymatchChar(yy, ')')) goto l46; if (!yy__(yy)) goto l46;
- yyprintf((stderr, " ok %s @ %s\n", "CLOSE", yy->__buf+yy->__pos));
- return 1;
- l46:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "CLOSE", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_OPEN(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "OPEN")); if (!yymatchChar(yy, '(')) goto l47; if (!yy__(yy)) goto l47;
- yyprintf((stderr, " ok %s @ %s\n", "OPEN", yy->__buf+yy->__pos));
- return 1;
- l47:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "OPEN", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_COLON(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "COLON")); if (!yymatchChar(yy, ':')) goto l48; if (!yy__(yy)) goto l48;
- yyprintf((stderr, " ok %s @ %s\n", "COLON", yy->__buf+yy->__pos));
- return 1;
- l48:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "COLON", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_PLUS(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "PLUS")); if (!yymatchChar(yy, '+')) goto l49; if (!yy__(yy)) goto l49;
- yyprintf((stderr, " ok %s @ %s\n", "PLUS", yy->__buf+yy->__pos));
- return 1;
- l49:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "PLUS", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_STAR(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "STAR")); if (!yymatchChar(yy, '*')) goto l50; if (!yy__(yy)) goto l50;
- yyprintf((stderr, " ok %s @ %s\n", "STAR", yy->__buf+yy->__pos));
- return 1;
- l50:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "STAR", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_QUESTION(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "QUESTION")); if (!yymatchChar(yy, '?')) goto l51; if (!yy__(yy)) goto l51;
- yyprintf((stderr, " ok %s @ %s\n", "QUESTION", yy->__buf+yy->__pos));
- return 1;
- l51:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "QUESTION", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_primary(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "primary"));
- { int yypos53= yy->__pos, yythunkpos53= yy->__thunkpos; if (!yy_identifier(yy)) goto l54; yyDo(yy, yy_1_primary, yy->__begin, yy->__end); if (!yy_COLON(yy)) goto l54; if (!yy_identifier(yy)) goto l54;
- { int yypos55= yy->__pos, yythunkpos55= yy->__thunkpos; if (!yy_EQUAL(yy)) goto l55; goto l54;
- l55:; yy->__pos= yypos55; yy->__thunkpos= yythunkpos55;
- } yyDo(yy, yy_2_primary, yy->__begin, yy->__end); goto l53;
- l54:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_identifier(yy)) goto l56;
- { int yypos57= yy->__pos, yythunkpos57= yy->__thunkpos; if (!yy_EQUAL(yy)) goto l57; goto l56;
- l57:; yy->__pos= yypos57; yy->__thunkpos= yythunkpos57;
- } yyDo(yy, yy_3_primary, yy->__begin, yy->__end); goto l53;
- l56:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_OPEN(yy)) goto l58; if (!yy_expression(yy)) goto l58; if (!yy_CLOSE(yy)) goto l58; goto l53;
- l58:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_literal(yy)) goto l59; yyDo(yy, yy_4_primary, yy->__begin, yy->__end); goto l53;
- l59:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_class(yy)) goto l60; yyDo(yy, yy_5_primary, yy->__begin, yy->__end); goto l53;
- l60:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_DOT(yy)) goto l61; yyDo(yy, yy_6_primary, yy->__begin, yy->__end); goto l53;
- l61:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_action(yy)) goto l62; yyDo(yy, yy_7_primary, yy->__begin, yy->__end); goto l53;
- l62:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_BEGIN(yy)) goto l63; yyDo(yy, yy_8_primary, yy->__begin, yy->__end); goto l53;
- l63:; yy->__pos= yypos53; yy->__thunkpos= yythunkpos53; if (!yy_END(yy)) goto l52; yyDo(yy, yy_9_primary, yy->__begin, yy->__end);
- }
- l53:;
- yyprintf((stderr, " ok %s @ %s\n", "primary", yy->__buf+yy->__pos));
- return 1;
- l52:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "primary", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_NOT(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "NOT")); if (!yymatchChar(yy, '!')) goto l64; if (!yy__(yy)) goto l64;
- yyprintf((stderr, " ok %s @ %s\n", "NOT", yy->__buf+yy->__pos));
- return 1;
- l64:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "NOT", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_suffix(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "suffix")); if (!yy_primary(yy)) goto l65;
- { int yypos66= yy->__pos, yythunkpos66= yy->__thunkpos;
- { int yypos68= yy->__pos, yythunkpos68= yy->__thunkpos; if (!yy_QUESTION(yy)) goto l69; yyDo(yy, yy_1_suffix, yy->__begin, yy->__end); goto l68;
- l69:; yy->__pos= yypos68; yy->__thunkpos= yythunkpos68; if (!yy_STAR(yy)) goto l70; yyDo(yy, yy_2_suffix, yy->__begin, yy->__end); goto l68;
- l70:; yy->__pos= yypos68; yy->__thunkpos= yythunkpos68; if (!yy_PLUS(yy)) goto l66; yyDo(yy, yy_3_suffix, yy->__begin, yy->__end);
- }
- l68:; goto l67;
- l66:; yy->__pos= yypos66; yy->__thunkpos= yythunkpos66;
- }
- l67:;
- yyprintf((stderr, " ok %s @ %s\n", "suffix", yy->__buf+yy->__pos));
- return 1;
- l65:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "suffix", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_AND(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "AND")); if (!yymatchChar(yy, '&')) goto l71; if (!yy__(yy)) goto l71;
- yyprintf((stderr, " ok %s @ %s\n", "AND", yy->__buf+yy->__pos));
- return 1;
- l71:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "AND", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_AT(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "AT")); if (!yymatchChar(yy, '@')) goto l72; if (!yy__(yy)) goto l72;
- yyprintf((stderr, " ok %s @ %s\n", "AT", yy->__buf+yy->__pos));
- return 1;
- l72:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "AT", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_action(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "action")); if (!yymatchChar(yy, '{')) goto l73; yyDo(yy, yy_1_action, yy->__begin, yy->__end); yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l73;
-#undef yytext
-#undef yyleng
- }
- l74:;
- { int yypos75= yy->__pos, yythunkpos75= yy->__thunkpos; if (!yy_braces(yy)) goto l75; goto l74;
- l75:; yy->__pos= yypos75; yy->__thunkpos= yythunkpos75;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l73;
-#undef yytext
-#undef yyleng
- } if (!yymatchChar(yy, '}')) goto l73; if (!yy__(yy)) goto l73;
- yyprintf((stderr, " ok %s @ %s\n", "action", yy->__buf+yy->__pos));
- return 1;
- l73:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "action", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_TILDE(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "TILDE")); if (!yymatchChar(yy, '~')) goto l76; if (!yy__(yy)) goto l76;
- yyprintf((stderr, " ok %s @ %s\n", "TILDE", yy->__buf+yy->__pos));
- return 1;
- l76:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "TILDE", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_prefix(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "prefix"));
- { int yypos78= yy->__pos, yythunkpos78= yy->__thunkpos; if (!yy_AT(yy)) goto l79; if (!yy_action(yy)) goto l79; yyDo(yy, yy_1_prefix, yy->__begin, yy->__end); goto l78;
- l79:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_AND(yy)) goto l80; if (!yy_action(yy)) goto l80; yyDo(yy, yy_2_prefix, yy->__begin, yy->__end); goto l78;
- l80:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_AND(yy)) goto l81; if (!yy_suffix(yy)) goto l81; yyDo(yy, yy_3_prefix, yy->__begin, yy->__end); goto l78;
- l81:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_NOT(yy)) goto l82; if (!yy_suffix(yy)) goto l82; yyDo(yy, yy_4_prefix, yy->__begin, yy->__end); goto l78;
- l82:; yy->__pos= yypos78; yy->__thunkpos= yythunkpos78; if (!yy_suffix(yy)) goto l77;
- }
- l78:;
- yyprintf((stderr, " ok %s @ %s\n", "prefix", yy->__buf+yy->__pos));
- return 1;
- l77:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "prefix", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_error(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "error")); if (!yy_prefix(yy)) goto l83;
- { int yypos84= yy->__pos, yythunkpos84= yy->__thunkpos; if (!yy_TILDE(yy)) goto l84; if (!yy_action(yy)) goto l84; yyDo(yy, yy_1_error, yy->__begin, yy->__end); goto l85;
- l84:; yy->__pos= yypos84; yy->__thunkpos= yythunkpos84;
- }
- l85:;
- yyprintf((stderr, " ok %s @ %s\n", "error", yy->__buf+yy->__pos));
- return 1;
- l83:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "error", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_BAR(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "BAR")); if (!yymatchChar(yy, '|')) goto l86; if (!yy__(yy)) goto l86;
- yyprintf((stderr, " ok %s @ %s\n", "BAR", yy->__buf+yy->__pos));
- return 1;
- l86:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "BAR", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_sequence(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "sequence")); if (!yy_error(yy)) goto l87;
- l88:;
- { int yypos89= yy->__pos, yythunkpos89= yy->__thunkpos; if (!yy_error(yy)) goto l89; yyDo(yy, yy_1_sequence, yy->__begin, yy->__end); goto l88;
- l89:; yy->__pos= yypos89; yy->__thunkpos= yythunkpos89;
- }
- yyprintf((stderr, " ok %s @ %s\n", "sequence", yy->__buf+yy->__pos));
- return 1;
- l87:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "sequence", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_expression(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "expression")); if (!yy_sequence(yy)) goto l90;
- l91:;
- { int yypos92= yy->__pos, yythunkpos92= yy->__thunkpos; if (!yy_BAR(yy)) goto l92; if (!yy_sequence(yy)) goto l92; yyDo(yy, yy_1_expression, yy->__begin, yy->__end); goto l91;
- l92:; yy->__pos= yypos92; yy->__thunkpos= yythunkpos92;
- }
- yyprintf((stderr, " ok %s @ %s\n", "expression", yy->__buf+yy->__pos));
- return 1;
- l90:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "expression", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_EQUAL(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "EQUAL")); if (!yymatchChar(yy, '=')) goto l93; if (!yy__(yy)) goto l93;
- yyprintf((stderr, " ok %s @ %s\n", "EQUAL", yy->__buf+yy->__pos));
- return 1;
- l93:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "EQUAL", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_identifier(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "identifier")); yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l94;
-#undef yytext
-#undef yyleng
- } if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\040\000\000\376\377\377\207\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l94;
- l95:;
- { int yypos96= yy->__pos, yythunkpos96= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\040\377\003\376\377\377\207\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l96; goto l95;
- l96:; yy->__pos= yypos96; yy->__thunkpos= yythunkpos96;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l94;
-#undef yytext
-#undef yyleng
- } if (!yy__(yy)) goto l94;
- yyprintf((stderr, " ok %s @ %s\n", "identifier", yy->__buf+yy->__pos));
- return 1;
- l94:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "identifier", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_RPERCENT(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "RPERCENT")); if (!yymatchString(yy, "%}")) goto l97; if (!yy__(yy)) goto l97;
- yyprintf((stderr, " ok %s @ %s\n", "RPERCENT", yy->__buf+yy->__pos));
- return 1;
- l97:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "RPERCENT", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_end_of_line(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "end_of_line"));
- { int yypos99= yy->__pos, yythunkpos99= yy->__thunkpos; if (!yymatchString(yy, "\r\n")) goto l100; goto l99;
- l100:; yy->__pos= yypos99; yy->__thunkpos= yythunkpos99; if (!yymatchChar(yy, '\n')) goto l101; goto l99;
- l101:; yy->__pos= yypos99; yy->__thunkpos= yythunkpos99; if (!yymatchChar(yy, '\r')) goto l98;
- }
- l99:; yyDo(yy, yy_1_end_of_line, yy->__begin, yy->__end);
- yyprintf((stderr, " ok %s @ %s\n", "end_of_line", yy->__buf+yy->__pos));
- return 1;
- l98:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "end_of_line", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_end_of_file(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "end_of_file"));
- { int yypos103= yy->__pos, yythunkpos103= yy->__thunkpos; if (!yymatchDot(yy)) goto l103; goto l102;
- l103:; yy->__pos= yypos103; yy->__thunkpos= yythunkpos103;
- }
- yyprintf((stderr, " ok %s @ %s\n", "end_of_file", yy->__buf+yy->__pos));
- return 1;
- l102:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "end_of_file", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_trailer(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "trailer")); if (!yymatchString(yy, "%%")) goto l104; yyDo(yy, yy_1_trailer, yy->__begin, yy->__end); yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l104;
-#undef yytext
-#undef yyleng
- }
- l105:;
- { int yypos106= yy->__pos, yythunkpos106= yy->__thunkpos; if (!yymatchDot(yy)) goto l106; goto l105;
- l106:; yy->__pos= yypos106; yy->__thunkpos= yythunkpos106;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l104;
-#undef yytext
-#undef yyleng
- } yyDo(yy, yy_2_trailer, yy->__begin, yy->__end);
- yyprintf((stderr, " ok %s @ %s\n", "trailer", yy->__buf+yy->__pos));
- return 1;
- l104:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "trailer", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_definition(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "definition")); if (!yy_identifier(yy)) goto l107; yyDo(yy, yy_1_definition, yy->__begin, yy->__end); if (!yy_EQUAL(yy)) goto l107; if (!yy_expression(yy)) goto l107; yyDo(yy, yy_2_definition, yy->__begin, yy->__end);
- yyprintf((stderr, " ok %s @ %s\n", "definition", yy->__buf+yy->__pos));
- return 1;
- l107:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "definition", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy_declaration(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "declaration")); if (!yymatchString(yy, "%{")) goto l108; yyDo(yy, yy_1_declaration, yy->__begin, yy->__end); yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_BEGIN)) goto l108;
-#undef yytext
-#undef yyleng
- }
- l109:;
- { int yypos110= yy->__pos, yythunkpos110= yy->__thunkpos;
- { int yypos111= yy->__pos, yythunkpos111= yy->__thunkpos; if (!yymatchString(yy, "%}")) goto l111; goto l110;
- l111:; yy->__pos= yypos111; yy->__thunkpos= yythunkpos111;
- }
- { int yypos112= yy->__pos, yythunkpos112= yy->__thunkpos; if (!yy_end_of_line(yy)) goto l113; goto l112;
- l113:; yy->__pos= yypos112; yy->__thunkpos= yythunkpos112; if (!yymatchDot(yy)) goto l110;
- }
- l112:; goto l109;
- l110:; yy->__pos= yypos110; yy->__thunkpos= yythunkpos110;
- } yyText(yy, yy->__begin, yy->__end); {
-#define yytext yy->__text
-#define yyleng yy->__textlen
-if (!(YY_END)) goto l108;
-#undef yytext
-#undef yyleng
- } if (!yy_RPERCENT(yy)) goto l108; yyDo(yy, yy_2_declaration, yy->__begin, yy->__end);
- yyprintf((stderr, " ok %s @ %s\n", "declaration", yy->__buf+yy->__pos));
- return 1;
- l108:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "declaration", yy->__buf+yy->__pos));
- return 0;
-}
-YY_RULE(int) yy__(yycontext *yy)
-{
- yyprintf((stderr, "%s\n", "_"));
- l115:;
- { int yypos116= yy->__pos, yythunkpos116= yy->__thunkpos;
- { int yypos117= yy->__pos, yythunkpos117= yy->__thunkpos; if (!yy_space(yy)) goto l118; goto l117;
- l118:; yy->__pos= yypos117; yy->__thunkpos= yythunkpos117; if (!yy_comment(yy)) goto l116;
- }
- l117:; goto l115;
- l116:; yy->__pos= yypos116; yy->__thunkpos= yythunkpos116;
- }
- yyprintf((stderr, " ok %s @ %s\n", "_", yy->__buf+yy->__pos));
- return 1;
-}
-YY_RULE(int) yy_grammar(yycontext *yy)
-{ int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos;
- yyprintf((stderr, "%s\n", "grammar")); if (!yy__(yy)) goto l119;
- { int yypos122= yy->__pos, yythunkpos122= yy->__thunkpos; if (!yy_declaration(yy)) goto l123; goto l122;
- l123:; yy->__pos= yypos122; yy->__thunkpos= yythunkpos122; if (!yy_definition(yy)) goto l119;
- }
- l122:;
- l120:;
- { int yypos121= yy->__pos, yythunkpos121= yy->__thunkpos;
- { int yypos124= yy->__pos, yythunkpos124= yy->__thunkpos; if (!yy_declaration(yy)) goto l125; goto l124;
- l125:; yy->__pos= yypos124; yy->__thunkpos= yythunkpos124; if (!yy_definition(yy)) goto l121;
- }
- l124:; goto l120;
- l121:; yy->__pos= yypos121; yy->__thunkpos= yythunkpos121;
- }
- { int yypos126= yy->__pos, yythunkpos126= yy->__thunkpos; if (!yy_trailer(yy)) goto l126; goto l127;
- l126:; yy->__pos= yypos126; yy->__thunkpos= yythunkpos126;
- }
- l127:; if (!yy_end_of_file(yy)) goto l119;
- yyprintf((stderr, " ok %s @ %s\n", "grammar", yy->__buf+yy->__pos));
- return 1;
- l119:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0;
- yyprintf((stderr, " fail %s @ %s\n", "grammar", yy->__buf+yy->__pos));
- return 0;
-}
-
-#ifndef YY_PART
-
-typedef int (*yyrule)(yycontext *yy);
-
-YY_PARSE(int) YYPARSEFROM(YY_CTX_PARAM_ yyrule yystart)
-{
- int yyok;
- if (!yyctx->__buflen)
- {
- yyctx->__buflen= YY_BUFFER_SIZE;
- yyctx->__buf= (char *)YY_MALLOC(yyctx, yyctx->__buflen);
- yyctx->__textlen= YY_BUFFER_SIZE;
- yyctx->__text= (char *)YY_MALLOC(yyctx, yyctx->__textlen);
- yyctx->__thunkslen= YY_STACK_SIZE;
- yyctx->__thunks= (yythunk *)YY_MALLOC(yyctx, sizeof(yythunk) * yyctx->__thunkslen);
- yyctx->__valslen= YY_STACK_SIZE;
- yyctx->__vals= (YYSTYPE *)YY_MALLOC(yyctx, sizeof(YYSTYPE) * yyctx->__valslen);
- yyctx->__begin= yyctx->__end= yyctx->__pos= yyctx->__limit= yyctx->__thunkpos= 0;
- }
- yyctx->__begin= yyctx->__end= yyctx->__pos;
- yyctx->__thunkpos= 0;
- yyctx->__val= yyctx->__vals;
- yyok= yystart(yyctx);
- if (yyok) yyDone(yyctx);
- yyCommit(yyctx);
- return yyok;
-}
-
-YY_PARSE(int) YYPARSE(YY_CTX_PARAM)
-{
- return YYPARSEFROM(YY_CTX_ARG_ yy_grammar);
-}
-
-YY_PARSE(yycontext *) YYRELEASE(yycontext *yyctx)
-{
- if (yyctx->__buflen)
- {
- yyctx->__buflen= 0;
- YY_FREE(yyctx, yyctx->__buf);
- YY_FREE(yyctx, yyctx->__text);
- YY_FREE(yyctx, yyctx->__thunks);
- YY_FREE(yyctx, yyctx->__vals);
- }
- return yyctx;
-}
-
-#endif
-#line 142 "peg.peg"
-
-
-void yyerror(char *message)
-{
- fprintf(stderr, "%s:%d: %s", fileName, lineNumber, message);
- if (yyctx->__text[0]) fprintf(stderr, " near token '%s'", yyctx->__text);
- if (yyctx->__pos < yyctx->__limit || !feof(input))
- {
- yyctx->__buf[yyctx->__limit]= '\0';
- fprintf(stderr, " before text \"");
- while (yyctx->__pos < yyctx->__limit)
- {
- if ('\n' == yyctx->__buf[yyctx->__pos] || '\r' == yyctx->__buf[yyctx->__pos]) break;
- fputc(yyctx->__buf[yyctx->__pos++], stderr);
- }
- if (yyctx->__pos == yyctx->__limit)
- {
- int c;
- while (EOF != (c= fgetc(input)) && '\n' != c && '\r' != c)
- fputc(c, stderr);
- }
- fputc('\"', stderr);
- }
- fprintf(stderr, "\n");
- exit(1);
-}
-
-void makeHeader(int line, char *text)
-{
- Header *header= (Header *)malloc(sizeof(Header));
- header->line= line;
- header->text= strdup(text);
- header->next= headers;
- headers= header;
-}
-
-void makeTrailer(int line, char *text)
-{
- trailerLine= line;
- trailer= strdup(text);
-}
-
-static void version(char *name)
-{
- printf("%s version %s\n", name, MINIPEG_VERSION);
-}
-
-static void usage(char *name)
-{
- version(name);
- fprintf(stderr, "usage: %s [<option>...] [<file>...]\n", name);
- fprintf(stderr, "where <option> can be\n");
- fprintf(stderr, " -h print this help information\n");
- fprintf(stderr, " -o <ofile> write output to <ofile>\n");
- fprintf(stderr, " -P do not generate #line directives\n");
- fprintf(stderr, " -v be verbose\n");
- fprintf(stderr, " -V print version number and exit\n");
- fprintf(stderr, "if no <file> is given, input is read from stdin\n");
- fprintf(stderr, "if no <ofile> is given, output is written to stdout\n");
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- Node *n;
- int c;
-
- output= stdout;
- input= stdin;
- lineNumber= 1;
- fileName= "<stdin>";
-
- while (-1 != (c= getopt(argc, argv, "PVho:v")))
- {
- switch (c)
- {
- case 'V':
- version(basename(argv[0]));
- exit(0);
-
- case 'h':
- usage(basename(argv[0]));
- break;
-
- case 'o':
- if (!(output= fopen(optarg, "w")))
- {
- perror(optarg);
- exit(1);
- }
- break;
-
- case 'P':
- nolinesFlag= 1;
- break;
-
- case 'v':
- verboseFlag= 1;
- break;
-
- default:
- fprintf(stderr, "for usage try: %s -h\n", argv[0]);
- exit(1);
- }
- }
- argc -= optind;
- argv += optind;
-
- if (argc)
- {
- for (; argc; --argc, ++argv)
- {
- if (!strcmp(*argv, "-"))
- {
- input= stdin;
- fileName= "<stdin>";
- }
- else
- {
- if (!(input= fopen(*argv, "r")))
- {
- perror(*argv);
- exit(1);
- }
- fileName= *argv;
- }
- lineNumber= 1;
- if (!yyparse())
- yyerror("syntax error");
- if (input != stdin)
- fclose(input);
- }
- }
- else
- if (!yyparse())
- yyerror("syntax error");
-
- if (verboseFlag)
- for (n= rules; n; n= n->any.next)
- Rule_print(n);
-
- Rule_compile_c_header();
-
- for (; headers; headers= headers->next)
- fprintf(output, "#line %i \"%s\"\n%s\n", headers->line, fileName, headers->text);
-
- if (rules)
- Rule_compile_c(rules, nolinesFlag);
-
- if (trailer) {
- if (!nolinesFlag)
- fprintf(output, "#line %i \"%s\"\n", trailerLine, fileName);
- fprintf(output, "%s\n", trailer);
- }
-
- return 0;
-}
-