--- /dev/null
+__pycache__
+a
+b
+a.c
+a.i
+tests/*.l.xml
+tests/*.y.xml
--- /dev/null
+%e 1019
+%p 2807
+%n 371
+%k 284
+%a 1213
+%o 1117
+
+O [0-7]
+D [0-9]
+NZ [1-9]
+L [a-zA-Z_]
+A [a-zA-Z_0-9]
+H [a-fA-F0-9]
+HP (0[xX])
+E ([Ee][+-]?{D}+)
+P ([Pp][+-]?{D}+)
+FS (f|F|l|L)
+IS (((u|U)(l|L|ll|LL)?)|((l|L|ll|LL)(u|U)?))
+CP (u|U|L)
+SP (u8|u|U|L)
+ES (\\(['"\?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F0-9]+))
+WS [ \t\v\n\f]
+
+%{
+#include "Python.h"
+#include "structmember.h"
+#include <setjmp.h>
+#include <stdbool.h>
+
+#include "yaccmodule.h"
+
+PyDoc_STRVAR(lex_doc_string, \
+"lex is an interface to a flex-generated lexical analyzer.\n");
+
+/* filled in at module initialization time */
+static PyObject *work;
+static PyObject *work_factory;
+
+typedef struct {
+ PyObject_HEAD
+
+ /* filled in by lex.yylex.__init(), no change during iteration */
+ PyObject *root, *mark, *yychunk_iter;
+
+ /* filled in by YY_INPUT() each time we go on to a new chunk */
+ PyObject *YY_INPUT_bytes;
+ Py_ssize_t YY_INPUT_bytes_off, YY_INPUT_bytes_len;
+} lex_yylexObject;
+
+/* filled in by lex.yylex.__next__() each time iterator invoked */
+static lex_yylexObject *yylex_self;
+static jmp_buf yylex_abort;
+static Py_ssize_t yytext_pos, yytext_off, yytext_len;
+
+static void yyerror(const char *); /* prints grammar violation message */
+static bool get_cursor(lex_yylexObject *self, Py_ssize_t i, Py_ssize_t *pos, Py_ssize_t *off);
+static bool set_cursor(lex_yylexObject *self, Py_ssize_t i, Py_ssize_t pos, Py_ssize_t off);
+static bool new_cursor(lex_yylexObject *self, Py_ssize_t i, Py_ssize_t pos, Py_ssize_t off);
+static bool pop_cursors(lex_yylexObject *self, Py_ssize_t i);
+static bool apply_markup(const char *format, ...);
+static bool next_YY_INPUT_chunk(lex_yylexObject *self);
+static bool next_yytext_chunk(lex_yylexObject *self);
+/*static bool skip_yytext_byte(lex_yylexObject *self, int c);*/ /* NO PROTOTYPE, IT'S A MACRO */
+static bool skip_yytext(lex_yylexObject *self);
+static bool skip_comment(lex_yylexObject *self);
+
+#define YY_INPUT(buf, result, max_size) \
+ do { \
+ /*printf("YY_INPUT()\n");*/ \
+ if (yylex_self->YY_INPUT_bytes_off >= yylex_self->YY_INPUT_bytes_len && !next_YY_INPUT_chunk(yylex_self)) \
+ longjmp(yylex_abort, 1); \
+ Py_ssize_t len = yylex_self->YY_INPUT_bytes_len - yylex_self->YY_INPUT_bytes_off; \
+ if (len > max_size) \
+ len = max_size; \
+ /* note: don't call PyBytes_AS_STRING on Py_None (possible if len == 0) */ \
+ if (len) { \
+ memcpy(buf, PyBytes_AS_STRING(yylex_self->YY_INPUT_bytes) + yylex_self->YY_INPUT_bytes_off, len); \
+ yylex_self->YY_INPUT_bytes_off += len; \
+ } \
+ result = len; \
+ /*printf("YY_INPUT() returns \""); fwrite(buf, result, 1, stdout); printf("\"\n");*/ \
+ } while (0)
+
+#define SKIP() \
+ do { \
+ if (!skip_yytext(yylex_self)) \
+ return -1; \
+ } \
+ while (0)
+
+#define MARK() \
+ do { \
+ if (!new_cursor(yylex_self, -1, yytext_pos, yytext_off)) \
+ return -1; \
+ } \
+ while (0)
+
+#define APPLY(tag) \
+ do { \
+ Py_ssize_t len = PyObject_Length(yylex_self->mark); \
+ if ( \
+ len < 0 || \
+ !apply_markup( \
+ "OOnnOs", \
+ yylex_self->root, \
+ yylex_self->mark, \
+ len - 3, \
+ len - 2, \
+ work_factory, \
+ tag \
+ ) \
+ ) \
+ return -1; \
+ } \
+ while (0)
+
+#define sym_type(self, identifier) IDENTIFIER /* with no symbol table, fake it */
+%}
+
+%%
+"/*" { SKIP(); if (!skip_comment(yylex_self)) return -1; }
+"//".* { SKIP(); /* consume //-comment */ }
+
+"auto" { MARK(); SKIP(); MARK(); return AUTO; }
+"break" { MARK(); SKIP(); MARK(); return BREAK; }
+"case" { MARK(); SKIP(); MARK(); return CASE; }
+"char" { MARK(); SKIP(); MARK(); return CHAR; }
+"const" { MARK(); SKIP(); MARK(); return CONST; }
+"continue" { MARK(); SKIP(); MARK(); return CONTINUE; }
+"default" { MARK(); SKIP(); MARK(); return DEFAULT; }
+"do" { MARK(); SKIP(); MARK(); return DO; }
+"double" { MARK(); SKIP(); MARK(); return DOUBLE; }
+"else" { MARK(); SKIP(); MARK(); return ELSE; }
+"enum" { MARK(); SKIP(); MARK(); return ENUM; }
+"extern" { MARK(); SKIP(); MARK(); return EXTERN; }
+"float" { MARK(); SKIP(); MARK(); return FLOAT; }
+"for" { MARK(); SKIP(); MARK(); return FOR; }
+"goto" { MARK(); SKIP(); MARK(); return GOTO; }
+"if" { MARK(); SKIP(); MARK(); return IF; }
+"inline" { MARK(); SKIP(); MARK(); return INLINE; }
+"int" { MARK(); SKIP(); MARK(); return INT; }
+"long" { MARK(); SKIP(); MARK(); return LONG; }
+"register" { MARK(); SKIP(); MARK(); return REGISTER; }
+"restrict" { MARK(); SKIP(); MARK(); return RESTRICT; }
+"return" { MARK(); SKIP(); MARK(); return RETURN; }
+"short" { MARK(); SKIP(); MARK(); return SHORT; }
+"signed" { MARK(); SKIP(); MARK(); return SIGNED; }
+"sizeof" { MARK(); SKIP(); MARK(); return SIZEOF; }
+"static" { MARK(); SKIP(); MARK(); return STATIC; }
+"struct" { MARK(); SKIP(); MARK(); return STRUCT; }
+"switch" { MARK(); SKIP(); MARK(); return SWITCH; }
+"typedef" { MARK(); SKIP(); MARK(); return TYPEDEF; }
+"union" { MARK(); SKIP(); MARK(); return UNION; }
+"unsigned" { MARK(); SKIP(); MARK(); return UNSIGNED; }
+"void" { MARK(); SKIP(); MARK(); return VOID; }
+"volatile" { MARK(); SKIP(); MARK(); return VOLATILE; }
+"while" { MARK(); SKIP(); MARK(); return WHILE; }
+"_Alignas" { MARK(); SKIP(); MARK(); return ALIGNAS; }
+"_Alignof" { MARK(); SKIP(); MARK(); return ALIGNOF; }
+"_Atomic" { MARK(); SKIP(); MARK(); return ATOMIC; }
+"_Bool" { MARK(); SKIP(); MARK(); return BOOL; }
+"_Complex" { MARK(); SKIP(); MARK(); return COMPLEX; }
+"_Generic" { MARK(); SKIP(); MARK(); return GENERIC; }
+"_Imaginary" { MARK(); SKIP(); MARK(); return IMAGINARY; }
+"_Noreturn" { MARK(); SKIP(); MARK(); return NORETURN; }
+"_Static_assert" { MARK(); SKIP(); MARK(); return STATIC_ASSERT; }
+"_Thread_local" { MARK(); SKIP(); MARK(); return THREAD_LOCAL; }
+"__func__" { MARK(); SKIP(); MARK(); return FUNC_NAME; }
+"size_t" { MARK(); SKIP(); MARK(); return TYPEDEF_NAME; /* THIS IS A HACK FOR NOW */ }
+
+(?<Identifier>{L}{A}*) {
+ MARK();
+ SKIP();
+ MARK();
+ switch (sym_type(self, yytext))
+ {
+ case TYPEDEF_NAME: /* previously defined */
+ APPLY("TypedefName");
+ return TYPEDEF_NAME;
+ case ENUMERATION_CONSTANT: /* previously defined */
+ APPLY("EnumerationConstant");
+ return ENUMERATION_CONSTANT;
+ default: /* includes undefined */
+ APPLY("Identifier");
+ return IDENTIFIER;
+ }
+}
+
+(?<ExpressionIntLiteral>{HP}{H}+{IS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionIntLiteral"); return I_CONSTANT; }
+(?<ExpressionIntLiteral>{NZ}{D}*{IS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionIntLiteral"); return I_CONSTANT; }
+(?<ExpressionIntLiteral>"0"{O}*{IS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionIntLiteral"); return I_CONSTANT; }
+(?<ExpressionIntLiteral>{CP}?"'"([^'\\\n]|{ES})+"'") { MARK(); SKIP(); MARK(); APPLY("ExpressionIntLiteral"); return I_CONSTANT; }
+
+(?<ExpressionFloatLiteral>{D}+{E}{FS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionFloatLiteral"); return F_CONSTANT; }
+(?<ExpressionFloatLiteral>{D}*"."{D}+{E}?{FS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionFloatLiteral"); return F_CONSTANT; }
+(?<ExpressionFloatLiteral>{D}+"."{E}?{FS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionFloatLiteral"); return F_CONSTANT; }
+(?<ExpressionFloatLiteral>{HP}{H}+{P}{FS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionFloatLiteral"); return F_CONSTANT; }
+(?<ExpressionFloatLiteral>{HP}{H}*"."{H}+{P}{FS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionFloatLiteral"); return F_CONSTANT; }
+(?<ExpressionFloatLiteral>{HP}{H}+"."{P}{FS}?) { MARK(); SKIP(); MARK(); APPLY("ExpressionFloatLiteral"); return F_CONSTANT; }
+
+({SP}?\"([^"\\\n]|{ES})*\"{WS}*)+ { MARK(); SKIP(); MARK(); APPLY("ExpressionStringLiteral"); return STRING_LITERAL;; }
+
+"..." { MARK(); SKIP(); MARK(); return ELLIPSIS; }
+">>=" { MARK(); SKIP(); MARK(); return RIGHT_ASSIGN; }
+"<<=" { MARK(); SKIP(); MARK(); return LEFT_ASSIGN; }
+"+=" { MARK(); SKIP(); MARK(); return ADD_ASSIGN; }
+"-=" { MARK(); SKIP(); MARK(); return SUB_ASSIGN; }
+"*=" { MARK(); SKIP(); MARK(); return MUL_ASSIGN; }
+"/=" { MARK(); SKIP(); MARK(); return DIV_ASSIGN; }
+"%=" { MARK(); SKIP(); MARK(); return MOD_ASSIGN; }
+"&=" { MARK(); SKIP(); MARK(); return AND_ASSIGN; }
+"^=" { MARK(); SKIP(); MARK(); return XOR_ASSIGN; }
+"|=" { MARK(); SKIP(); MARK(); return OR_ASSIGN; }
+">>" { MARK(); SKIP(); MARK(); return RIGHT_OP; }
+"<<" { MARK(); SKIP(); MARK(); return LEFT_OP; }
+"++" { MARK(); SKIP(); MARK(); return INC_OP; }
+"--" { MARK(); SKIP(); MARK(); return DEC_OP; }
+"->" { MARK(); SKIP(); MARK(); return PTR_OP; }
+"&&" { MARK(); SKIP(); MARK(); return AND_OP; }
+"||" { MARK(); SKIP(); MARK(); return OR_OP; }
+"<=" { MARK(); SKIP(); MARK(); return LE_OP; }
+">=" { MARK(); SKIP(); MARK(); return GE_OP; }
+"==" { MARK(); SKIP(); MARK(); return EQ_OP; }
+"!=" { MARK(); SKIP(); MARK(); return NE_OP; }
+";" { MARK(); SKIP(); MARK(); return ';'; }
+("{"|"<%") { MARK(); SKIP(); MARK(); return '{'; }
+("}"|"%>") { MARK(); SKIP(); MARK(); return '}'; }
+"," { MARK(); SKIP(); MARK(); return ','; }
+":" { MARK(); SKIP(); MARK(); return ':'; }
+"=" { MARK(); SKIP(); MARK(); return '='; }
+"(" { MARK(); SKIP(); MARK(); return '('; }
+")" { MARK(); SKIP(); MARK(); return ')'; }
+("["|"<:") { MARK(); SKIP(); MARK(); return '['; }
+("]"|":>") { MARK(); SKIP(); MARK(); return ']'; }
+"." { MARK(); SKIP(); MARK(); return '.'; }
+"&" { MARK(); SKIP(); MARK(); return '&'; }
+"!" { MARK(); SKIP(); MARK(); return '!'; }
+"~" { MARK(); SKIP(); MARK(); return '~'; }
+"-" { MARK(); SKIP(); MARK(); return '-'; }
+"+" { MARK(); SKIP(); MARK(); return '+'; }
+"*" { MARK(); SKIP(); MARK(); return '*'; }
+"/" { MARK(); SKIP(); MARK(); return '/'; }
+"%" { MARK(); SKIP(); MARK(); return '%'; }
+"<" { MARK(); SKIP(); MARK(); return '<'; }
+">" { MARK(); SKIP(); MARK(); return '>'; }
+"^" { MARK(); SKIP(); MARK(); return '^'; }
+"|" { MARK(); SKIP(); MARK(); return '|'; }
+"?" { MARK(); SKIP(); MARK(); return '?'; }
+
+{WS}+ { SKIP(); /* whitespace separates tokens */ }
+. { SKIP(); /* discard bad characters */ }
+<<EOF>> { MARK(); return 0; }
+
+%%
+
+int yywrap(void) /* called at end of input */
+{
+ /*printf("yywrap()\n");*/
+ return 1; /* terminate now */
+}
+
+static void yyerror(const char *s) {
+ fflush(stdout);
+ fprintf(stderr, "*** %s\n", s);
+}
+
+static bool get_cursor(lex_yylexObject *self, Py_ssize_t i, Py_ssize_t *pos, Py_ssize_t *off) {
+ /*printf("get_cursor() %zd\n", i);*/
+ /* (pos, off) = self->mark[index] */
+ PyObject *index = PyLong_FromSsize_t(i);
+ if (index == NULL)
+ goto error0;
+ PyObject *cursor = PyObject_GetItem(self->mark, index);
+ if (cursor == NULL)
+ goto error1;
+ if (!PyArg_ParseTuple(cursor, "nn", pos, off)) {
+ Py_DECREF(cursor);
+ error1:
+ Py_DECREF(index);
+ error0:
+ return false;
+ }
+ Py_DECREF(cursor);
+ Py_DECREF(index);
+ /*printf("get_cursor() returns %zd %zd\n", *pos, *off);*/
+ return true;
+}
+
+static bool set_cursor(lex_yylexObject *self, Py_ssize_t i, Py_ssize_t pos, Py_ssize_t off) {
+ /*printf("set_cursor() %zd %zd %zd\n", i, pos, off);*/
+ /* self->mark[index] = (pos, off) */
+ PyObject *index = PyLong_FromSsize_t(i);
+ if (index == NULL)
+ goto error0;
+ PyObject *cursor = Py_BuildValue("nn", pos, off);
+ if (cursor == NULL)
+ goto error1;
+ if (PyObject_SetItem(self->mark, index, cursor)) {
+ Py_DECREF(cursor);
+ error1:
+ Py_DECREF(index);
+ error0:
+ return false;
+ }
+ Py_DECREF(cursor);
+ Py_DECREF(index);
+ return true;
+}
+
+static bool new_cursor(lex_yylexObject *self, Py_ssize_t i, Py_ssize_t pos, Py_ssize_t off) {
+ /*printf("new_cursor() %zd %zd %zd\n", i, pos, off);*/
+ /* self->mark[i:i] = [(pos, off)] */
+ PyObject *index = PyLong_FromSsize_t(i);
+ if (index == NULL)
+ goto error0;
+ PyObject *slice = PySlice_New(index, index, NULL);
+ if (slice == NULL)
+ goto error1;
+ PyObject *list = PyList_New(1);
+ if (list == NULL)
+ goto error2;
+ PyObject *cursor = Py_BuildValue("nn", pos, off);
+ if (cursor == NULL)
+ goto error3;
+ PyList_SET_ITEM(list, 0, cursor);
+ if (PyObject_SetItem(self->mark, slice, list)) {
+ error3:
+ Py_DECREF(list);
+ error2:
+ Py_DECREF(slice);
+ error1:
+ Py_DECREF(index);
+ error0:
+ return false;
+ }
+ Py_DECREF(list);
+ Py_DECREF(slice);
+ Py_DECREF(index);
+ return true;
+}
+
+static bool pop_cursors(lex_yylexObject *self, Py_ssize_t i) {
+ /*printf("pop_cursors() %zd\n", i);*/
+ /* del self->mark[i:] */
+ PyObject *start = PyLong_FromSsize_t(i);
+ if (start == NULL)
+ goto error0;
+ PyObject *slice = PySlice_New(start, NULL, NULL);
+ if (slice == NULL)
+ goto error1;
+ if (PyObject_DelItem(self->mark, slice)) {
+ Py_DECREF(slice);
+ error1:
+ Py_DECREF(start);
+ error0:
+ return false;
+ }
+ Py_DECREF(slice);
+ Py_DECREF(start);
+ return true;
+}
+
+static bool apply_markup(const char *format, ...) {
+ PyObject *apply_markup = PyObject_GetAttrString(work, "apply_markup");
+ if (apply_markup == NULL)
+ goto error0;
+
+ va_list argp;
+ va_start(argp, format);
+ PyObject *args = Py_VaBuildValue(format, argp);
+ va_end(argp);
+ if (args == NULL)
+ goto error1;
+
+ PyObject *result = PyObject_CallObject(apply_markup, args);
+ if (result == NULL) {
+ Py_DECREF(args);
+ error1:
+ Py_DECREF(apply_markup);
+ error0:
+ return false;
+ }
+
+ Py_DECREF(result);
+ Py_DECREF(args);
+ Py_DECREF(apply_markup);
+ return true;
+}
+
+static bool next_YY_INPUT_chunk(lex_yylexObject *self) {
+ /*printf("next_YY_INPUT_chunk()\n");*/
+ /* cursor is not cached, since we'd have to re-cache every time we enter */
+ /* iterator, whereas we are only supposed to read new chunks occasionally */
+ Py_ssize_t pos, off, len;
+ if (!get_cursor(self, -1, &pos, &off))
+ goto error0;
+
+ PyObject *tail;
+ while (true) {
+ /* re-check the length, as tail could have got longer in the meantime */
+ tail = PyObject_CallMethod(work, "get_tail", "On", self->root, pos);
+ if (tail == NULL)
+ goto error0;
+ len = PyObject_Length(tail);
+ if (len < 0)
+ goto error1;
+
+ /* see if now need to do more data from the same chunk */
+ if (off < len)
+ break;
+ Py_DECREF(tail);
+
+ /* if last chunk try to extend it, otherwise go on to next */
+ Py_ssize_t root_len = PyObject_Length(self->root);
+ if (root_len < 0)
+ goto error0;
+ if (pos + 1 >= root_len) {
+ if (self->yychunk_iter != Py_None){
+ PyObject *result = PyObject_CallMethod(self->yychunk_iter, "__next__", "");
+ if (result != NULL) {
+ Py_DECREF(result);
+ continue; /* re-check current chunk, in case extended */
+ }
+ if (!PyErr_ExceptionMatches(PyExc_StopIteration))
+ goto error0;
+ PyErr_Clear();
+ }
+
+ /* it is not an error to run out of data, empty return indicates EOF */
+ Py_INCREF(Py_None);
+ Py_DECREF(self->YY_INPUT_bytes);
+ self->YY_INPUT_bytes = Py_None;
+ self->YY_INPUT_bytes_off = 0;
+ self->YY_INPUT_bytes_len = 0;
+ return true;
+ }
+ ++pos;
+ off = 0;
+ }
+
+ /* got something we can return, advance cursor by unicode length of data */
+ if (!set_cursor(self, -1, pos, off + len))
+ goto error1;
+
+ /* check for less efficient case when caller has appended to the chunk, */
+ /* requires a large copy that caller can avoid by only adding new chunks */
+ if (off >= 0) {
+ PyObject *index = PyLong_FromSsize_t(off);
+ if (index == NULL)
+ goto error1;
+ PyObject *slice = PySlice_New(index, NULL, NULL);
+ if (slice == NULL)
+ goto error2;
+ PyObject *item = PyObject_GetItem(tail, slice);
+ if (item == NULL) {
+ Py_DECREF(slice);
+ error2:
+ Py_DECREF(index);
+ goto error1;
+ }
+ Py_DECREF(tail);
+ tail = item;
+ Py_DECREF(slice);
+ Py_DECREF(index);
+ }
+
+ /* convert entire chunk to UTF-8, then use for multiple YY_INPUT() calls */
+ PyObject *bytes = PyUnicode_AsUTF8String(tail);
+ if (bytes == NULL)
+ goto error1;
+ len = PyObject_Length(bytes);
+ if (len < 0) {
+ Py_DECREF(bytes);
+ error1:
+ Py_DECREF(tail);
+ error0:
+ return false;
+ }
+ Py_DECREF(self->YY_INPUT_bytes);
+ self->YY_INPUT_bytes = bytes;
+ self->YY_INPUT_bytes_off = 0;
+ self->YY_INPUT_bytes_len = len;
+
+ Py_DECREF(tail);
+ return true;
+}
+
+static bool next_yytext_chunk(lex_yylexObject *self) {
+ while (true) {
+ /* re-cache the length, as tail could have got longer in the meantime */
+ PyObject *tail = PyObject_CallMethod(work, "get_tail", "On", self->root, yytext_pos);
+ if (tail == NULL)
+ goto error0;
+ yytext_len = PyObject_Length(tail);
+ if (yytext_len < 0) {
+ Py_DECREF(tail);
+ error0:
+ return false;
+ }
+ Py_DECREF(tail);
+
+ /* see if now need to do more data from the same chunk */
+ if (yytext_off < yytext_len)
+ break;
+
+ /* go on to next chunk (note: it can't go past YY_INPUT cursor) */
+ ++yytext_pos;
+ yytext_off = 0;
+ }
+ return true;
+}
+
+#define skip_yytext_byte(self, c) \
+ do { \
+ if ((c & 0xc0) != 0x80) { \
+ /*printf("'%c' %ld %ld\n", c, yytext_off, yytext_len);*/ \
+ if (yytext_off >= yytext_len && !next_yytext_chunk(self)) \
+ return false; \
+ ++yytext_off; \
+ } \
+ } while (0)
+
+static bool skip_yytext(lex_yylexObject *self) {
+ int c;
+ for (char *p = yytext; (c = *p) != 0; ++p)
+ skip_yytext_byte(self, c);
+ return true;
+}
+
+static bool skip_comment(lex_yylexObject *self) {
+ int c;
+ while ((c = input()) != 0) {
+ if (c == '*') {
+ skip_yytext_byte(self, '*');
+ while ((c = input()) == '*')
+ skip_yytext_byte(self, '*');
+
+ if (c == '/') {
+ skip_yytext_byte(self, '/');
+ return true;
+ }
+
+ if (c == 0)
+ break;
+ }
+ skip_yytext_byte(self, c);
+ }
+ yyerror("unterminated comment");
+ return true;
+}
+
+static PyObject *lex_yylex_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) {
+ lex_yylexObject *self;
+
+ self = (lex_yylexObject *)type->tp_alloc(type, 0);
+ Py_INCREF(Py_None);
+ self->root = Py_None;
+ Py_INCREF(Py_None);
+ self->mark = Py_None;
+ Py_INCREF(Py_None);
+ self->yychunk_iter = Py_None;
+ Py_INCREF(Py_None);
+ self->YY_INPUT_bytes = Py_None;
+ return (PyObject *)self;
+}
+
+static void lex_yylex_dealloc(lex_yylexObject *self) {
+ Py_DECREF(self->root);
+ Py_DECREF(self->mark);
+ Py_DECREF(self->yychunk_iter);
+ Py_DECREF(self->YY_INPUT_bytes);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static int lex_yylex_init(lex_yylexObject *self, PyObject *args, PyObject *kwargs) {
+ PyObject *root, *mark, *yychunk_iter = Py_None;
+ if (!PyArg_ParseTuple(args, "OO|O", &root, &mark, &yychunk_iter))
+ goto error0;
+
+ Py_INCREF(root);
+ Py_DECREF(self->root);
+ self->root = root;
+
+ Py_INCREF(mark);
+ Py_DECREF(self->mark);
+ self->mark = mark;
+
+ if (yychunk_iter == Py_None)
+ Py_INCREF(Py_None);
+ else {
+ yychunk_iter = PyObject_GetIter(yychunk_iter);
+ if (yychunk_iter == NULL)
+ goto error1;
+ }
+ Py_DECREF(self->yychunk_iter);
+ self->yychunk_iter = yychunk_iter;
+
+ /* mark[:] = [(-1, 0), (-1, 0)] */
+ /* the first is the yytext cursor, it will be advanced one unicode code */
+ /* point for each UTF-8 non-continuation character scanned in yytext; */
+ /* the second is the YY_INPUT cursor, it will be advanced by the chunk */
+ /* length in unicode code points each time we convert a chunk to UTF-8; */
+ /* each cursor consists of (pos, off) referring to root[pos].tail[off:], */
+ /* chunks accessed using work.get_tail(), so pos == -1 for root[pos].text */
+ if (!pop_cursors(self, 0) || !new_cursor(self, 0, -1, 0) || !new_cursor(self, 1, -1, 0)) {
+ error1:
+ /* don't keep useless references to user data structures after error */
+ Py_INCREF(Py_None);
+ Py_DECREF(self->root);
+ self->root = Py_None;
+ Py_INCREF(Py_None);
+ Py_DECREF(self->mark);
+ self->mark = Py_None;
+ Py_INCREF(Py_None);
+ Py_DECREF(self->yychunk_iter);
+ self->yychunk_iter = Py_None;
+ error0:
+ return -1;
+ }
+
+ Py_INCREF(Py_None);
+ Py_DECREF(self->YY_INPUT_bytes);
+ self->YY_INPUT_bytes = Py_None;
+ self->YY_INPUT_bytes_off = 0;
+ self->YY_INPUT_bytes_len = 0;
+
+ return 0;
+}
+
+static PyObject *lex_yylex_iter(PyObject *self) {
+ Py_INCREF(self);
+ return self;
+}
+
+static PyObject *lex_yylex_iternext(lex_yylexObject *self) {
+ /*printf("lex_yylex_iternext()\n");*/
+ if (self->root == Py_None || self->mark == Py_None) {
+ PyErr_SetNone(PyExc_StopIteration);
+ goto error0;
+ }
+
+ /* cache yytext_pos, yytext_off, yytext_len for quickly scanning yytext */
+ if (!get_cursor(self, -2, &yytext_pos, &yytext_off))
+ goto error1;
+ PyObject *tail = PyObject_CallMethod(work, "get_tail", "On", self->root, yytext_pos);
+ if (tail == NULL)
+ goto error1;
+ yytext_len = PyObject_Length(tail);
+ if (yytext_len < 0) {
+ Py_DECREF(tail);
+ goto error1;
+ }
+ Py_DECREF(tail);
+
+ yylex_self = self;
+ if (setjmp(yylex_abort))
+ goto error1;
+
+ (void)yyunput; /* fix defined but not used warning */
+ int token = yylex();
+ if (token == -1)
+ goto error1;
+
+ if (token == 0) {
+ /* finished, automatically delete YY_INPUT cursor and drop references */
+ if (!pop_cursors(self, -1)) {
+ error1:
+ /* don't keep useless references to user data structures after error */
+ Py_INCREF(Py_None);
+ Py_DECREF(self->root);
+ self->root = Py_None;
+ Py_INCREF(Py_None);
+ Py_DECREF(self->mark);
+ self->mark = Py_None;
+ Py_INCREF(Py_None);
+ Py_DECREF(self->yychunk_iter);
+ self->yychunk_iter = Py_None;
+ error0:
+ return NULL;
+ }
+ /* don't keep useless references to user data structures after EOF */
+ Py_INCREF(Py_None);
+ Py_DECREF(self->root);
+ self->root = Py_None;
+ Py_INCREF(Py_None);
+ Py_DECREF(self->mark);
+ self->mark = Py_None;
+ Py_INCREF(Py_None);
+ Py_DECREF(self->yychunk_iter);
+ self->yychunk_iter = Py_None;
+ }
+
+ /*printf("lex_yylex_iternext() returns %d\n", token);*/
+ return PyLong_FromLong((long)token);
+}
+
+static int lex_yylex_traverse(lex_yylexObject *self, visitproc visit, void *arg)
+{
+ Py_VISIT(self->root);
+ Py_VISIT(self->mark);
+ Py_VISIT(self->yychunk_iter);
+ Py_VISIT(self->YY_INPUT_bytes);
+ return 0;
+}
+
+static int lex_yylex_clear(lex_yylexObject *self)
+{
+ Py_CLEAR(self->root);
+ Py_CLEAR(self->mark);
+ Py_CLEAR(self->yychunk_iter);
+ Py_CLEAR(self->YY_INPUT_bytes);
+ return 0;
+}
+
+static PyMemberDef lex_yylex_members[] = {
+ {
+ "root",
+ T_OBJECT_EX,
+ offsetof(lex_yylexObject,
+ root),
+ 0,
+ "root element, stack of sub-elements (treated as characters) and text"
+ },
+ {
+ "mark",
+ T_OBJECT_EX,
+ offsetof(lex_yylexObject,
+ mark),
+ 0,
+ "list containing cursors, -2 current position, -1 next read position"
+ },
+ {
+ "yychunk_iter",
+ T_OBJECT_EX,
+ offsetof(lex_yylexObject,
+ yychunk_iter),
+ 0,
+ "iterator for new input chunks (or None)"
+ },
+ {
+ "YY_INPUT_bytes",
+ T_OBJECT_EX,
+ offsetof(lex_yylexObject,
+ YY_INPUT_bytes),
+ 0,
+ "UTF-8 encoding of current chunk to scan"
+ },
+ {
+ "YY_INPUT_bytes_off",
+ T_PYSSIZET,
+ offsetof(lex_yylexObject,
+ YY_INPUT_bytes_off),
+ 0,
+ "current offset in UTF-8 text"
+ },
+ {
+ "YY_INPUT_bytes_len",
+ T_PYSSIZET,
+ offsetof(lex_yylexObject,
+ YY_INPUT_bytes_len),
+ 0,
+ "maximum offset in UTF-8 text (inclusive)"
+ },
+ {}
+};
+
+static PyTypeObject lex_yylexType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "lex.yylex", /* tp_name */
+ sizeof(lex_yylexObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)lex_yylex_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */
+ "Lexical token iterator", /* tp_doc */
+ (traverseproc)lex_yylex_traverse, /* tp_traverse */
+ (inquiry)lex_yylex_clear, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ (getiterfunc)lex_yylex_iter, /* tp_iter */
+ (iternextfunc)lex_yylex_iternext, /* tp_iternext */
+ 0, /* tp_methods */
+ lex_yylex_members, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ (initproc)lex_yylex_init, /* tp_init */
+ 0, /* tp_alloc */
+ lex_yylex_new /* tp_new */
+};
+
+static int lex_traverse(PyObject *self, visitproc visit, void *arg)
+{
+ Py_VISIT(work);
+ Py_VISIT(work_factory);
+ return 0;
+}
+
+static int lex_clear(PyObject *self)
+{
+ Py_CLEAR(work);
+ Py_CLEAR(work_factory);
+ return 0;
+}
+
+static struct PyModuleDef lexmodule = {
+ PyModuleDef_HEAD_INIT,
+ "lex",
+ lex_doc_string,
+ -1,
+ NULL,
+ NULL,
+ lex_traverse,
+ lex_clear
+};
+
+PyMODINIT_FUNC PyInit_lex(void)
+{
+ if (work != NULL) {
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "lex module cannot be re-imported or sub-interpreted\n"
+ );
+ goto error0;
+ }
+
+ PyObject *module = PyModule_Create(&lexmodule);
+ if (module == NULL)
+ goto error0;
+
+ if (
+ PyType_Ready(&lex_yylexType) ||
+ PyModule_AddObject(module, "yylex", (PyObject *)&lex_yylexType)
+ )
+ goto error1;
+ Py_INCREF(&lex_yylexType);
+
+ work = PyImport_ImportModule("work");
+ if (work == NULL)
+ goto error1;
+ work_factory = PyObject_GetAttrString(work, "factory");
+ if (work_factory == NULL) {
+ Py_DECREF(work);
+ work = NULL;
+ error1:
+ Py_DECREF(module);
+ error0:
+ return NULL;
+ }
+
+ return module;
+}
--- /dev/null
+<root>
+ <RegexAnd ref="0"><RegexRepeat count0="-1" count1="-1" non_greedy="false"><RegexCharacterNot character_set="0 256"><RegexCharacter character_set="" /></RegexCharacterNot></RegexRepeat><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexOr><RegexNone /><RegexGroup group_attributes="" group_index="0" group_name="">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="47 48">/</RegexCharacter></RegexSequence><RegexCharacter character_set="42 43">*</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="1" group_name=""><RegexSequence>"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="47 48">/</RegexCharacter></RegexSequence><RegexCharacter character_set="47 48">/</RegexCharacter></RegexSequence>"<RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexCharacter character_set="0 10 11 256">.</RegexCharacter>*</RegexRepeat></RegexSequence></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="2" group_name="AUTO">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="3" group_name="BREAK">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="98 99">b</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="107 108">k</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="4" group_name="CASE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="5" group_name="CHAR">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="104 105">h</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="6" group_name="CONST">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="7" group_name="CONTINUE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="8" group_name="DEFAULT">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="9" group_name="DO">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="10" group_name="DOUBLE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="98 99">b</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="11" group_name="ELSE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="12" group_name="ENUM">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="109 110">m</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="13" group_name="EXTERN">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="120 121">x</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="14" group_name="FLOAT">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="15" group_name="FOR">"<RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="16" group_name="GOTO">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="17" group_name="IF">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="18" group_name="INLINE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="19" group_name="INT">"<RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="20" group_name="LONG">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="21" group_name="REGISTER">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="22" group_name="RESTRICT">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="23" group_name="RETURN">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="24" group_name="SHORT">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="104 105">h</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="25" group_name="SIGNED">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="26" group_name="SIZEOF">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="122 123">z</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="27" group_name="STATIC">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="28" group_name="STRUCT">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="29" group_name="SWITCH">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="119 120">w</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="104 105">h</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="30" group_name="TYPEDEF">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="121 122">y</RegexCharacter></RegexSequence><RegexCharacter character_set="112 113">p</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="31" group_name="UNION">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="32" group_name="UNSIGNED">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="33" group_name="VOID">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="118 119">v</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="34" group_name="VOLATILE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="118 119">v</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="35" group_name="WHILE">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="119 120">w</RegexCharacter></RegexSequence><RegexCharacter character_set="104 105">h</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="36" group_name="ALIGNAS">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="65 66">A</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="37" group_name="ALIGNOF">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="65 66">A</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="38" group_name="ATOMIC">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="65 66">A</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="109 110">m</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="39" group_name="BOOL">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="66 67">B</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="40" group_name="COMPLEX">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="67 68">C</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="109 110">m</RegexCharacter></RegexSequence><RegexCharacter character_set="112 113">p</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="120 121">x</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="41" group_name="GENERIC">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="71 72">G</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="42" group_name="IMAGINARY">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="73 74">I</RegexCharacter></RegexSequence><RegexCharacter character_set="109 110">m</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="103 104">g</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="121 122">y</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="43" group_name="NORETURN">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="78 79">N</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="44" group_name="STATIC_ASSERT">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="83 84">S</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="45" group_name="THREAD_LOCAL">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="84 85">T</RegexCharacter></RegexSequence><RegexCharacter character_set="104 105">h</RegexCharacter></RegexSequence><RegexCharacter character_set="114 115">r</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="100 101">d</RegexCharacter></RegexSequence><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence><RegexCharacter character_set="111 112">o</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="97 98">a</RegexCharacter></RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="46" group_name="FUNC_NAME">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="102 103">f</RegexCharacter></RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter></RegexSequence><RegexCharacter character_set="110 111">n</RegexCharacter></RegexSequence><RegexCharacter character_set="99 100">c</RegexCharacter></RegexSequence><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="47" group_name="TYPEDEF_NAME">"<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="115 116">s</RegexCharacter></RegexSequence><RegexCharacter character_set="105 106">i</RegexCharacter></RegexSequence><RegexCharacter character_set="122 123">z</RegexCharacter></RegexSequence><RegexCharacter character_set="101 102">e</RegexCharacter></RegexSequence><RegexCharacter character_set="95 96">_</RegexCharacter></RegexSequence><RegexCharacter character_set="116 117">t</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="48" group_name="IDENTIFIER"><RegexGroup group_attributes="" group_index="49" group_name="Identifier">(?<RegexSequence><RegexGroup group_attributes="" group_index="50" group_name="">([<RegexCharacterOr character_set="65 91 95 96 97 123"><RegexCharacterOr character_set="65 91 97 123"><RegexCharacterOr character_set="97 123"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 123"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="122 123">z</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 91"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="90 91">Z</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacter character_set="95 96">_</RegexCharacter></RegexCharacterOr>])</RegexGroup><RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="51" group_name="">([<RegexCharacterOr character_set="48 58 65 91 95 96 97 123"><RegexCharacterOr character_set="65 91 95 96 97 123"><RegexCharacterOr character_set="65 91 97 123"><RegexCharacterOr character_set="97 123"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 123"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="122 123">z</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 91"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="90 91">Z</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacter character_set="95 96">_</RegexCharacter></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>*</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="52" group_name="I_CONSTANT"><RegexGroup group_attributes="" group_index="53" group_name="ExpressionIntLiteral">(?<RegexSequence><RegexSequence><RegexGroup group_attributes="" group_index="54" group_name="">(<RegexGroup group_attributes="" group_index="55" group_name="">(<RegexSequence><RegexCharacter character_set="48 49">0</RegexCharacter>[<RegexCharacterOr character_set="88 89 120 121"><RegexCharacterOr character_set="120 121"><RegexCharacter character_set="" /><RegexCharacter character_set="120 121">x</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="88 89">X</RegexCharacter></RegexCharacterOr>]</RegexSequence>)</RegexGroup>)</RegexGroup><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="56" group_name="">([<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="57" group_name="">(<RegexGroup group_attributes="" group_index="58" group_name="">(<RegexOr><RegexGroup group_attributes="" group_index="59" group_name="">(<RegexSequence><RegexGroup group_attributes="" group_index="60" group_name="">(<RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>)</RegexGroup><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="61" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="108 109">l</RegexCharacter>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>|<RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence></RegexOr>|<RegexSequence><RegexCharacter character_set="76 77">L</RegexCharacter><RegexCharacter character_set="76 77">L</RegexCharacter></RegexSequence></RegexOr>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup>|<RegexGroup group_attributes="" group_index="62" group_name="">(<RegexSequence><RegexGroup group_attributes="" group_index="63" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="108 109">l</RegexCharacter>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>|<RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence></RegexOr>|<RegexSequence><RegexCharacter character_set="76 77">L</RegexCharacter><RegexCharacter character_set="76 77">L</RegexCharacter></RegexSequence></RegexOr>)</RegexGroup><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="64" group_name="">(<RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="65" group_name="I_CONSTANT"><RegexGroup group_attributes="" group_index="66" group_name="ExpressionIntLiteral">(?<RegexSequence><RegexSequence><RegexGroup group_attributes="" group_index="67" group_name="">([<RegexCharacterOr character_set="49 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="49 58"><RegexCharacter character_set="49 50">1</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup><RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="68" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>*</RegexRepeat></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="69" group_name="">(<RegexGroup group_attributes="" group_index="70" group_name="">(<RegexOr><RegexGroup group_attributes="" group_index="71" group_name="">(<RegexSequence><RegexGroup group_attributes="" group_index="72" group_name="">(<RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>)</RegexGroup><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="73" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="108 109">l</RegexCharacter>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>|<RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence></RegexOr>|<RegexSequence><RegexCharacter character_set="76 77">L</RegexCharacter><RegexCharacter character_set="76 77">L</RegexCharacter></RegexSequence></RegexOr>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup>|<RegexGroup group_attributes="" group_index="74" group_name="">(<RegexSequence><RegexGroup group_attributes="" group_index="75" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="108 109">l</RegexCharacter>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>|<RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence></RegexOr>|<RegexSequence><RegexCharacter character_set="76 77">L</RegexCharacter><RegexCharacter character_set="76 77">L</RegexCharacter></RegexSequence></RegexOr>)</RegexGroup><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="76" group_name="">(<RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="77" group_name="I_CONSTANT"><RegexGroup group_attributes="" group_index="78" group_name="ExpressionIntLiteral">(?<RegexSequence><RegexSequence>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="48 49">0</RegexCharacter></RegexSequence>"<RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="79" group_name="">([<RegexCharacterOr character_set="48 56"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 56"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="55 56">7</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>*</RegexRepeat></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="80" group_name="">(<RegexGroup group_attributes="" group_index="81" group_name="">(<RegexOr><RegexGroup group_attributes="" group_index="82" group_name="">(<RegexSequence><RegexGroup group_attributes="" group_index="83" group_name="">(<RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>)</RegexGroup><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="84" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="108 109">l</RegexCharacter>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>|<RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence></RegexOr>|<RegexSequence><RegexCharacter character_set="76 77">L</RegexCharacter><RegexCharacter character_set="76 77">L</RegexCharacter></RegexSequence></RegexOr>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup>|<RegexGroup group_attributes="" group_index="85" group_name="">(<RegexSequence><RegexGroup group_attributes="" group_index="86" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="108 109">l</RegexCharacter>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>|<RegexSequence><RegexCharacter character_set="108 109">l</RegexCharacter><RegexCharacter character_set="108 109">l</RegexCharacter></RegexSequence></RegexOr>|<RegexSequence><RegexCharacter character_set="76 77">L</RegexCharacter><RegexCharacter character_set="76 77">L</RegexCharacter></RegexSequence></RegexOr>)</RegexGroup><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="87" group_name="">(<RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="88" group_name="I_CONSTANT"><RegexGroup group_attributes="" group_index="89" group_name="ExpressionIntLiteral">(?<RegexSequence><RegexSequence><RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="90" group_name="">(<RegexGroup group_attributes="" group_index="91" group_name="">(<RegexOr><RegexOr><RegexCharacter character_set="117 118">u</RegexCharacter>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="39 40">'</RegexCharacter></RegexSequence>"</RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="92" group_name="">(<RegexOr>[<RegexCharacterNot character_set="0 10 11 39 40 92 93 256">^<RegexCharacterOr character_set="10 11 39 40 92 93"><RegexCharacterOr character_set="39 40 92 93"><RegexCharacterOr character_set="39 40"><RegexCharacter character_set="" /><RegexCharacter character_set="39 40">'</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="92 93">\\</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="10 11">\n</RegexCharacter></RegexCharacterOr></RegexCharacterNot>]|<RegexGroup group_attributes="" group_index="93" group_name="">(<RegexGroup group_attributes="" group_index="94" group_name="">(<RegexSequence><RegexCharacter character_set="92 93">\\</RegexCharacter><RegexGroup group_attributes="" group_index="95" group_name="">(<RegexOr><RegexOr>[<RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111 114 115 116 117 118 119"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111 114 115 116 117"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111 114 115"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 98"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93"><RegexCharacterOr character_set="34 35 39 40 63 64"><RegexCharacterOr character_set="34 35 39 40"><RegexCharacterOr character_set="39 40"><RegexCharacter character_set="" /><RegexCharacter character_set="39 40">'</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="34 35">"</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="63 64">\?</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="92 93">\\</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="97 98">a</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="98 99">b</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="110 111">n</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="114 115">r</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="116 117">t</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="118 119">v</RegexCharacter></RegexCharacterOr>]|<RegexRepeat count0="1" count1="3" non_greedy="false">[<RegexCharacterOr character_set="48 56"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 56"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="55 56">7</RegexCharacter></RegexCharacterRange></RegexCharacterOr>]{</RegexRepeat></RegexOr>|<RegexSequence><RegexCharacter character_set="120 121">x</RegexCharacter><RegexRepeat count0="1" count1="-1" non_greedy="false">[<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>]+</RegexRepeat></RegexSequence></RegexOr>)</RegexGroup></RegexSequence>)</RegexGroup>)</RegexGroup></RegexOr>)</RegexGroup>+</RegexRepeat></RegexSequence>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="39 40">'</RegexCharacter></RegexSequence>"</RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="96" group_name="F_CONSTANT"><RegexGroup group_attributes="" group_index="97" group_name="ExpressionFloatLiteral">(?<RegexSequence><RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="98" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat><RegexGroup group_attributes="" group_index="99" group_name="">(<RegexGroup group_attributes="" group_index="100" group_name="">(<RegexSequence><RegexSequence>[<RegexCharacterOr character_set="69 70 101 102"><RegexCharacterOr character_set="69 70"><RegexCharacter character_set="" /><RegexCharacter character_set="69 70">E</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="101 102">e</RegexCharacter></RegexCharacterOr>]<RegexRepeat count0="0" count1="1" non_greedy="false">[<RegexCharacterOr character_set="43 44 45 46"><RegexCharacterOr character_set="43 44"><RegexCharacter character_set="" /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="45 46">-</RegexCharacter></RegexCharacterOr>]?</RegexRepeat></RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="101" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>)</RegexGroup>)</RegexGroup></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="102" group_name="">(<RegexGroup group_attributes="" group_index="103" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="102 103">f</RegexCharacter>|<RegexCharacter character_set="70 71">F</RegexCharacter></RegexOr>|<RegexCharacter character_set="108 109">l</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="104" group_name="F_CONSTANT"><RegexGroup group_attributes="" group_index="105" group_name="ExpressionFloatLiteral">(?<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="106" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>*</RegexRepeat>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence>"</RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="107" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="108" group_name="">(<RegexGroup group_attributes="" group_index="109" group_name="">(<RegexSequence><RegexSequence>[<RegexCharacterOr character_set="69 70 101 102"><RegexCharacterOr character_set="69 70"><RegexCharacter character_set="" /><RegexCharacter character_set="69 70">E</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="101 102">e</RegexCharacter></RegexCharacterOr>]<RegexRepeat count0="0" count1="1" non_greedy="false">[<RegexCharacterOr character_set="43 44 45 46"><RegexCharacterOr character_set="43 44"><RegexCharacter character_set="" /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="45 46">-</RegexCharacter></RegexCharacterOr>]?</RegexRepeat></RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="110" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="111" group_name="">(<RegexGroup group_attributes="" group_index="112" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="102 103">f</RegexCharacter>|<RegexCharacter character_set="70 71">F</RegexCharacter></RegexOr>|<RegexCharacter character_set="108 109">l</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="113" group_name="F_CONSTANT"><RegexGroup group_attributes="" group_index="114" group_name="ExpressionFloatLiteral">(?<RegexSequence><RegexSequence><RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="115" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence>"</RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="116" group_name="">(<RegexGroup group_attributes="" group_index="117" group_name="">(<RegexSequence><RegexSequence>[<RegexCharacterOr character_set="69 70 101 102"><RegexCharacterOr character_set="69 70"><RegexCharacter character_set="" /><RegexCharacter character_set="69 70">E</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="101 102">e</RegexCharacter></RegexCharacterOr>]<RegexRepeat count0="0" count1="1" non_greedy="false">[<RegexCharacterOr character_set="43 44 45 46"><RegexCharacterOr character_set="43 44"><RegexCharacter character_set="" /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="45 46">-</RegexCharacter></RegexCharacterOr>]?</RegexRepeat></RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="118" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="119" group_name="">(<RegexGroup group_attributes="" group_index="120" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="102 103">f</RegexCharacter>|<RegexCharacter character_set="70 71">F</RegexCharacter></RegexOr>|<RegexCharacter character_set="108 109">l</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="121" group_name="F_CONSTANT"><RegexGroup group_attributes="" group_index="122" group_name="ExpressionFloatLiteral">(?<RegexSequence><RegexSequence><RegexSequence><RegexGroup group_attributes="" group_index="123" group_name="">(<RegexGroup group_attributes="" group_index="124" group_name="">(<RegexSequence><RegexCharacter character_set="48 49">0</RegexCharacter>[<RegexCharacterOr character_set="88 89 120 121"><RegexCharacterOr character_set="120 121"><RegexCharacter character_set="" /><RegexCharacter character_set="120 121">x</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="88 89">X</RegexCharacter></RegexCharacterOr>]</RegexSequence>)</RegexGroup>)</RegexGroup><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="125" group_name="">([<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence><RegexGroup group_attributes="" group_index="126" group_name="">(<RegexGroup group_attributes="" group_index="127" group_name="">(<RegexSequence><RegexSequence>[<RegexCharacterOr character_set="80 81 112 113"><RegexCharacterOr character_set="80 81"><RegexCharacter character_set="" /><RegexCharacter character_set="80 81">P</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="112 113">p</RegexCharacter></RegexCharacterOr>]<RegexRepeat count0="0" count1="1" non_greedy="false">[<RegexCharacterOr character_set="43 44 45 46"><RegexCharacterOr character_set="43 44"><RegexCharacter character_set="" /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="45 46">-</RegexCharacter></RegexCharacterOr>]?</RegexRepeat></RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="128" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>)</RegexGroup>)</RegexGroup></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="129" group_name="">(<RegexGroup group_attributes="" group_index="130" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="102 103">f</RegexCharacter>|<RegexCharacter character_set="70 71">F</RegexCharacter></RegexOr>|<RegexCharacter character_set="108 109">l</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="131" group_name="F_CONSTANT"><RegexGroup group_attributes="" group_index="132" group_name="ExpressionFloatLiteral">(?<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexGroup group_attributes="" group_index="133" group_name="">(<RegexGroup group_attributes="" group_index="134" group_name="">(<RegexSequence><RegexCharacter character_set="48 49">0</RegexCharacter>[<RegexCharacterOr character_set="88 89 120 121"><RegexCharacterOr character_set="120 121"><RegexCharacter character_set="" /><RegexCharacter character_set="120 121">x</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="88 89">X</RegexCharacter></RegexCharacterOr>]</RegexSequence>)</RegexGroup>)</RegexGroup><RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="135" group_name="">([<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>*</RegexRepeat></RegexSequence>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence>"</RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="136" group_name="">([<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence><RegexGroup group_attributes="" group_index="137" group_name="">(<RegexGroup group_attributes="" group_index="138" group_name="">(<RegexSequence><RegexSequence>[<RegexCharacterOr character_set="80 81 112 113"><RegexCharacterOr character_set="80 81"><RegexCharacter character_set="" /><RegexCharacter character_set="80 81">P</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="112 113">p</RegexCharacter></RegexCharacterOr>]<RegexRepeat count0="0" count1="1" non_greedy="false">[<RegexCharacterOr character_set="43 44 45 46"><RegexCharacterOr character_set="43 44"><RegexCharacter character_set="" /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="45 46">-</RegexCharacter></RegexCharacterOr>]?</RegexRepeat></RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="139" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>)</RegexGroup>)</RegexGroup></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="140" group_name="">(<RegexGroup group_attributes="" group_index="141" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="102 103">f</RegexCharacter>|<RegexCharacter character_set="70 71">F</RegexCharacter></RegexOr>|<RegexCharacter character_set="108 109">l</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="142" group_name="F_CONSTANT"><RegexGroup group_attributes="" group_index="143" group_name="ExpressionFloatLiteral">(?<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexGroup group_attributes="" group_index="144" group_name="">(<RegexGroup group_attributes="" group_index="145" group_name="">(<RegexSequence><RegexCharacter character_set="48 49">0</RegexCharacter>[<RegexCharacterOr character_set="88 89 120 121"><RegexCharacterOr character_set="120 121"><RegexCharacter character_set="" /><RegexCharacter character_set="120 121">x</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="88 89">X</RegexCharacter></RegexCharacterOr>]</RegexSequence>)</RegexGroup>)</RegexGroup><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="146" group_name="">([<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence>"</RegexSequence><RegexGroup group_attributes="" group_index="147" group_name="">(<RegexGroup group_attributes="" group_index="148" group_name="">(<RegexSequence><RegexSequence>[<RegexCharacterOr character_set="80 81 112 113"><RegexCharacterOr character_set="80 81"><RegexCharacter character_set="" /><RegexCharacter character_set="80 81">P</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="112 113">p</RegexCharacter></RegexCharacterOr>]<RegexRepeat count0="0" count1="1" non_greedy="false">[<RegexCharacterOr character_set="43 44 45 46"><RegexCharacterOr character_set="43 44"><RegexCharacter character_set="" /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="45 46">-</RegexCharacter></RegexCharacterOr>]?</RegexRepeat></RegexSequence><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="149" group_name="">([<RegexCharacterOr character_set="48 58"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexSequence>)</RegexGroup>)</RegexGroup></RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="150" group_name="">(<RegexGroup group_attributes="" group_index="151" group_name="">(<RegexOr><RegexOr><RegexOr><RegexCharacter character_set="102 103">f</RegexCharacter>|<RegexCharacter character_set="70 71">F</RegexCharacter></RegexOr>|<RegexCharacter character_set="108 109">l</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat></RegexSequence>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="152" group_name="STRING_LITERAL"><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="153" group_name="">(<RegexSequence><RegexSequence><RegexSequence><RegexSequence><RegexRepeat count0="0" count1="1" non_greedy="false"><RegexGroup group_attributes="" group_index="154" group_name="">(<RegexGroup group_attributes="" group_index="155" group_name="">(<RegexOr><RegexOr><RegexOr><RegexSequence><RegexCharacter character_set="117 118">u</RegexCharacter><RegexCharacter character_set="56 57">8</RegexCharacter></RegexSequence>|<RegexCharacter character_set="117 118">u</RegexCharacter></RegexOr>|<RegexCharacter character_set="85 86">U</RegexCharacter></RegexOr>|<RegexCharacter character_set="76 77">L</RegexCharacter></RegexOr>)</RegexGroup>)</RegexGroup>?</RegexRepeat><RegexCharacter character_set="34 35">\"</RegexCharacter></RegexSequence><RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="156" group_name="">(<RegexOr>[<RegexCharacterNot character_set="0 10 11 34 35 92 93 256">^<RegexCharacterOr character_set="10 11 34 35 92 93"><RegexCharacterOr character_set="34 35 92 93"><RegexCharacterOr character_set="34 35"><RegexCharacter character_set="" /><RegexCharacter character_set="34 35">"</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="92 93">\\</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="10 11">\n</RegexCharacter></RegexCharacterOr></RegexCharacterNot>]|<RegexGroup group_attributes="" group_index="157" group_name="">(<RegexGroup group_attributes="" group_index="158" group_name="">(<RegexSequence><RegexCharacter character_set="92 93">\\</RegexCharacter><RegexGroup group_attributes="" group_index="159" group_name="">(<RegexOr><RegexOr>[<RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111 114 115 116 117 118 119"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111 114 115 116 117"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111 114 115"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103 110 111"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99 102 103"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 99"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93 97 98"><RegexCharacterOr character_set="34 35 39 40 63 64 92 93"><RegexCharacterOr character_set="34 35 39 40 63 64"><RegexCharacterOr character_set="34 35 39 40"><RegexCharacterOr character_set="39 40"><RegexCharacter character_set="" /><RegexCharacter character_set="39 40">'</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="34 35">"</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="63 64">\?</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="92 93">\\</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="97 98">a</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="98 99">b</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="110 111">n</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="114 115">r</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="116 117">t</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="118 119">v</RegexCharacter></RegexCharacterOr>]|<RegexRepeat count0="1" count1="3" non_greedy="false">[<RegexCharacterOr character_set="48 56"><RegexCharacter character_set="" /><RegexCharacterRange character_set="48 56"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="55 56">7</RegexCharacter></RegexCharacterRange></RegexCharacterOr>]{</RegexRepeat></RegexOr>|<RegexSequence><RegexCharacter character_set="120 121">x</RegexCharacter><RegexRepeat count0="1" count1="-1" non_greedy="false">[<RegexCharacterOr character_set="48 58 65 71 97 103"><RegexCharacterOr character_set="65 71 97 103"><RegexCharacterOr character_set="97 103"><RegexCharacter character_set="" /><RegexCharacterRange character_set="97 103"><RegexCharacter character_set="97 98">a</RegexCharacter>-<RegexCharacter character_set="102 103">f</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="65 71"><RegexCharacter character_set="65 66">A</RegexCharacter>-<RegexCharacter character_set="70 71">F</RegexCharacter></RegexCharacterRange></RegexCharacterOr><RegexCharacterRange character_set="48 58"><RegexCharacter character_set="48 49">0</RegexCharacter>-<RegexCharacter character_set="57 58">9</RegexCharacter></RegexCharacterRange></RegexCharacterOr>]+</RegexRepeat></RegexSequence></RegexOr>)</RegexGroup></RegexSequence>)</RegexGroup>)</RegexGroup></RegexOr>)</RegexGroup>*</RegexRepeat></RegexSequence><RegexCharacter character_set="34 35">\"</RegexCharacter></RegexSequence><RegexRepeat count0="0" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="160" group_name="">([<RegexCharacterOr character_set="9 13 32 33"><RegexCharacterOr character_set="9 12 32 33"><RegexCharacterOr character_set="9 10 11 12 32 33"><RegexCharacterOr character_set="9 10 32 33"><RegexCharacterOr character_set="32 33"><RegexCharacter character_set="" /><RegexCharacter character_set="32 33"> </RegexCharacter></RegexCharacterOr><RegexCharacter character_set="9 10">\t</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="11 12">\v</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="10 11">\n</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="12 13">\f</RegexCharacter></RegexCharacterOr>])</RegexGroup>*</RegexRepeat></RegexSequence>)</RegexGroup>+</RegexRepeat></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="161" group_name="ELLIPSIS">"<RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="162" group_name="RIGHT_ASSIGN">"<RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="163" group_name="LEFT_ASSIGN">"<RegexSequence><RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="164" group_name="ADD_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="165" group_name="SUB_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="45 46">-</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="166" group_name="MUL_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="42 43">*</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="167" group_name="DIV_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="47 48">/</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="168" group_name="MOD_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="37 38">%</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="169" group_name="AND_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="38 39">&</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="170" group_name="XOR_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="94 95">^</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="171" group_name="OR_ASSIGN">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="124 125">|</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="172" group_name="RIGHT_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="173" group_name="LEFT_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="174" group_name="INC_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexSequence><RegexCharacter character_set="43 44">+</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="175" group_name="DEC_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="45 46">-</RegexCharacter></RegexSequence><RegexCharacter character_set="45 46">-</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="176" group_name="PTR_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="45 46">-</RegexCharacter></RegexSequence><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="177" group_name="AND_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="38 39">&</RegexCharacter></RegexSequence><RegexCharacter character_set="38 39">&</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="178" group_name="OR_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="124 125">|</RegexCharacter></RegexSequence><RegexCharacter character_set="124 125">|</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="179" group_name="LE_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="180" group_name="GE_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="181" group_name="EQ_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="182" group_name="NE_OP">"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="33 34">!</RegexCharacter></RegexSequence><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="183" group_name="X_3B">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="59 60">;</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="184" group_name="X_7B"><RegexGroup group_attributes="" group_index="185" group_name="">(<RegexOr>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="123 124">{</RegexCharacter></RegexSequence>"|"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence><RegexCharacter character_set="37 38">%</RegexCharacter></RegexSequence>"</RegexOr>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="186" group_name="X_7D"><RegexGroup group_attributes="" group_index="187" group_name="">(<RegexOr>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="125 126">}</RegexCharacter></RegexSequence>"|"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="37 38">%</RegexCharacter></RegexSequence><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence>"</RegexOr>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="188" group_name="X_2C">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="44 45">,</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="189" group_name="X_3A">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="58 59">:</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="190" group_name="X_3D">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="61 62">=</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="191" group_name="X_28">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="40 41">(</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="192" group_name="X_29">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="41 42">)</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="193" group_name="X_5B"><RegexGroup group_attributes="" group_index="194" group_name="">(<RegexOr>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="91 92">[</RegexCharacter></RegexSequence>"|"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence><RegexCharacter character_set="58 59">:</RegexCharacter></RegexSequence>"</RegexOr>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="195" group_name="X_5D"><RegexGroup group_attributes="" group_index="196" group_name="">(<RegexOr>"<RegexSequence><RegexEmpty /><RegexCharacter character_set="93 94">]</RegexCharacter></RegexSequence>"|"<RegexSequence><RegexSequence><RegexEmpty /><RegexCharacter character_set="58 59">:</RegexCharacter></RegexSequence><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence>"</RegexOr>)</RegexGroup></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="197" group_name="X_2E">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="46 47">.</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="198" group_name="X_26">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="38 39">&</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="199" group_name="X_21">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="33 34">!</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="200" group_name="X_7E">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="126 127">~</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="201" group_name="X_2D">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="45 46">-</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="202" group_name="X_2B">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="43 44">+</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="203" group_name="X_2A">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="42 43">*</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="204" group_name="X_2F">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="47 48">/</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="205" group_name="X_25">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="37 38">%</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="206" group_name="X_3C">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="60 61"><</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="207" group_name="X_3E">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="62 63">></RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="208" group_name="X_5E">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="94 95">^</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="209" group_name="X_7C">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="124 125">|</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="210" group_name="X_3F">"<RegexSequence><RegexEmpty /><RegexCharacter character_set="63 64">?</RegexCharacter></RegexSequence>"</RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="211" group_name=""><RegexRepeat count0="1" count1="-1" non_greedy="false"><RegexGroup group_attributes="" group_index="212" group_name="">([<RegexCharacterOr character_set="9 13 32 33"><RegexCharacterOr character_set="9 12 32 33"><RegexCharacterOr character_set="9 10 11 12 32 33"><RegexCharacterOr character_set="9 10 32 33"><RegexCharacterOr character_set="32 33"><RegexCharacter character_set="" /><RegexCharacter character_set="32 33"> </RegexCharacter></RegexCharacterOr><RegexCharacter character_set="9 10">\t</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="11 12">\v</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="10 11">\n</RegexCharacter></RegexCharacterOr><RegexCharacter character_set="12 13">\f</RegexCharacter></RegexCharacterOr>])</RegexGroup>+</RegexRepeat></RegexGroup> </RegexOr><RegexGroup group_attributes="" group_index="213" group_name=""><RegexCharacter character_set="0 10 11 256">.</RegexCharacter></RegexGroup> </RegexOr></RegexAnd>
+</root>
--- /dev/null
+IDENTIFIER = 258
+I_CONSTANT = 259
+F_CONSTANT = 260
+STRING_LITERAL = 261
+FUNC_NAME = 262
+SIZEOF = 263
+PTR_OP = 264
+INC_OP = 265
+DEC_OP = 266
+LEFT_OP = 267
+RIGHT_OP = 268
+LE_OP = 269
+GE_OP = 270
+EQ_OP = 271
+NE_OP = 272
+AND_OP = 273
+OR_OP = 274
+MUL_ASSIGN = 275
+DIV_ASSIGN = 276
+MOD_ASSIGN = 277
+ADD_ASSIGN = 278
+SUB_ASSIGN = 279
+LEFT_ASSIGN = 280
+RIGHT_ASSIGN = 281
+AND_ASSIGN = 282
+XOR_ASSIGN = 283
+OR_ASSIGN = 284
+TYPEDEF_NAME = 285
+ENUMERATION_CONSTANT = 286
+TYPEDEF = 287
+EXTERN = 288
+STATIC = 289
+AUTO = 290
+REGISTER = 291
+INLINE = 292
+CONST = 293
+RESTRICT = 294
+VOLATILE = 295
+BOOL = 296
+CHAR = 297
+SHORT = 298
+INT = 299
+LONG = 300
+SIGNED = 301
+UNSIGNED = 302
+FLOAT = 303
+DOUBLE = 304
+VOID = 305
+COMPLEX = 306
+IMAGINARY = 307
+STRUCT = 308
+UNION = 309
+ENUM = 310
+ELLIPSIS = 311
+CASE = 312
+DEFAULT = 313
+IF = 314
+ELSE = 315
+SWITCH = 316
+WHILE = 317
+DO = 318
+FOR = 319
+GOTO = 320
+CONTINUE = 321
+BREAK = 322
+RETURN = 323
+ALIGNAS = 324
+ALIGNOF = 325
+ATOMIC = 326
+GENERIC = 327
+NORETURN = 328
+STATIC_ASSERT = 329
+THREAD_LOCAL = 330
--- /dev/null
+<root>
+ <Grammar associativities="" eof_terminal="256" n_terminals="331" ref="0"><Grammar_Production lhs_nonterminal="0" precedence="-1"><Grammar_Production_NamedSymbol name="block_item_list_opt" nonterminal_set="243 245" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="1" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionIdentifier"><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="2" precedence="-1"><Grammar_Production_NamedSymbol name="constant" nonterminal_set="6 9" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="3" precedence="-1"><Grammar_Production_NamedSymbol name="string" nonterminal_set="10 12" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="4" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production><Grammar_Production lhs_nonterminal="5" precedence="-1"><Grammar_Production_NamedSymbol name="generic_selection" nonterminal_set="12 13" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="6" precedence="-1"><Grammar_Production_NamedSymbol name="I_CONSTANT" nonterminal_set="" terminal_set="259 260" /></Grammar_Production><Grammar_Production lhs_nonterminal="7" precedence="-1"><Grammar_Production_NamedSymbol name="F_CONSTANT" nonterminal_set="" terminal_set="260 261" /></Grammar_Production><Grammar_Production lhs_nonterminal="8" precedence="-1"><Grammar_Production_NamedSymbol name="ENUMERATION_CONSTANT" nonterminal_set="" terminal_set="286 287" /></Grammar_Production><Grammar_Production lhs_nonterminal="9" precedence="-1"><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production><Grammar_Production lhs_nonterminal="10" precedence="-1"><Grammar_Production_NamedSymbol name="STRING_LITERAL" nonterminal_set="" terminal_set="261 262" /></Grammar_Production><Grammar_Production lhs_nonterminal="11" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionFunctionName"><Grammar_Production_NamedSymbol name="FUNC_NAME" nonterminal_set="" terminal_set="262 263" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="12" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="GenericSelection"><Grammar_Production_NamedSymbol name="GENERIC" nonterminal_set="" terminal_set="327 328" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_Group attributes="" index="1" name="GenericAssociationList"><Grammar_Production_NamedSymbol name="generic_association_list" nonterminal_set="13 15" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="13" precedence="-1"><Grammar_Production_NamedSymbol name="generic_association" nonterminal_set="15 16" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="14" precedence="-1"><Grammar_Production_NamedSymbol name="generic_association_list" nonterminal_set="13 15" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="generic_association" nonterminal_set="15 16" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="15" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="GenericAssociation"><Grammar_Production_NamedSymbol name="type_name_or_default" nonterminal_set="16 18" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="58 59" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="16" precedence="-1"><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="17" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DefaultTypeName"><Grammar_Production_NamedSymbol name="DEFAULT" nonterminal_set="" terminal_set="313 314" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="18" precedence="-1"><Grammar_Production_NamedSymbol name="primary_expression" nonterminal_set="1 6" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="19" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionIndex"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="91 92" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="93 94" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="20" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionCall"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="1" name="ArgumentExpressionList"><Grammar_Production_NamedSymbol name="argument_expression_list_opt" nonterminal_set="26 28" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="21" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionField"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="46 47" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="22" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionFieldDereference"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /><Grammar_Production_NamedSymbol name="PTR_OP" nonterminal_set="" terminal_set="264 265" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="23" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionPostIncrement"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /><Grammar_Production_NamedSymbol name="INC_OP" nonterminal_set="" terminal_set="265 266" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="24" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionPostDecrement"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /><Grammar_Production_NamedSymbol name="DEC_OP" nonterminal_set="" terminal_set="266 267" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="25" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionArray"><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="1" name="DesignatorInitializerList"><Grammar_Production_NamedSymbol name="designator_initializer_list_comma_opt" nonterminal_set="214 217" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="26" precedence="-1" /><Grammar_Production lhs_nonterminal="27" precedence="-1"><Grammar_Production_NamedSymbol name="argument_expression_list" nonterminal_set="28 30" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="28" precedence="-1"><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="29" precedence="-1"><Grammar_Production_NamedSymbol name="argument_expression_list" nonterminal_set="28 30" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="30" precedence="-1"><Grammar_Production_NamedSymbol name="postfix_expression" nonterminal_set="18 26" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="31" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionPreIncrement"><Grammar_Production_NamedSymbol name="INC_OP" nonterminal_set="" terminal_set="265 266" /><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="32" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionPreDecrement"><Grammar_Production_NamedSymbol name="DEC_OP" nonterminal_set="" terminal_set="266 267" /><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="33" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionAddressOf"><Grammar_Production_Symbol nonterminal_set="" terminal_set="38 39" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="34" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionDereference"><Grammar_Production_Symbol nonterminal_set="" terminal_set="42 43" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="35" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionPlus"><Grammar_Production_Symbol nonterminal_set="" terminal_set="43 44" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="36" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionMinus"><Grammar_Production_Symbol nonterminal_set="" terminal_set="45 46" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="37" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionBitwiseNot"><Grammar_Production_Symbol nonterminal_set="" terminal_set="126 127" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="38" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionLogicalNot"><Grammar_Production_Symbol nonterminal_set="" terminal_set="33 34" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="39" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionSizeOfExpression"><Grammar_Production_NamedSymbol name="SIZEOF" nonterminal_set="" terminal_set="263 264" /><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="40" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionSizeOfType"><Grammar_Production_NamedSymbol name="SIZEOF" nonterminal_set="" terminal_set="263 264" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="41" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionAlignOfType"><Grammar_Production_NamedSymbol name="ALIGNOF" nonterminal_set="" terminal_set="325 326" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="42" precedence="-1"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="43" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionCast"><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="44" precedence="-1"><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="45" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionMultiply"><Grammar_Production_NamedSymbol name="multiplicative_expression" nonterminal_set="44 48" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="42 43" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="46" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionDivide"><Grammar_Production_NamedSymbol name="multiplicative_expression" nonterminal_set="44 48" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="47 48" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="47" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionModulo"><Grammar_Production_NamedSymbol name="multiplicative_expression" nonterminal_set="44 48" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="37 38" /><Grammar_Production_NamedSymbol name="cast_expression" nonterminal_set="42 44" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="48" precedence="-1"><Grammar_Production_NamedSymbol name="multiplicative_expression" nonterminal_set="44 48" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="49" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionAdd"><Grammar_Production_NamedSymbol name="additive_expression" nonterminal_set="48 51" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="43 44" /><Grammar_Production_NamedSymbol name="multiplicative_expression" nonterminal_set="44 48" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="50" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionSubtract"><Grammar_Production_NamedSymbol name="additive_expression" nonterminal_set="48 51" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="45 46" /><Grammar_Production_NamedSymbol name="multiplicative_expression" nonterminal_set="44 48" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="51" precedence="-1"><Grammar_Production_NamedSymbol name="additive_expression" nonterminal_set="48 51" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="52" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionShiftLeft"><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /><Grammar_Production_NamedSymbol name="LEFT_OP" nonterminal_set="" terminal_set="267 268" /><Grammar_Production_NamedSymbol name="additive_expression" nonterminal_set="48 51" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="53" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionShiftRight"><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /><Grammar_Production_NamedSymbol name="RIGHT_OP" nonterminal_set="" terminal_set="268 269" /><Grammar_Production_NamedSymbol name="additive_expression" nonterminal_set="48 51" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="54" precedence="-1"><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="55" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionLessThan"><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="60 61" /><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="56" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionGreaterThan"><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="62 63" /><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="57" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionLessThanOrEqual"><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /><Grammar_Production_NamedSymbol name="LE_OP" nonterminal_set="" terminal_set="269 270" /><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="58" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionGreaterThanOrEqual"><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /><Grammar_Production_NamedSymbol name="GE_OP" nonterminal_set="" terminal_set="270 271" /><Grammar_Production_NamedSymbol name="shift_expression" nonterminal_set="51 54" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="59" precedence="-1"><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="60" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionEqual"><Grammar_Production_NamedSymbol name="equality_expression" nonterminal_set="59 62" terminal_set="" /><Grammar_Production_NamedSymbol name="EQ_OP" nonterminal_set="" terminal_set="271 272" /><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="61" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionNotEqual"><Grammar_Production_NamedSymbol name="equality_expression" nonterminal_set="59 62" terminal_set="" /><Grammar_Production_NamedSymbol name="NE_OP" nonterminal_set="" terminal_set="272 273" /><Grammar_Production_NamedSymbol name="relational_expression" nonterminal_set="54 59" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="62" precedence="-1"><Grammar_Production_NamedSymbol name="equality_expression" nonterminal_set="59 62" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="63" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionBitwiseAnd"><Grammar_Production_NamedSymbol name="and_expression" nonterminal_set="62 64" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="38 39" /><Grammar_Production_NamedSymbol name="equality_expression" nonterminal_set="59 62" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="64" precedence="-1"><Grammar_Production_NamedSymbol name="and_expression" nonterminal_set="62 64" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="65" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionExclusiveOr"><Grammar_Production_NamedSymbol name="exclusive_or_expression" nonterminal_set="64 66" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="94 95" /><Grammar_Production_NamedSymbol name="and_expression" nonterminal_set="62 64" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="66" precedence="-1"><Grammar_Production_NamedSymbol name="exclusive_or_expression" nonterminal_set="64 66" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="67" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionBitwiseOr"><Grammar_Production_NamedSymbol name="inclusive_or_expression" nonterminal_set="66 68" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="124 125" /><Grammar_Production_NamedSymbol name="exclusive_or_expression" nonterminal_set="64 66" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="68" precedence="-1"><Grammar_Production_NamedSymbol name="inclusive_or_expression" nonterminal_set="66 68" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="69" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionLogicalAnd"><Grammar_Production_NamedSymbol name="logical_and_expression" nonterminal_set="68 70" terminal_set="" /><Grammar_Production_NamedSymbol name="AND_OP" nonterminal_set="" terminal_set="273 274" /><Grammar_Production_NamedSymbol name="inclusive_or_expression" nonterminal_set="66 68" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="70" precedence="-1"><Grammar_Production_NamedSymbol name="logical_and_expression" nonterminal_set="68 70" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="71" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionLogicalOr"><Grammar_Production_NamedSymbol name="logical_or_expression" nonterminal_set="70 72" terminal_set="" /><Grammar_Production_NamedSymbol name="OR_OP" nonterminal_set="" terminal_set="274 275" /><Grammar_Production_NamedSymbol name="logical_and_expression" nonterminal_set="68 70" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="72" precedence="-1"><Grammar_Production_NamedSymbol name="logical_or_expression" nonterminal_set="70 72" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="73" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionConditional"><Grammar_Production_NamedSymbol name="logical_or_expression" nonterminal_set="70 72" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="63 64" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="58 59" /><Grammar_Production_NamedSymbol name="conditional_expression" nonterminal_set="72 74" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="74" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="75" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionAsterisk"><Grammar_Production_Symbol nonterminal_set="" terminal_set="42 43" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="76" precedence="-1"><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="77" precedence="-1"><Grammar_Production_NamedSymbol name="conditional_expression" nonterminal_set="72 74" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="78" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="61 62" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="79" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionMultiplyAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="MUL_ASSIGN" nonterminal_set="" terminal_set="275 276" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="80" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionDivideAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="DIV_ASSIGN" nonterminal_set="" terminal_set="276 277" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="81" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionModuloAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="MOD_ASSIGN" nonterminal_set="" terminal_set="277 278" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="82" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionAddAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="ADD_ASSIGN" nonterminal_set="" terminal_set="278 279" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="83" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionSubtractAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="SUB_ASSIGN" nonterminal_set="" terminal_set="279 280" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="84" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionLeftShiftAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="LEFT_ASSIGN" nonterminal_set="" terminal_set="280 281" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="85" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionRightShiftAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="RIGHT_ASSIGN" nonterminal_set="" terminal_set="281 282" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="86" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionBitwiseAndAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="AND_ASSIGN" nonterminal_set="" terminal_set="282 283" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="87" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionExclusiveOrAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="XOR_ASSIGN" nonterminal_set="" terminal_set="283 284" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="88" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionBitwiseOrAssignment"><Grammar_Production_NamedSymbol name="unary_expression" nonterminal_set="30 42" terminal_set="" /><Grammar_Production_NamedSymbol name="OR_ASSIGN" nonterminal_set="" terminal_set="284 285" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="89" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="90" precedence="-1"><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="91" precedence="-1"><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="92" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionComma"><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="93" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ExpressionEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="94" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="61 62" /><Grammar_Production_NamedSymbol name="constant_expression" nonterminal_set="95 96" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="95" precedence="-1"><Grammar_Production_NamedSymbol name="conditional_expression" nonterminal_set="72 74" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="96" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="Declaration"><Grammar_Production_Group attributes="" index="1" name="DeclarationSpecifierList"><Grammar_Production_NamedSymbol name="declaration_specifier_list" nonterminal_set="98 100" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Group attributes="" index="2" name="InitDeclaratorList"><Grammar_Production_NamedSymbol name="init_declarator_list_opt" nonterminal_set="105 107" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="97" precedence="-1"><Grammar_Production_NamedSymbol name="static_assert_declaration" nonterminal_set="226 227" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="98" precedence="-1"><Grammar_Production_NamedSymbol name="declaration_specifier" nonterminal_set="100 105" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="99" precedence="-1"><Grammar_Production_NamedSymbol name="declaration_specifier_list" nonterminal_set="98 100" terminal_set="" /><Grammar_Production_NamedSymbol name="declaration_specifier" nonterminal_set="100 105" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="100" precedence="-1"><Grammar_Production_NamedSymbol name="storage_class_specifier" nonterminal_set="110 116" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="101" precedence="-1"><Grammar_Production_NamedSymbol name="type_specifier" nonterminal_set="116 133" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="102" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier" nonterminal_set="168 172" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="103" precedence="-1"><Grammar_Production_NamedSymbol name="function_specifier" nonterminal_set="172 174" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="104" precedence="-1"><Grammar_Production_NamedSymbol name="alignment_specifier" nonterminal_set="174 176" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="105" precedence="-1" /><Grammar_Production lhs_nonterminal="106" precedence="-1"><Grammar_Production_NamedSymbol name="init_declarator_list" nonterminal_set="107 109" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="107" precedence="-1"><Grammar_Production_NamedSymbol name="init_declarator" nonterminal_set="109 110" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="108" precedence="-1"><Grammar_Production_NamedSymbol name="init_declarator_list" nonterminal_set="107 109" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="init_declarator" nonterminal_set="109 110" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="109" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="InitDeclarator"><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /><Grammar_Production_NamedSymbol name="equals_initializer_opt" nonterminal_set="210 212" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="110" precedence="-1"><Grammar_Production_Group attributes="1" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="TYPEDEF" nonterminal_set="" terminal_set="287 288" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="111" precedence="-1"><Grammar_Production_Group attributes="2" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="EXTERN" nonterminal_set="" terminal_set="288 289" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="112" precedence="-1"><Grammar_Production_Group attributes="3" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="STATIC" nonterminal_set="" terminal_set="289 290" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="113" precedence="-1"><Grammar_Production_Group attributes="4" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="THREAD_LOCAL" nonterminal_set="" terminal_set="330 331" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="114" precedence="-1"><Grammar_Production_Group attributes="5" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="AUTO" nonterminal_set="" terminal_set="290 291" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="115" precedence="-1"><Grammar_Production_Group attributes="6" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="REGISTER" nonterminal_set="" terminal_set="291 292" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="116" precedence="-1"><Grammar_Production_Group attributes="7" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="VOID" nonterminal_set="" terminal_set="305 306" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="117" precedence="-1"><Grammar_Production_Group attributes="8" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="CHAR" nonterminal_set="" terminal_set="297 298" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="118" precedence="-1"><Grammar_Production_Group attributes="9" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="SHORT" nonterminal_set="" terminal_set="298 299" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="119" precedence="-1"><Grammar_Production_Group attributes="10" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="INT" nonterminal_set="" terminal_set="299 300" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="120" precedence="-1"><Grammar_Production_Group attributes="11" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="LONG" nonterminal_set="" terminal_set="300 301" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="121" precedence="-1"><Grammar_Production_Group attributes="12" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="FLOAT" nonterminal_set="" terminal_set="303 304" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="122" precedence="-1"><Grammar_Production_Group attributes="13" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="DOUBLE" nonterminal_set="" terminal_set="304 305" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="123" precedence="-1"><Grammar_Production_Group attributes="14" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="SIGNED" nonterminal_set="" terminal_set="301 302" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="124" precedence="-1"><Grammar_Production_Group attributes="15" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="UNSIGNED" nonterminal_set="" terminal_set="302 303" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="125" precedence="-1"><Grammar_Production_Group attributes="16" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="BOOL" nonterminal_set="" terminal_set="296 297" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="126" precedence="-1"><Grammar_Production_Group attributes="17" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="COMPLEX" nonterminal_set="" terminal_set="306 307" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="127" precedence="-1"><Grammar_Production_Group attributes="18" index="0" name="TypeSpecifier"><Grammar_Production_NamedSymbol name="IMAGINARY" nonterminal_set="" terminal_set="307 308" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="128" precedence="-1"><Grammar_Production_NamedSymbol name="atomic_type_specifier" nonterminal_set="161 162" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="129" precedence="-1"><Grammar_Production_NamedSymbol name="struct_specifier" nonterminal_set="133 135" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="130" precedence="-1"><Grammar_Production_NamedSymbol name="union_specifier" nonterminal_set="135 137" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="131" precedence="-1"><Grammar_Production_NamedSymbol name="enum_specifier" nonterminal_set="153 155" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="132" precedence="-1"><Grammar_Production_NamedSymbol name="TYPEDEF_NAME" nonterminal_set="" terminal_set="285 286" /></Grammar_Production><Grammar_Production lhs_nonterminal="133" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StructSpecifier"><Grammar_Production_NamedSymbol name="STRUCT" nonterminal_set="" terminal_set="308 309" /><Grammar_Production_NamedSymbol name="identifier_opt" nonterminal_set="260 262" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="1" name="StructDeclarationList"><Grammar_Production_NamedSymbol name="struct_declaration_list_opt" nonterminal_set="137 139" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="134" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StructSpecifier"><Grammar_Production_NamedSymbol name="STRUCT" nonterminal_set="" terminal_set="308 309" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="135" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="UnionSpecifier"><Grammar_Production_NamedSymbol name="UNION" nonterminal_set="" terminal_set="309 310" /><Grammar_Production_NamedSymbol name="identifier_opt" nonterminal_set="260 262" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="1" name="StructDeclarationList"><Grammar_Production_NamedSymbol name="struct_declaration_list_opt" nonterminal_set="137 139" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="136" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="UnionSpecifier"><Grammar_Production_NamedSymbol name="UNION" nonterminal_set="" terminal_set="309 310" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="137" precedence="-1" /><Grammar_Production lhs_nonterminal="138" precedence="-1"><Grammar_Production_NamedSymbol name="struct_declaration_list" nonterminal_set="139 141" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="139" precedence="-1"><Grammar_Production_NamedSymbol name="struct_declaration" nonterminal_set="141 143" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="140" precedence="-1"><Grammar_Production_NamedSymbol name="struct_declaration_list" nonterminal_set="139 141" terminal_set="" /><Grammar_Production_NamedSymbol name="struct_declaration" nonterminal_set="141 143" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="141" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StructDeclaration"><Grammar_Production_Group attributes="" index="1" name="SpecifierQualifierList"><Grammar_Production_NamedSymbol name="specifier_qualifier_list" nonterminal_set="143 145" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Group attributes="" index="2" name="StructDeclaratorList"><Grammar_Production_NamedSymbol name="struct_declarator_list_opt" nonterminal_set="147 149" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="142" precedence="-1"><Grammar_Production_NamedSymbol name="static_assert_declaration" nonterminal_set="226 227" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="143" precedence="-1"><Grammar_Production_NamedSymbol name="specifier_qualifier" nonterminal_set="145 147" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="144" precedence="-1"><Grammar_Production_NamedSymbol name="specifier_qualifier_list" nonterminal_set="143 145" terminal_set="" /><Grammar_Production_NamedSymbol name="specifier_qualifier" nonterminal_set="145 147" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="145" precedence="-1"><Grammar_Production_NamedSymbol name="type_specifier" nonterminal_set="116 133" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="146" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier" nonterminal_set="168 172" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="147" precedence="-1" /><Grammar_Production lhs_nonterminal="148" precedence="-1"><Grammar_Production_NamedSymbol name="struct_declarator_list" nonterminal_set="149 151" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="149" precedence="-1"><Grammar_Production_NamedSymbol name="struct_declarator" nonterminal_set="151 153" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="150" precedence="-1"><Grammar_Production_NamedSymbol name="struct_declarator_list" nonterminal_set="149 151" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="struct_declarator" nonterminal_set="151 153" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="151" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StructDeclarator"><Grammar_Production_NamedSymbol name="declarator_opt" nonterminal_set="176 178" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="58 59" /><Grammar_Production_NamedSymbol name="constant_expression" nonterminal_set="95 96" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="152" precedence="-1"><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="153" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="EnumSpecifier"><Grammar_Production_NamedSymbol name="ENUM" nonterminal_set="" terminal_set="310 311" /><Grammar_Production_NamedSymbol name="identifier_opt" nonterminal_set="260 262" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="1" name="EnumeratorList"><Grammar_Production_NamedSymbol name="enumerator_list_comma_opt" nonterminal_set="155 158" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="154" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="EnumSpecifier"><Grammar_Production_NamedSymbol name="ENUM" nonterminal_set="" terminal_set="310 311" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="155" precedence="-1" /><Grammar_Production lhs_nonterminal="156" precedence="-1"><Grammar_Production_NamedSymbol name="enumerator_list" nonterminal_set="158 160" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="157" precedence="-1"><Grammar_Production_NamedSymbol name="enumerator_list" nonterminal_set="158 160" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /></Grammar_Production><Grammar_Production lhs_nonterminal="158" precedence="-1"><Grammar_Production_NamedSymbol name="enumerator" nonterminal_set="160 161" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="159" precedence="-1"><Grammar_Production_NamedSymbol name="enumerator_list" nonterminal_set="158 160" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="enumerator" nonterminal_set="160 161" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="160" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="Enumerator"><Grammar_Production_NamedSymbol name="enumeration_constant" nonterminal_set="9 10" terminal_set="" /><Grammar_Production_NamedSymbol name="equals_constant_expression_opt" nonterminal_set="93 95" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="161" precedence="-1"><Grammar_Production_NamedSymbol name="ATOMIC" nonterminal_set="" terminal_set="326 327" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production><Grammar_Production lhs_nonterminal="162" precedence="-1" /><Grammar_Production lhs_nonterminal="163" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier_or_static_list" nonterminal_set="164 166" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="164" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier_or_static" nonterminal_set="166 168" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="165" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier_or_static_list" nonterminal_set="164 166" terminal_set="" /><Grammar_Production_NamedSymbol name="type_qualifier_or_static" nonterminal_set="166 168" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="166" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier" nonterminal_set="168 172" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="167" precedence="-1"><Grammar_Production_Group attributes="19" index="0" name="StorageClassSpecifier"><Grammar_Production_NamedSymbol name="STATIC" nonterminal_set="" terminal_set="289 290" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="168" precedence="-1"><Grammar_Production_Group attributes="20" index="0" name="TypeQualifier"><Grammar_Production_NamedSymbol name="CONST" nonterminal_set="" terminal_set="293 294" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="169" precedence="-1"><Grammar_Production_Group attributes="21" index="0" name="TypeQualifier"><Grammar_Production_NamedSymbol name="RESTRICT" nonterminal_set="" terminal_set="294 295" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="170" precedence="-1"><Grammar_Production_Group attributes="22" index="0" name="TypeQualifier"><Grammar_Production_NamedSymbol name="VOLATILE" nonterminal_set="" terminal_set="295 296" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="171" precedence="-1"><Grammar_Production_Group attributes="23" index="0" name="TypeQualifier"><Grammar_Production_NamedSymbol name="ATOMIC" nonterminal_set="" terminal_set="326 327" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="172" precedence="-1"><Grammar_Production_Group attributes="24" index="0" name="FunctionSpecifier"><Grammar_Production_NamedSymbol name="INLINE" nonterminal_set="" terminal_set="292 293" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="173" precedence="-1"><Grammar_Production_Group attributes="25" index="0" name="FunctionSpecifier"><Grammar_Production_NamedSymbol name="NORETURN" nonterminal_set="" terminal_set="328 329" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="174" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="AlignAsType"><Grammar_Production_NamedSymbol name="ALIGNAS" nonterminal_set="" terminal_set="324 325" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="type_name" nonterminal_set="197 198" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="175" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="AlignAsExpression"><Grammar_Production_NamedSymbol name="ALIGNAS" nonterminal_set="" terminal_set="324 325" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="constant_expression" nonterminal_set="95 96" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="176" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="177" precedence="-1"><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="178" precedence="-1"><Grammar_Production_NamedSymbol name="direct_declarator" nonterminal_set="180 185" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="179" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorPointer"><Grammar_Production_Symbol nonterminal_set="" terminal_set="42 43" /><Grammar_Production_Group attributes="" index="1" name="TypeQualifierList"><Grammar_Production_NamedSymbol name="type_qualifier_list_opt" nonterminal_set="185 187" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="180" precedence="-1"><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production><Grammar_Production lhs_nonterminal="181" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production><Grammar_Production lhs_nonterminal="182" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorArray"><Grammar_Production_NamedSymbol name="direct_declarator" nonterminal_set="180 185" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="91 92" /><Grammar_Production_Group attributes="" index="1" name="TypeQualifierOrStaticList"><Grammar_Production_NamedSymbol name="type_qualifier_or_static_list_opt" nonterminal_set="162 164" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="assignment_expression_or_asterisk_opt" nonterminal_set="74 77" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="93 94" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="183" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorFunctionOldStyle"><Grammar_Production_NamedSymbol name="direct_declarator" nonterminal_set="180 185" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="1" name="IdentifierList"><Grammar_Production_NamedSymbol name="identifier_list_opt" nonterminal_set="193 195" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="184" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorFunction"><Grammar_Production_NamedSymbol name="direct_declarator" nonterminal_set="180 185" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="1" name="ParameterDeclarationList"><Grammar_Production_NamedSymbol name="parameter_declaration_list" nonterminal_set="189 191" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="comma_ellipsis_opt" nonterminal_set="262 264" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="185" precedence="-1" /><Grammar_Production lhs_nonterminal="186" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier_list" nonterminal_set="187 189" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="187" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier" nonterminal_set="168 172" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="188" precedence="-1"><Grammar_Production_NamedSymbol name="type_qualifier_list" nonterminal_set="187 189" terminal_set="" /><Grammar_Production_NamedSymbol name="type_qualifier" nonterminal_set="168 172" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="189" precedence="-1"><Grammar_Production_NamedSymbol name="parameter_declaration" nonterminal_set="191 193" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="190" precedence="-1"><Grammar_Production_NamedSymbol name="parameter_declaration_list" nonterminal_set="189 191" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="parameter_declaration" nonterminal_set="191 193" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="191" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ParameterDeclaration"><Grammar_Production_Group attributes="" index="1" name="DeclarationSpecifierList"><Grammar_Production_NamedSymbol name="declaration_specifier_list" nonterminal_set="98 100" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="192" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="ParameterDeclaration"><Grammar_Production_Group attributes="" index="1" name="DeclarationSpecifierList"><Grammar_Production_NamedSymbol name="declaration_specifier_list" nonterminal_set="98 100" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="abstract_declarator" nonterminal_set="198 200" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="193" precedence="-1" /><Grammar_Production lhs_nonterminal="194" precedence="-1"><Grammar_Production_NamedSymbol name="identifier_list" nonterminal_set="195 197" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="195" precedence="-1"><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production><Grammar_Production lhs_nonterminal="196" precedence="-1"><Grammar_Production_NamedSymbol name="identifier_list" nonterminal_set="195 197" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production><Grammar_Production lhs_nonterminal="197" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="TypeName"><Grammar_Production_Group attributes="" index="1" name="SpecifierQualifierList"><Grammar_Production_NamedSymbol name="specifier_qualifier_list" nonterminal_set="143 145" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="abstract_declarator" nonterminal_set="198 200" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="198" precedence="-1"><Grammar_Production_NamedSymbol name="direct_abstract_declarator_opt" nonterminal_set="200 202" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="199" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorPointer"><Grammar_Production_Symbol nonterminal_set="" terminal_set="42 43" /><Grammar_Production_Group attributes="" index="1" name="TypeQualifierList"><Grammar_Production_NamedSymbol name="type_qualifier_list_opt" nonterminal_set="185 187" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="abstract_declarator" nonterminal_set="198 200" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="200" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorAbstract" /></Grammar_Production><Grammar_Production lhs_nonterminal="201" precedence="-1"><Grammar_Production_NamedSymbol name="direct_abstract_declarator" nonterminal_set="202 210" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="202" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="direct_abstract_declarator" nonterminal_set="202 210" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production><Grammar_Production lhs_nonterminal="203" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="0" name="DeclaratorPointer"><Grammar_Production_Symbol nonterminal_set="" terminal_set="42 43" /><Grammar_Production_Group attributes="" index="1" name="TypeQualifierList"><Grammar_Production_NamedSymbol name="type_qualifier_list_opt" nonterminal_set="185 187" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="abstract_declarator" nonterminal_set="198 200" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production><Grammar_Production lhs_nonterminal="204" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorArray"><Grammar_Production_Group attributes="" index="1" name="DeclaratorAbstract" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="91 92" /><Grammar_Production_Group attributes="" index="2" name="TypeQualifierOrStaticList"><Grammar_Production_NamedSymbol name="type_qualifier_or_static_list_opt" nonterminal_set="162 164" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="assignment_expression_or_asterisk_opt" nonterminal_set="74 77" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="93 94" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="205" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorFunction"><Grammar_Production_Group attributes="" index="1" name="DeclaratorAbstract" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="2" name="ParameterDeclarationList" /><Grammar_Production_Group attributes="" index="3" name="CommaEllipsisEmpty" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="206" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorFunction"><Grammar_Production_Group attributes="" index="1" name="DeclaratorAbstract" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="2" name="ParameterDeclarationList"><Grammar_Production_NamedSymbol name="parameter_declaration_list" nonterminal_set="189 191" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="comma_ellipsis_opt" nonterminal_set="262 264" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="207" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorArray"><Grammar_Production_NamedSymbol name="direct_abstract_declarator" nonterminal_set="202 210" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="91 92" /><Grammar_Production_Group attributes="" index="1" name="TypeQualifierOrStaticList"><Grammar_Production_NamedSymbol name="type_qualifier_or_static_list_opt" nonterminal_set="162 164" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="assignment_expression_or_asterisk_opt" nonterminal_set="74 77" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="93 94" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="208" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorFunction"><Grammar_Production_NamedSymbol name="direct_abstract_declarator" nonterminal_set="202 210" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="1" name="ParameterDeclarationList" /><Grammar_Production_Group attributes="" index="2" name="CommaEllipsisEmpty" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="209" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DeclaratorFunction"><Grammar_Production_NamedSymbol name="direct_abstract_declarator" nonterminal_set="202 210" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_Group attributes="" index="1" name="ParameterDeclarationList"><Grammar_Production_NamedSymbol name="parameter_declaration_list" nonterminal_set="189 191" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="comma_ellipsis_opt" nonterminal_set="262 264" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="210" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="EqualsInitializerEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="211" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="61 62" /><Grammar_Production_NamedSymbol name="initializer" nonterminal_set="212 214" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="212" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="0" name="DesignatorInitializerList"><Grammar_Production_NamedSymbol name="designator_initializer_list_comma_opt" nonterminal_set="214 217" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production><Grammar_Production lhs_nonterminal="213" precedence="-1"><Grammar_Production_NamedSymbol name="assignment_expression" nonterminal_set="77 89" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="214" precedence="-1" /><Grammar_Production lhs_nonterminal="215" precedence="-1"><Grammar_Production_NamedSymbol name="designator_initializer_list" nonterminal_set="217 219" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="216" precedence="-1"><Grammar_Production_NamedSymbol name="designator_initializer_list" nonterminal_set="217 219" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /></Grammar_Production><Grammar_Production lhs_nonterminal="217" precedence="-1"><Grammar_Production_NamedSymbol name="designator_initializer" nonterminal_set="219 220" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="218" precedence="-1"><Grammar_Production_NamedSymbol name="designator_initializer_list" nonterminal_set="217 219" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="designator_initializer" nonterminal_set="219 220" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="219" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DesignatorInitializer"><Grammar_Production_Group attributes="" index="1" name="DesignatorList"><Grammar_Production_NamedSymbol name="designator_list_equals_opt" nonterminal_set="220 222" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="initializer" nonterminal_set="212 214" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="220" precedence="-1" /><Grammar_Production lhs_nonterminal="221" precedence="-1"><Grammar_Production_NamedSymbol name="designator_list" nonterminal_set="222 224" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="61 62" /></Grammar_Production><Grammar_Production lhs_nonterminal="222" precedence="-1"><Grammar_Production_NamedSymbol name="designator" nonterminal_set="224 226" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="223" precedence="-1"><Grammar_Production_NamedSymbol name="designator_list" nonterminal_set="222 224" terminal_set="" /><Grammar_Production_NamedSymbol name="designator" nonterminal_set="224 226" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="224" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DesignatorIndex"><Grammar_Production_Symbol nonterminal_set="" terminal_set="91 92" /><Grammar_Production_NamedSymbol name="constant_expression" nonterminal_set="95 96" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="93 94" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="225" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="DesignatorField"><Grammar_Production_Symbol nonterminal_set="" terminal_set="46 47" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="226" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StaticAssertDeclaration"><Grammar_Production_NamedSymbol name="STATIC_ASSERT" nonterminal_set="" terminal_set="329 330" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="constant_expression" nonterminal_set="95 96" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="STRING_LITERAL" nonterminal_set="" terminal_set="261 262" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="227" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementLabel"><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="58 59" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="228" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementCase"><Grammar_Production_NamedSymbol name="CASE" nonterminal_set="" terminal_set="312 313" /><Grammar_Production_NamedSymbol name="constant_expression" nonterminal_set="95 96" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="58 59" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="229" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementDefault"><Grammar_Production_NamedSymbol name="DEFAULT" nonterminal_set="" terminal_set="313 314" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="58 59" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="230" precedence="-1"><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="0" name="BlockItemList"><Grammar_Production_NamedSymbol name="block_item_list_opt" nonterminal_set="243 245" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production><Grammar_Production lhs_nonterminal="231" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementExpression"><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="232" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementIfElse"><Grammar_Production_NamedSymbol name="IF" nonterminal_set="" terminal_set="314 315" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /><Grammar_Production_NamedSymbol name="ELSE" nonterminal_set="" terminal_set="315 316" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="233" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementIf"><Grammar_Production_NamedSymbol name="IF" nonterminal_set="" terminal_set="314 315" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="234" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementSwitch"><Grammar_Production_NamedSymbol name="SWITCH" nonterminal_set="" terminal_set="316 317" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="235" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementWhile"><Grammar_Production_NamedSymbol name="WHILE" nonterminal_set="" terminal_set="317 318" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="236" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementDoWhile"><Grammar_Production_NamedSymbol name="DO" nonterminal_set="" terminal_set="318 319" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /><Grammar_Production_NamedSymbol name="WHILE" nonterminal_set="" terminal_set="317 318" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression" nonterminal_set="91 93" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="237" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementFor"><Grammar_Production_NamedSymbol name="FOR" nonterminal_set="" terminal_set="319 320" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="238" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementFor"><Grammar_Production_NamedSymbol name="FOR" nonterminal_set="" terminal_set="319 320" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="40 41" /><Grammar_Production_NamedSymbol name="declaration" nonterminal_set="96 98" terminal_set="" /><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="41 42" /><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="239" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementGoto"><Grammar_Production_NamedSymbol name="GOTO" nonterminal_set="" terminal_set="320 321" /><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="240" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementContinue"><Grammar_Production_NamedSymbol name="CONTINUE" nonterminal_set="" terminal_set="321 322" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="241" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementBreak"><Grammar_Production_NamedSymbol name="BREAK" nonterminal_set="" terminal_set="322 323" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="242" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="StatementReturn"><Grammar_Production_NamedSymbol name="RETURN" nonterminal_set="" terminal_set="323 324" /><Grammar_Production_NamedSymbol name="expression_opt" nonterminal_set="89 91" terminal_set="" /><Grammar_Production_Symbol nonterminal_set="" terminal_set="59 60" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="243" precedence="-1" /><Grammar_Production lhs_nonterminal="244" precedence="-1"><Grammar_Production_NamedSymbol name="block_item_list" nonterminal_set="245 247" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="245" precedence="-1"><Grammar_Production_NamedSymbol name="block_item" nonterminal_set="247 249" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="246" precedence="-1"><Grammar_Production_NamedSymbol name="block_item_list" nonterminal_set="245 247" terminal_set="" /><Grammar_Production_NamedSymbol name="block_item" nonterminal_set="247 249" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="247" precedence="-1"><Grammar_Production_NamedSymbol name="declaration" nonterminal_set="96 98" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="248" precedence="-1"><Grammar_Production_NamedSymbol name="statement" nonterminal_set="227 243" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="249" precedence="-1" /><Grammar_Production lhs_nonterminal="250" precedence="-1"><Grammar_Production_NamedSymbol name="translation_unit" nonterminal_set="251 253" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="251" precedence="-1"><Grammar_Production_NamedSymbol name="external_declaration" nonterminal_set="253 255" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="252" precedence="-1"><Grammar_Production_NamedSymbol name="translation_unit" nonterminal_set="251 253" terminal_set="" /><Grammar_Production_NamedSymbol name="external_declaration" nonterminal_set="253 255" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="253" precedence="-1"><Grammar_Production_NamedSymbol name="function_definition" nonterminal_set="255 256" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="254" precedence="-1"><Grammar_Production_NamedSymbol name="declaration" nonterminal_set="96 98" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="255" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="FunctionDefinition"><Grammar_Production_Group attributes="" index="1" name="DeclarationSpecifierList"><Grammar_Production_NamedSymbol name="declaration_specifier_list" nonterminal_set="98 100" terminal_set="" /></Grammar_Production_Group><Grammar_Production_NamedSymbol name="declarator" nonterminal_set="178 180" terminal_set="" /><Grammar_Production_Group attributes="" index="2" name="DeclarationList"><Grammar_Production_NamedSymbol name="declaration_list_opt" nonterminal_set="256 258" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="123 124" /><Grammar_Production_Group attributes="" index="3" name="BlockItemList"><Grammar_Production_NamedSymbol name="block_item_list_opt" nonterminal_set="243 245" terminal_set="" /></Grammar_Production_Group><Grammar_Production_Symbol nonterminal_set="" terminal_set="125 126" /></Grammar_Production_Group></Grammar_Production><Grammar_Production lhs_nonterminal="256" precedence="-1" /><Grammar_Production lhs_nonterminal="257" precedence="-1"><Grammar_Production_NamedSymbol name="declaration_list" nonterminal_set="258 260" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="258" precedence="-1"><Grammar_Production_NamedSymbol name="declaration" nonterminal_set="96 98" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="259" precedence="-1"><Grammar_Production_NamedSymbol name="declaration_list" nonterminal_set="258 260" terminal_set="" /><Grammar_Production_NamedSymbol name="declaration" nonterminal_set="96 98" terminal_set="" /></Grammar_Production><Grammar_Production lhs_nonterminal="260" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="IdentifierEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="261" precedence="-1"><Grammar_Production_NamedSymbol name="IDENTIFIER" nonterminal_set="" terminal_set="258 259" /></Grammar_Production><Grammar_Production lhs_nonterminal="262" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="CommaEllipsisEmpty" /></Grammar_Production><Grammar_Production lhs_nonterminal="263" precedence="-1"><Grammar_Production_Group attributes="" index="0" name="CommaEllipsis"><Grammar_Production_Symbol nonterminal_set="" terminal_set="44 45" /><Grammar_Production_NamedSymbol name="ELLIPSIS" nonterminal_set="" terminal_set="311 312" /></Grammar_Production_Group></Grammar_Production></Grammar>
+ <Grammar_Production_Group_Attribute name="n" ref="1" value="0" />
+ <Grammar_Production_Group_Attribute name="n" ref="2" value="1" />
+ <Grammar_Production_Group_Attribute name="n" ref="3" value="2" />
+ <Grammar_Production_Group_Attribute name="n" ref="4" value="3" />
+ <Grammar_Production_Group_Attribute name="n" ref="5" value="4" />
+ <Grammar_Production_Group_Attribute name="n" ref="6" value="5" />
+ <Grammar_Production_Group_Attribute name="n" ref="7" value="0" />
+ <Grammar_Production_Group_Attribute name="n" ref="8" value="1" />
+ <Grammar_Production_Group_Attribute name="n" ref="9" value="2" />
+ <Grammar_Production_Group_Attribute name="n" ref="10" value="3" />
+ <Grammar_Production_Group_Attribute name="n" ref="11" value="4" />
+ <Grammar_Production_Group_Attribute name="n" ref="12" value="5" />
+ <Grammar_Production_Group_Attribute name="n" ref="13" value="6" />
+ <Grammar_Production_Group_Attribute name="n" ref="14" value="7" />
+ <Grammar_Production_Group_Attribute name="n" ref="15" value="8" />
+ <Grammar_Production_Group_Attribute name="n" ref="16" value="9" />
+ <Grammar_Production_Group_Attribute name="n" ref="17" value="10" />
+ <Grammar_Production_Group_Attribute name="n" ref="18" value="11" />
+ <Grammar_Production_Group_Attribute name="n" ref="19" value="2" />
+ <Grammar_Production_Group_Attribute name="n" ref="20" value="0" />
+ <Grammar_Production_Group_Attribute name="n" ref="21" value="1" />
+ <Grammar_Production_Group_Attribute name="n" ref="22" value="2" />
+ <Grammar_Production_Group_Attribute name="n" ref="23" value="3" />
+ <Grammar_Production_Group_Attribute name="n" ref="24" value="0" />
+ <Grammar_Production_Group_Attribute name="n" ref="25" value="1" />
+</root>
--- /dev/null
+%token IDENTIFIER I_CONSTANT F_CONSTANT STRING_LITERAL FUNC_NAME SIZEOF
+%token PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP
+%token AND_OP OR_OP MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN
+%token SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN
+%token XOR_ASSIGN OR_ASSIGN
+%token TYPEDEF_NAME ENUMERATION_CONSTANT
+
+%token TYPEDEF EXTERN STATIC AUTO REGISTER INLINE
+%token CONST RESTRICT VOLATILE
+%token BOOL CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE VOID
+%token COMPLEX IMAGINARY
+%token STRUCT UNION ENUM ELLIPSIS
+
+%token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN
+
+%token ALIGNAS ALIGNOF ATOMIC GENERIC NORETURN STATIC_ASSERT THREAD_LOCAL
+
+%start block_item_list_opt
+
+%%
+
+primary_expression
+ : (?<ExpressionIdentifier>IDENTIFIER)
+ | constant
+ | string
+ | '(' expression ')'
+ | generic_selection
+ ;
+
+constant
+ : I_CONSTANT
+ | F_CONSTANT
+ | ENUMERATION_CONSTANT
+ ;
+
+enumeration_constant
+ : IDENTIFIER
+ ;
+
+string
+ : STRING_LITERAL
+ | (?<ExpressionFunctionName>FUNC_NAME)
+ ;
+
+generic_selection
+ : (?<GenericSelection>GENERIC '(' assignment_expression ',' (?<GenericAssociationList>generic_association_list) ')')
+ ;
+
+generic_association_list
+ : generic_association
+ | generic_association_list ',' generic_association
+ ;
+
+generic_association
+ : (?<GenericAssociation>type_name_or_default ':' assignment_expression)
+ ;
+
+type_name_or_default
+ : type_name
+ | (?<DefaultTypeName>DEFAULT)
+ ;
+
+postfix_expression
+ : primary_expression
+ | (?<ExpressionIndex>postfix_expression '[' expression ']')
+ | (?<ExpressionCall>postfix_expression '(' (?<ArgumentExpressionList>argument_expression_list_opt) ')')
+ | (?<ExpressionField>postfix_expression '.' IDENTIFIER)
+ | (?<ExpressionFieldDereference>postfix_expression PTR_OP IDENTIFIER)
+ | (?<ExpressionPostIncrement>postfix_expression INC_OP)
+ | (?<ExpressionPostDecrement>postfix_expression DEC_OP)
+ | (?<ExpressionArray>'(' type_name ')' '{' (?<DesignatorInitializerList>designator_initializer_list_comma_opt) '}')
+ ;
+
+argument_expression_list_opt
+ :
+ | argument_expression_list
+ ;
+
+argument_expression_list
+ : assignment_expression
+ | argument_expression_list ',' assignment_expression
+ ;
+
+unary_expression
+ : postfix_expression
+ | (?<ExpressionPreIncrement>INC_OP unary_expression)
+ | (?<ExpressionPreDecrement>DEC_OP unary_expression)
+ | (?<ExpressionAddressOf>'&' cast_expression)
+ | (?<ExpressionDereference>'*' cast_expression)
+ | (?<ExpressionPlus>'+' cast_expression)
+ | (?<ExpressionMinus>'-' cast_expression)
+ | (?<ExpressionBitwiseNot>'~' cast_expression)
+ | (?<ExpressionLogicalNot>'!' cast_expression)
+ | (?<ExpressionSizeOfExpression>SIZEOF unary_expression)
+ | (?<ExpressionSizeOfType>SIZEOF '(' type_name ')')
+ | (?<ExpressionAlignOfType>ALIGNOF '(' type_name ')')
+ ;
+
+cast_expression
+ : unary_expression
+ | (?<ExpressionCast>'(' type_name ')' cast_expression)
+ ;
+
+multiplicative_expression
+ : cast_expression
+ | (?<ExpressionMultiply>multiplicative_expression '*' cast_expression)
+ | (?<ExpressionDivide>multiplicative_expression '/' cast_expression)
+ | (?<ExpressionModulo>multiplicative_expression '%' cast_expression)
+ ;
+
+additive_expression
+ : multiplicative_expression
+ | (?<ExpressionAdd>additive_expression '+' multiplicative_expression)
+ | (?<ExpressionSubtract>additive_expression '-' multiplicative_expression)
+ ;
+
+shift_expression
+ : additive_expression
+ | (?<ExpressionShiftLeft>shift_expression LEFT_OP additive_expression)
+ | (?<ExpressionShiftRight>shift_expression RIGHT_OP additive_expression)
+ ;
+
+relational_expression
+ : shift_expression
+ | (?<ExpressionLessThan>relational_expression '<' shift_expression)
+ | (?<ExpressionGreaterThan>relational_expression '>' shift_expression)
+ | (?<ExpressionLessThanOrEqual>relational_expression LE_OP shift_expression)
+ | (?<ExpressionGreaterThanOrEqual>relational_expression GE_OP shift_expression)
+ ;
+
+equality_expression
+ : relational_expression
+ | (?<ExpressionEqual>equality_expression EQ_OP relational_expression)
+ | (?<ExpressionNotEqual>equality_expression NE_OP relational_expression)
+ ;
+
+and_expression
+ : equality_expression
+ | (?<ExpressionBitwiseAnd>and_expression '&' equality_expression)
+ ;
+
+exclusive_or_expression
+ : and_expression
+ | (?<ExpressionExclusiveOr>exclusive_or_expression '^' and_expression)
+ ;
+
+inclusive_or_expression
+ : exclusive_or_expression
+ | (?<ExpressionBitwiseOr>inclusive_or_expression '|' exclusive_or_expression)
+ ;
+
+logical_and_expression
+ : inclusive_or_expression
+ | (?<ExpressionLogicalAnd>logical_and_expression AND_OP inclusive_or_expression)
+ ;
+
+logical_or_expression
+ : logical_and_expression
+ | (?<ExpressionLogicalOr>logical_or_expression OR_OP logical_and_expression)
+ ;
+
+conditional_expression
+ : logical_or_expression
+ | (?<ExpressionConditional>logical_or_expression '?' expression ':' conditional_expression)
+ ;
+
+assignment_expression_or_asterisk_opt
+ : (?<ExpressionEmpty>)
+ | (?<ExpressionAsterisk>'*')
+ | assignment_expression
+ ;
+
+assignment_expression
+ : conditional_expression
+ | (?<ExpressionAssignment>unary_expression '=' assignment_expression)
+ | (?<ExpressionMultiplyAssignment>unary_expression MUL_ASSIGN assignment_expression)
+ | (?<ExpressionDivideAssignment>unary_expression DIV_ASSIGN assignment_expression)
+ | (?<ExpressionModuloAssignment>unary_expression MOD_ASSIGN assignment_expression)
+ | (?<ExpressionAddAssignment>unary_expression ADD_ASSIGN assignment_expression)
+ | (?<ExpressionSubtractAssignment>unary_expression SUB_ASSIGN assignment_expression)
+ | (?<ExpressionLeftShiftAssignment>unary_expression LEFT_ASSIGN assignment_expression)
+ | (?<ExpressionRightShiftAssignment>unary_expression RIGHT_ASSIGN assignment_expression)
+ | (?<ExpressionBitwiseAndAssignment>unary_expression AND_ASSIGN assignment_expression)
+ | (?<ExpressionExclusiveOrAssignment>unary_expression XOR_ASSIGN assignment_expression)
+ | (?<ExpressionBitwiseOrAssignment>unary_expression OR_ASSIGN assignment_expression)
+ ;
+
+expression_opt
+ : (?<ExpressionEmpty>)
+ | expression
+ ;
+
+expression
+ : assignment_expression
+ | (?<ExpressionComma>expression ',' assignment_expression)
+ ;
+
+equals_constant_expression_opt
+ : (?<ExpressionEmpty>)
+ | '=' constant_expression
+ ;
+
+constant_expression
+ : conditional_expression
+ ;
+
+declaration
+ : (?<Declaration>(?<DeclarationSpecifierList>declaration_specifier_list) (?<InitDeclaratorList>init_declarator_list_opt) ';')
+ | static_assert_declaration
+ ;
+
+declaration_specifier_list
+ : declaration_specifier
+ | declaration_specifier_list declaration_specifier
+ ;
+
+declaration_specifier
+ : storage_class_specifier
+ | type_specifier
+ | type_qualifier
+ | function_specifier
+ | alignment_specifier
+ ;
+
+init_declarator_list_opt
+ :
+ | init_declarator_list
+ ;
+
+init_declarator_list
+ : init_declarator
+ | init_declarator_list ',' init_declarator
+ ;
+
+init_declarator
+ : (?<InitDeclarator>declarator equals_initializer_opt)
+ ;
+
+storage_class_specifier
+ : (?<StorageClassSpecifier n="0">TYPEDEF)
+ | (?<StorageClassSpecifier n="1">EXTERN)
+ | (?<StorageClassSpecifier n="2">STATIC)
+ | (?<StorageClassSpecifier n="3">THREAD_LOCAL)
+ | (?<StorageClassSpecifier n="4">AUTO)
+ | (?<StorageClassSpecifier n="5">REGISTER)
+ ;
+
+type_specifier
+ : (?<TypeSpecifier n="0">VOID)
+ | (?<TypeSpecifier n="1">CHAR)
+ | (?<TypeSpecifier n="2">SHORT)
+ | (?<TypeSpecifier n="3">INT)
+ | (?<TypeSpecifier n="4">LONG)
+ | (?<TypeSpecifier n="5">FLOAT)
+ | (?<TypeSpecifier n="6">DOUBLE)
+ | (?<TypeSpecifier n="7">SIGNED)
+ | (?<TypeSpecifier n="8">UNSIGNED)
+ | (?<TypeSpecifier n="9">BOOL)
+ | (?<TypeSpecifier n="10">COMPLEX)
+ | (?<TypeSpecifier n="11">IMAGINARY)
+ | atomic_type_specifier
+ | struct_specifier
+ | union_specifier
+ | enum_specifier
+ | TYPEDEF_NAME
+ ;
+
+struct_specifier
+ : (?<StructSpecifier>STRUCT identifier_opt '{' (?<StructDeclarationList>struct_declaration_list_opt) '}')
+ | (?<StructSpecifier>STRUCT IDENTIFIER)
+ ;
+
+union_specifier
+ : (?<UnionSpecifier>UNION identifier_opt '{' (?<StructDeclarationList>struct_declaration_list_opt) '}')
+ | (?<UnionSpecifier>UNION IDENTIFIER)
+ ;
+
+struct_declaration_list_opt
+ :
+ | struct_declaration_list
+ ;
+
+struct_declaration_list
+ : struct_declaration
+ | struct_declaration_list struct_declaration
+ ;
+
+struct_declaration
+ : (?<StructDeclaration>(?<SpecifierQualifierList>specifier_qualifier_list) (?<StructDeclaratorList>struct_declarator_list_opt) ';')
+ | static_assert_declaration
+ ;
+
+specifier_qualifier_list
+ : specifier_qualifier
+ | specifier_qualifier_list specifier_qualifier
+ ;
+
+specifier_qualifier
+ : type_specifier
+ | type_qualifier
+ ;
+
+struct_declarator_list_opt
+ :
+ | struct_declarator_list
+ ;
+
+struct_declarator_list
+ : struct_declarator
+ | struct_declarator_list ',' struct_declarator
+ ;
+
+struct_declarator
+ : (?<StructDeclarator>declarator_opt ':' constant_expression)
+ | declarator
+ ;
+
+enum_specifier
+ : (?<EnumSpecifier>ENUM identifier_opt '{' (?<EnumeratorList>enumerator_list_comma_opt) '}')
+ | (?<EnumSpecifier>ENUM IDENTIFIER)
+ ;
+
+enumerator_list_comma_opt
+ :
+ | enumerator_list
+ | enumerator_list ','
+ ;
+
+enumerator_list
+ : enumerator
+ | enumerator_list ',' enumerator
+ ;
+
+enumerator
+ : (?<Enumerator>enumeration_constant equals_constant_expression_opt)
+ ;
+
+atomic_type_specifier
+ : ATOMIC '(' type_name ')'
+ ;
+
+type_qualifier_or_static_list_opt
+ :
+ | type_qualifier_or_static_list
+ ;
+
+type_qualifier_or_static_list
+ : type_qualifier_or_static
+ | type_qualifier_or_static_list type_qualifier_or_static
+ ;
+
+type_qualifier_or_static
+ : type_qualifier
+ | (?<StorageClassSpecifier n="2">STATIC)
+ ;
+
+type_qualifier
+ : (?<TypeQualifier n="0">CONST)
+ | (?<TypeQualifier n="1">RESTRICT)
+ | (?<TypeQualifier n="2">VOLATILE)
+ | (?<TypeQualifier n="3">ATOMIC)
+ ;
+
+function_specifier
+ : (?<FunctionSpecifier n="0">INLINE)
+ | (?<FunctionSpecifier n="1">NORETURN)
+ ;
+
+alignment_specifier
+ : (?<AlignAsType>ALIGNAS '(' type_name ')')
+ | (?<AlignAsExpression>ALIGNAS '(' constant_expression ')')
+ ;
+
+declarator_opt
+ : (?<DeclaratorEmpty>)
+ | declarator
+ ;
+
+declarator
+ : direct_declarator
+ | (?<DeclaratorPointer>'*' (?<TypeQualifierList>type_qualifier_list_opt) declarator)
+ ;
+
+direct_declarator
+ : IDENTIFIER
+ | '(' declarator ')'
+ | (?<DeclaratorArray>direct_declarator '[' (?<TypeQualifierOrStaticList>type_qualifier_or_static_list_opt) assignment_expression_or_asterisk_opt ']')
+ | (?<DeclaratorFunctionOldStyle>direct_declarator '(' (?<IdentifierList>identifier_list_opt) ')')
+ | (?<DeclaratorFunction>direct_declarator '(' (?<ParameterDeclarationList>parameter_declaration_list) comma_ellipsis_opt ')')
+ ;
+
+type_qualifier_list_opt
+ :
+ | type_qualifier_list
+ ;
+
+type_qualifier_list
+ : type_qualifier
+ | type_qualifier_list type_qualifier
+ ;
+
+parameter_declaration_list
+ : parameter_declaration
+ | parameter_declaration_list ',' parameter_declaration
+ ;
+
+parameter_declaration
+ : (?<ParameterDeclaration>(?<DeclarationSpecifierList>declaration_specifier_list) declarator)
+ | (?<ParameterDeclaration>(?<DeclarationSpecifierList>declaration_specifier_list) abstract_declarator)
+ ;
+
+identifier_list_opt
+ :
+ | identifier_list
+ ;
+
+identifier_list
+ : IDENTIFIER
+ | identifier_list ',' IDENTIFIER
+ ;
+
+type_name
+ : (?<TypeName>(?<SpecifierQualifierList>specifier_qualifier_list) abstract_declarator)
+ ;
+
+abstract_declarator
+ : direct_abstract_declarator_opt
+ | (?<DeclaratorPointer>'*' (?<TypeQualifierList>type_qualifier_list_opt) abstract_declarator)
+ ;
+
+direct_abstract_declarator_opt
+ : (?<DeclaratorAbstract>)
+ | direct_abstract_declarator
+ ;
+
+direct_abstract_declarator
+ : '(' direct_abstract_declarator ')'
+ | '(' (?<DeclaratorPointer>'*' (?<TypeQualifierList>type_qualifier_list_opt) abstract_declarator) ')'
+ | (?<DeclaratorArray>(?<DeclaratorAbstract>)'[' (?<TypeQualifierOrStaticList>type_qualifier_or_static_list_opt) assignment_expression_or_asterisk_opt ']')
+ | (?<DeclaratorFunction>(?<DeclaratorAbstract>)'('(?<ParameterDeclarationList>)(?<CommaEllipsisEmpty>) ')')
+ | (?<DeclaratorFunction>(?<DeclaratorAbstract>)'(' (?<ParameterDeclarationList>parameter_declaration_list) comma_ellipsis_opt ')')
+ | (?<DeclaratorArray>direct_abstract_declarator '[' (?<TypeQualifierOrStaticList>type_qualifier_or_static_list_opt) assignment_expression_or_asterisk_opt ']')
+ | (?<DeclaratorFunction>direct_abstract_declarator '('(?<ParameterDeclarationList>)(?<CommaEllipsisEmpty>) ')')
+ | (?<DeclaratorFunction>direct_abstract_declarator '(' (?<ParameterDeclarationList>parameter_declaration_list) comma_ellipsis_opt ')')
+ ;
+
+equals_initializer_opt
+ : (?<EqualsInitializerEmpty>)
+ | '=' initializer
+ ;
+
+initializer
+ : '{' (?<DesignatorInitializerList>designator_initializer_list_comma_opt) '}'
+ | assignment_expression
+ ;
+
+designator_initializer_list_comma_opt
+ :
+ | designator_initializer_list
+ | designator_initializer_list ','
+ ;
+
+designator_initializer_list
+ : designator_initializer
+ | designator_initializer_list ',' designator_initializer
+ ;
+
+designator_initializer
+ : (?<DesignatorInitializer>(?<DesignatorList>designator_list_equals_opt) initializer)
+ ;
+
+designator_list_equals_opt
+ :
+ | designator_list '='
+ ;
+
+designator_list
+ : designator
+ | designator_list designator
+ ;
+
+designator
+ : (?<DesignatorIndex>'[' constant_expression ']')
+ | (?<DesignatorField>'.' IDENTIFIER)
+ ;
+
+static_assert_declaration
+ : (?<StaticAssertDeclaration>STATIC_ASSERT '(' constant_expression ',' STRING_LITERAL ')' ';')
+ ;
+
+statement
+ : (?<StatementLabel>IDENTIFIER ':' statement)
+ | (?<StatementCase>CASE constant_expression ':' statement)
+ | (?<StatementDefault>DEFAULT ':' statement)
+ | '{' (?<BlockItemList>block_item_list_opt) '}'
+ | (?<StatementExpression>expression_opt ';')
+ | (?<StatementIfElse>IF '(' expression ')' statement ELSE statement)
+ | (?<StatementIf>IF '(' expression ')' statement)
+ | (?<StatementSwitch>SWITCH '(' expression ')' statement)
+ | (?<StatementWhile>WHILE '(' expression ')' statement)
+ | (?<StatementDoWhile>DO statement WHILE '(' expression ')' ';')
+ | (?<StatementFor>FOR '(' expression_opt ';' expression_opt ';' expression_opt ')' statement)
+ | (?<StatementFor>FOR '(' declaration expression_opt ';' expression_opt ')' statement)
+ | (?<StatementGoto>GOTO IDENTIFIER ';')
+ | (?<StatementContinue>CONTINUE ';')
+ | (?<StatementBreak>BREAK ';')
+ | (?<StatementReturn>RETURN expression_opt ';')
+ ;
+
+block_item_list_opt
+ :
+ | block_item_list
+ ;
+
+block_item_list
+ : block_item
+ | block_item_list block_item
+ ;
+
+block_item
+ : declaration
+ | statement
+ ;
+
+translation_unit_opt
+ :
+ | translation_unit
+ ;
+
+translation_unit
+ : external_declaration
+ | translation_unit external_declaration
+ ;
+
+external_declaration
+ : function_definition
+ | declaration
+ ;
+
+function_definition
+ : (?<FunctionDefinition>(?<DeclarationSpecifierList>declaration_specifier_list) declarator (?<DeclarationList>declaration_list_opt) '{' (?<BlockItemList>block_item_list_opt) '}')
+ ;
+
+declaration_list_opt
+ :
+ | declaration_list
+ ;
+
+declaration_list
+ : declaration
+ | declaration_list declaration
+ ;
+
+identifier_opt
+ : (?<IdentifierEmpty>)
+ | IDENTIFIER
+ ;
+
+comma_ellipsis_opt
+ : (?<CommaEllipsisEmpty>)
+ | (?<CommaEllipsis>',' ELLIPSIS)
+ ;
+
--- /dev/null
+import dfa
+
+# GENERATE DFA BEGIN
+_dfa = dfa.DFA([('', {}), ('', {}), ('AUTO', {}), ('BREAK', {}), ('CASE', {}),
+('CHAR', {}), ('CONST', {}), ('CONTINUE', {}), ('DEFAULT', {}), ('DO', {}), (
+'DOUBLE', {}), ('ELSE', {}), ('ENUM', {}), ('EXTERN', {}), ('FLOAT', {}), (
+'FOR', {}), ('GOTO', {}), ('IF', {}), ('INLINE', {}), ('INT', {}), ('LONG', {}
+), ('REGISTER', {}), ('RESTRICT', {}), ('RETURN', {}), ('SHORT', {}), (
+'SIGNED', {}), ('SIZEOF', {}), ('STATIC', {}), ('STRUCT', {}), ('SWITCH', {}),
+('TYPEDEF', {}), ('UNION', {}), ('UNSIGNED', {}), ('VOID', {}), ('VOLATILE', {}
+), ('WHILE', {}), ('ALIGNAS', {}), ('ALIGNOF', {}), ('ATOMIC', {}), ('BOOL', {}
+), ('COMPLEX', {}), ('GENERIC', {}), ('IMAGINARY', {}), ('NORETURN', {}), (
+'STATIC_ASSERT', {}), ('THREAD_LOCAL', {}), ('FUNC_NAME', {}), ('TYPEDEF_NAME',
+{}), ('IDENTIFIER', {}), ('Identifier', {}), ('', {}), ('', {}), ('I_CONSTANT',
+{}), ('ExpressionIntLiteral', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('',
+{}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('I_CONSTANT',
+{}), ('ExpressionIntLiteral', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('',
+{}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('I_CONSTANT', {}), (
+'ExpressionIntLiteral', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}),
+('', {}), ('', {}), ('', {}), ('', {}), ('I_CONSTANT', {}), (
+'ExpressionIntLiteral', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}),
+('', {}), ('F_CONSTANT', {}), ('ExpressionFloatLiteral', {}), ('', {}), ('', {}
+), ('', {}), ('', {}), ('', {}), ('', {}), ('F_CONSTANT', {}), (
+'ExpressionFloatLiteral', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}
+), ('', {}), ('', {}), ('F_CONSTANT', {}), ('ExpressionFloatLiteral', {}), ('',
+{}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('F_CONSTANT', {}), (
+'ExpressionFloatLiteral', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}
+), ('', {}), ('', {}), ('', {}), ('F_CONSTANT', {}), ('ExpressionFloatLiteral',
+{}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('',
+{}), ('', {}), ('F_CONSTANT', {}), ('ExpressionFloatLiteral', {}), ('', {}), (
+'', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), (
+'STRING_LITERAL', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {}), ('', {
+}), ('', {}), ('', {}), ('ELLIPSIS', {}), ('RIGHT_ASSIGN', {}), ('LEFT_ASSIGN',
+{}), ('ADD_ASSIGN', {}), ('SUB_ASSIGN', {}), ('MUL_ASSIGN', {}), ('DIV_ASSIGN',
+{}), ('MOD_ASSIGN', {}), ('AND_ASSIGN', {}), ('XOR_ASSIGN', {}), ('OR_ASSIGN',
+{}), ('RIGHT_OP', {}), ('LEFT_OP', {}), ('INC_OP', {}), ('DEC_OP', {}), (
+'PTR_OP', {}), ('AND_OP', {}), ('OR_OP', {}), ('LE_OP', {}), ('GE_OP', {}), (
+'EQ_OP', {}), ('NE_OP', {}), ('X_3B', {}), ('X_7B', {}), ('', {}), ('X_7D', {}
+), ('', {}), ('X_2C', {}), ('X_3A', {}), ('X_3D', {}), ('X_28', {}), ('X_29', {
+}), ('X_5B', {}), ('', {}), ('X_5D', {}), ('', {}), ('X_2E', {}), ('X_26', {}),
+('X_21', {}), ('X_7E', {}), ('X_2D', {}), ('X_2B', {}), ('X_2A', {}), ('X_2F',
+{}), ('X_25', {}), ('X_3C', {}), ('X_3E', {}), ('X_5E', {}), ('X_7C', {}), (
+'X_3F', {}), ('', {}), ('', {}), ('', {})], [([256], [0], 0), ([9, 10, 11, 13,
+32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 58, 59, 60,
+61, 62, 63, 64, 65, 76, 77, 85, 86, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+101, 102, 103, 104, 105, 106, 108, 109, 114, 115, 116, 117, 118, 119, 120, 123,
+124, 125, 126, 127, 256], [2, 3, 4, 3, 2, 3, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13,
+14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 2, 26, 27, 26, 28, 26, 29, 2,
+30, 31, 32, 2, 33, 34, 35, 36, 37, 38, 39, 26, 40, 26, 41, 26, 42, 43, 44, 45,
+46, 47, 26, 48, 49, 50, 51, 2], -1), ([9, 13, 32, 33, 256], [52, 53, 52, 53, 52
+], 1), ([61, 62, 256], [52, 54, 52], 1), ([10, 11, 34, 35, 92, 93, 256], [55,
+56, 55, 57, 55, 58, 55], 3), ([61, 62, 63, 256], [59, 60, 61, 59], 2), ([38,
+39, 61, 62, 256], [59, 62, 59, 63, 59], 2), ([10, 11, 39, 40, 92, 93, 256], [
+64, 59, 64, 59, 64, 65, 64], 2), ([61, 62, 256], [52, 66, 52], 1), ([43, 44,
+61, 62, 256], [59, 67, 59, 68, 59], 2), ([45, 46, 61, 62, 63, 256], [56, 69,
+56, 70, 71, 56], 3), ([46, 47, 48, 58, 256], [59, 72, 59, 73, 59], 2), ([42,
+43, 47, 48, 61, 62, 256], [56, 74, 56, 75, 56, 76, 56], 3), ([46, 47, 48, 56,
+58, 69, 70, 76, 77, 85, 86, 88, 89, 101, 102, 108, 109, 117, 118, 120, 121, 256
+], [77, 78, 77, 79, 80, 77, 81, 77, 82, 77, 83, 77, 84, 77, 81, 77, 85, 77, 86,
+77, 84, 77], 17), ([46, 47, 48, 58, 69, 70, 76, 77, 85, 86, 101, 102, 108, 109,
+117, 118, 256], [87, 88, 87, 89, 87, 90, 87, 91, 87, 92, 87, 90, 87, 93, 87,
+94, 87], 13), ([62, 63, 256], [52, 95, 52], 1), ([37, 38, 58, 59, 60, 61, 62,
+256], [96, 97, 96, 98, 96, 99, 100, 96], 5), ([61, 62, 256], [52, 101, 52], 1),
+([61, 62, 63, 256], [56, 102, 103, 56], 3), ([48, 58, 65, 91, 95, 96, 97, 123,
+256], [52, 104, 52, 104, 52, 104, 52, 104, 52], 1), ([34, 35, 39, 40, 48, 58,
+65, 91, 95, 96, 97, 123, 256], [56, 105, 56, 106, 56, 107, 56, 107, 56, 107,
+56, 107, 56], 3), ([61, 62, 256], [52, 108, 52], 1), ([48, 58, 65, 66, 67, 68,
+71, 72, 73, 74, 78, 79, 83, 84, 85, 91, 95, 96, 97, 123, 256], [109, 110, 109,
+111, 112, 113, 110, 114, 110, 115, 110, 116, 110, 117, 118, 110, 109, 119, 109,
+110, 109], 12), ([48, 58, 65, 91, 95, 96, 97, 117, 118, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 121, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 122, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 98, 104, 105, 111, 112, 123, 256], [96, 123, 96,
+123, 96, 123, 96, 124, 123, 125, 123, 126, 123, 96], 5), ([48, 58, 65, 91, 95,
+96, 97, 101, 102, 111, 112, 123, 256], [127, 128, 127, 128, 127, 128, 127, 128,
+129, 128, 130, 128, 127], 4), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 110, 111,
+120, 121, 123, 256], [127, 128, 127, 128, 127, 128, 127, 128, 131, 128, 132,
+128, 133, 128, 127], 4), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 111, 112, 123,
+256], [56, 134, 56, 134, 56, 134, 56, 134, 135, 134, 136, 134, 56], 3), ([48,
+58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 137, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 110, 111, 123,
+256], [127, 128, 127, 128, 127, 128, 127, 128, 138, 128, 139, 128, 127], 4), ([
+48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 140, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256],
+[127, 128, 127, 128, 127, 128, 127, 128, 141, 128, 127], 4), ([48, 58, 65, 91,
+95, 96, 97, 104, 105, 106, 116, 117, 119, 120, 123, 256], [142, 143, 142, 143,
+142, 143, 142, 143, 144, 145, 143, 146, 143, 147, 143, 142], 8), ([48, 58, 65,
+91, 95, 96, 97, 121, 122, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 148,
+120, 59], 2), ([34, 35, 39, 40, 48, 56, 57, 58, 65, 91, 95, 96, 97, 110, 111,
+123, 256], [149, 150, 149, 151, 149, 152, 153, 152, 149, 152, 149, 152, 149,
+152, 154, 152, 149], 6), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [
+56, 134, 56, 134, 56, 134, 56, 134, 155, 134, 56], 3), ([48, 58, 65, 91, 95,
+96, 97, 104, 105, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 156, 120, 59
+], 2), ([61, 62, 124, 125, 256], [59, 157, 59, 158, 59], 2), ([9, 13, 32, 33,
+34, 35, 76, 77, 85, 86, 117, 118, 256], [149, 159, 149, 159, 149, 160, 149,
+161, 149, 162, 149, 163, 149], 6), ([34, 35, 39, 40, 48, 56, 63, 64, 92, 93,
+97, 99, 102, 103, 110, 111, 114, 115, 116, 117, 118, 119, 120, 121, 256], [56,
+164, 56, 164, 56, 165, 56, 164, 56, 164, 56, 164, 56, 164, 56, 164, 56, 164,
+56, 164, 56, 164, 56, 166, 56], 3), ([10, 11, 39, 40, 92, 93, 256], [167, 56,
+167, 168, 167, 169, 167], 3), ([34, 35, 39, 40, 48, 56, 63, 64, 92, 93, 97, 99,
+102, 103, 110, 111, 114, 115, 116, 117, 118, 119, 120, 121, 256], [56, 170, 56,
+170, 56, 171, 56, 170, 56, 170, 56, 170, 56, 170, 56, 170, 56, 170, 56, 170,
+56, 170, 56, 172, 56], 3), ([46, 47, 256], [52, 173, 52], 1), ([48, 58, 69, 70,
+71, 76, 77, 101, 102, 103, 108, 109, 256], [149, 174, 149, 175, 176, 149, 177,
+149, 175, 178, 149, 179, 149], 6), ([10, 11, 256], [180, 52, 180], 1), ([48,
+58, 69, 70, 71, 76, 77, 101, 102, 103, 108, 109, 256], [149, 174, 149, 181,
+182, 149, 183, 149, 181, 184, 149, 185, 149], 6), ([46, 47, 48, 56, 58, 69, 70,
+76, 77, 85, 86, 101, 102, 108, 109, 117, 118, 256], [87, 88, 87, 186, 187, 87,
+90, 87, 188, 87, 189, 87, 90, 87, 190, 87, 191, 87], 13), ([46, 47, 48, 58, 69,
+70, 101, 102, 256], [149, 192, 149, 193, 149, 194, 149, 194, 149], 6), ([43,
+44, 45, 46, 48, 58, 256], [59, 195, 59, 195, 59, 196, 59], 2), ([76, 77, 85,
+86, 117, 118, 256], [56, 197, 56, 198, 56, 199, 56], 3), ([76, 77, 108, 109,
+256], [127, 200, 127, 201, 127], 4), ([46, 47, 48, 58, 65, 71, 97, 103, 256], [
+96, 202, 96, 203, 96, 203, 96, 203, 96], 5), ([85, 86, 108, 109, 117, 118, 256
+], [56, 198, 56, 197, 56, 199, 56], 3), ([76, 77, 85, 86, 117, 118, 256], [56,
+204, 56, 205, 56, 206, 56], 3), ([76, 77, 108, 109, 256], [127, 207, 127, 208,
+127], 4), ([85, 86, 108, 109, 117, 118, 256], [56, 205, 56, 204, 56, 206, 56],
+3), ([61, 62, 256], [52, 209, 52], 1), ([61, 62, 256], [52, 210, 52], 1), ([48,
+58, 65, 91, 95, 96, 97, 108, 109, 116, 117, 123, 256], [127, 128, 127, 128,
+127, 128, 127, 128, 211, 128, 212, 128, 127], 4), ([48, 58, 65, 91, 95, 96, 97,
+111, 112, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 213, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 214, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 215, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 109, 110, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 216, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 217, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 218, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 104, 105, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+219, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 220, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 221, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 222, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 115, 116, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 223, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 98, 123, 256], [59, 120, 59, 120, 59, 120, 59, 224, 120, 59], 2), ([48,
+58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [56, 134, 56, 134, 56, 134, 56,
+134, 225, 134, 56], 3), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [59,
+120, 59, 120, 59, 120, 59, 120, 226, 120, 59], 2), ([48, 58, 65, 91, 95, 96,
+97, 117, 118, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 227, 120, 59], 2
+), ([48, 58, 65, 91, 95, 96, 97, 115, 116, 123, 256], [59, 120, 59, 120, 59,
+120, 59, 120, 228, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 117, 118, 123,
+256], [59, 120, 59, 120, 59, 120, 59, 120, 229, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 230, 120,
+59], 2), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 231, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 114, 115,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 232, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+233, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 116, 117, 123, 256],
+[56, 134, 56, 134, 56, 134, 56, 134, 234, 134, 235, 134, 56], 3), ([48, 58, 65,
+91, 95, 96, 97, 110, 111, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 236,
+120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 103, 104, 115, 116, 117, 123, 256],
+[127, 128, 127, 128, 127, 128, 127, 128, 237, 128, 238, 239, 128, 127], 4), ([
+48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 240, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 103, 104, 122, 123,
+256], [127, 128, 127, 128, 127, 128, 127, 128, 241, 128, 242, 127], 4), ([48,
+58, 65, 91, 95, 96, 97, 98, 114, 115, 123, 256], [56, 134, 56, 134, 56, 134,
+56, 243, 134, 244, 134, 56], 3), ([48, 58, 65, 91, 95, 96, 97, 105, 106, 123,
+256], [59, 120, 59, 120, 59, 120, 59, 120, 245, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 112, 113, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 246, 120,
+59], 2), ([34, 35, 48, 58, 65, 91, 95, 96, 97, 123, 256], [59, 247, 59, 248,
+59, 248, 59, 248, 59, 248, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 105, 106,
+115, 116, 123, 256], [56, 134, 56, 134, 56, 134, 56, 134, 249, 134, 250, 134,
+56], 3), ([48, 58, 65, 91, 95, 96, 97, 105, 106, 108, 109, 123, 256], [56, 134,
+56, 134, 56, 134, 56, 134, 251, 134, 252, 134, 56], 3), ([48, 58, 65, 91, 95,
+96, 97, 105, 106, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 253, 120, 59
+], 2), ([10, 11, 34, 35, 92, 93, 256], [254, 56, 254, 255, 254, 256, 254], 3),
+([34, 35, 256], [52, 257, 52], 1), ([34, 35, 56, 57, 256], [59, 258, 59, 259,
+59], 2), ([10, 11, 34, 35, 48, 56, 92, 93, 256], [260, 127, 260, 261, 260, 262,
+260, 263, 260], 4), ([48, 58, 65, 71, 97, 103, 256], [52, 264, 52, 264, 52,
+264, 52], 1), ([34, 35, 39, 40, 48, 56, 63, 64, 92, 93, 97, 99, 102, 103, 110,
+111, 114, 115, 116, 117, 118, 119, 120, 121, 256], [56, 170, 56, 170, 56, 265,
+56, 170, 56, 170, 56, 170, 56, 170, 56, 170, 56, 170, 56, 170, 56, 170, 56,
+266, 56], 3), ([10, 11, 39, 40, 48, 56, 92, 93, 256], [267, 127, 267, 268, 267,
+269, 267, 270, 267], 4), ([48, 58, 65, 71, 97, 103, 256], [52, 271, 52, 271,
+52, 271, 52], 1), ([43, 44, 45, 46, 48, 58, 256], [59, 272, 59, 272, 59, 273,
+59], 2), ([43, 44, 45, 46, 48, 58, 256], [59, 274, 59, 274, 59, 275, 59], 2), (
+[48, 58, 256], [52, 276, 52], 1), ([48, 58, 70, 71, 76, 77, 102, 103, 108, 109,
+256], [96, 277, 96, 278, 96, 279, 96, 280, 96, 281, 96], 5), ([85, 86, 117,
+118, 256], [59, 282, 59, 283, 59], 2), ([76, 77, 256], [52, 284, 52], 1), ([
+108, 109, 256], [52, 284, 52], 1), ([48, 58, 65, 71, 97, 103, 256], [52, 285,
+52, 285, 52, 285, 52], 1), ([46, 47, 48, 58, 65, 71, 76, 77, 80, 81, 85, 86,
+97, 103, 108, 109, 112, 113, 117, 118, 256], [87, 286, 87, 287, 87, 287, 87,
+288, 87, 289, 87, 290, 87, 287, 87, 291, 87, 289, 87, 292, 87], 13), ([85, 86,
+117, 118, 256], [59, 293, 59, 294, 59], 2), ([76, 77, 256], [52, 295, 52], 1),
+([108, 109, 256], [52, 295, 52], 1), ([48, 58, 65, 91, 95, 96, 97, 105, 106,
+123, 256], [56, 134, 56, 134, 56, 134, 56, 134, 296, 134, 56], 3), ([48, 58,
+65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+297, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 298, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+109, 110, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 299, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 300, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [59,
+120, 59, 120, 59, 120, 59, 301, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 302, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [59, 120, 59, 120, 59, 120, 59, 303,
+120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [59, 120, 59,
+120, 59, 120, 59, 120, 304, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 117,
+118, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 305, 120, 59], 2), ([48,
+58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 306, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 307, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101,
+102, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 308, 120, 59], 2), ([48,
+58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 309, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 115, 116, 117, 123, 256],
+[56, 134, 56, 134, 56, 134, 56, 134, 310, 311, 134, 56], 3), ([48, 58, 65, 91,
+95, 96, 97, 98, 123, 256], [59, 120, 59, 120, 59, 120, 59, 312, 120, 59], 2), (
+[48, 58, 65, 91, 95, 96, 97, 98, 99, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 313, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59,
+120, 59, 120, 59, 120, 59, 120, 314, 120, 59], 2), ([48, 58, 65, 91, 95, 96,
+97, 109, 110, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 315, 120, 59], 2
+), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59,
+120, 59, 120, 316, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [
+59, 120, 59, 120, 59, 120, 59, 317, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+111, 112, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 318, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 105, 106, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 319, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 103, 104, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 320, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 105, 106, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 321, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 322, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 117, 118,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 323, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+324, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 325, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+101, 102, 123, 256], [56, 134, 56, 134, 56, 134, 56, 134, 326, 134, 56], 3), ([
+48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 327, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 117, 118, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 328, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 329, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 330, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 111, 112,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 331, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 105, 106, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+332, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 100, 101, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 333, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 98,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 334, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 108, 109, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 335, 120,
+59], 2), ([9, 13, 32, 33, 34, 35, 76, 77, 85, 86, 117, 118, 256], [149, 336,
+149, 336, 149, 160, 149, 161, 149, 162, 149, 163, 149], 6), ([34, 35, 39, 40,
+48, 56, 63, 64, 92, 93, 97, 99, 102, 103, 110, 111, 114, 115, 116, 117, 118,
+119, 120, 121, 256], [56, 337, 56, 337, 56, 338, 56, 337, 56, 337, 56, 337, 56,
+337, 56, 337, 56, 337, 56, 337, 56, 337, 56, 339, 56], 3), ([10, 11, 34, 35,
+48, 56, 92, 93, 256], [260, 127, 260, 261, 260, 340, 260, 263, 260], 4), ([10,
+11, 34, 35, 48, 58, 65, 71, 92, 93, 97, 103, 256], [260, 127, 260, 261, 260,
+341, 260, 341, 260, 263, 260, 341, 260], 4), ([10, 11, 39, 40, 48, 56, 92, 93,
+256], [267, 127, 267, 268, 267, 342, 267, 270, 267], 4), ([48, 58, 65, 71, 97,
+103, 256], [52, 343, 52, 343, 52, 343, 52], 1), ([10, 11, 39, 40, 48, 56, 92,
+93, 256], [267, 127, 267, 268, 267, 344, 267, 270, 267], 4), ([10, 11, 39, 40,
+48, 58, 65, 71, 92, 93, 97, 103, 256], [267, 127, 267, 268, 267, 345, 267, 345,
+267, 270, 267, 345, 267], 4), ([48, 58, 256], [52, 346, 52], 1), ([48, 58, 70,
+71, 76, 77, 102, 103, 108, 109, 256], [96, 347, 96, 348, 96, 349, 96, 350, 96,
+351, 96], 5), ([48, 58, 256], [52, 352, 52], 1), ([48, 58, 70, 71, 76, 77, 102,
+103, 108, 109, 256], [96, 353, 96, 354, 96, 355, 96, 356, 96, 357, 96], 5), ([
+48, 58, 65, 71, 80, 81, 97, 103, 112, 113, 256], [59, 358, 59, 358, 59, 359,
+59, 358, 59, 359, 59], 2), ([48, 58, 65, 71, 80, 81, 97, 103, 112, 113, 256], [
+59, 358, 59, 358, 59, 360, 59, 358, 59, 360, 59], 2), ([76, 77, 85, 86, 117,
+118, 256], [56, 361, 56, 362, 56, 363, 56], 3), ([43, 44, 45, 46, 48, 58, 256],
+[59, 364, 59, 364, 59, 365, 59], 2), ([76, 77, 108, 109, 256], [127, 366, 127,
+367, 127], 4), ([85, 86, 108, 109, 117, 118, 256], [56, 362, 56, 361, 56, 363,
+56], 3), ([48, 58, 65, 91, 95, 96, 97, 103, 104, 123, 256], [56, 134, 56, 134,
+56, 134, 56, 134, 368, 134, 56], 3), ([48, 58, 65, 91, 95, 96, 97, 109, 110,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 369, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 108, 109, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+370, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 112, 113, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 371, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+101, 102, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 372, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 103, 104, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 373, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 374, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 375, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 376, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 110, 111,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 377, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 107, 108, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+378, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 379, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+105, 106, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 380, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 117, 118, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 381, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 382, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 383, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 384, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 110, 111,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 385, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 115, 116, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+386, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 387, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 388, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 389, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 390, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 111, 112, 123, 256], [56, 134, 56, 134, 56, 391, 56, 134, 392, 134, 56
+], 3), ([48, 58, 65, 91, 95, 96, 97, 105, 106, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 393, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 99, 100,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 394, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 99, 100, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+395, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 100, 101, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 396, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+110, 111, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 397, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 103, 104, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 398, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 399, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 400, 120, 59
+], 2), ([10, 11, 34, 35, 48, 56, 92, 93, 256], [401, 127, 401, 402, 401, 403,
+401, 404, 401], 4), ([48, 58, 65, 71, 97, 103, 256], [52, 405, 52, 405, 52,
+405, 52], 1), ([10, 11, 39, 40, 48, 56, 92, 93, 256], [267, 127, 267, 268, 267,
+344, 267, 270, 267], 4), ([10, 11, 39, 40, 48, 58, 65, 71, 92, 93, 97, 103, 256
+], [267, 127, 267, 268, 267, 406, 267, 406, 267, 270, 267, 406, 267], 4), ([43,
+44, 45, 46, 48, 58, 256], [59, 407, 59, 407, 59, 408, 59], 2), ([43, 44, 45,
+46, 48, 58, 256], [59, 409, 59, 409, 59, 410, 59], 2), ([85, 86, 117, 118, 256
+], [59, 411, 59, 412, 59], 2), ([48, 58, 256], [52, 413, 52], 1), ([48, 58, 70,
+71, 76, 77, 102, 103, 108, 109, 256], [96, 414, 96, 415, 96, 416, 96, 417, 96,
+418, 96], 5), ([76, 77, 256], [52, 419, 52], 1), ([108, 109, 256], [52, 419, 52
+], 1), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [56, 134, 56, 134,
+56, 134, 56, 134, 420, 134, 56], 3), ([48, 58, 65, 91, 95, 96, 97, 105, 106,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 421, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 108, 109, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+422, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 423, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+105, 106, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 424, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 425, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 105, 106, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 426, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 98, 123, 256], [59, 120, 59, 120, 59, 120, 59, 427, 120, 59], 2), ([48,
+58, 65, 91, 95, 96, 97, 99, 100, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 428, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [59,
+120, 59, 120, 59, 120, 59, 120, 429, 120, 59], 2), ([48, 58, 65, 91, 95, 96,
+97, 108, 109, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 430, 120, 59], 2
+), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59,
+120, 59, 120, 431, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123,
+256], [59, 120, 59, 120, 59, 120, 59, 120, 432, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 433, 120,
+59], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 434, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 105, 106,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 435, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 110, 111, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+436, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 100, 101, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 437, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 438, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 439, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 99, 100, 123, 256], [
+59, 120, 59, 120, 59, 120, 59, 120, 440, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 441, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 104, 105, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 442, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 443, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 110, 111, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+444, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 105, 106, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 445, 120, 59], 2), ([10, 11, 34, 35, 48, 56, 92, 93,
+256], [401, 127, 401, 402, 401, 446, 401, 404, 401], 4), ([10, 11, 34, 35, 48,
+58, 65, 71, 92, 93, 97, 103, 256], [401, 127, 401, 402, 401, 447, 401, 447,
+401, 404, 401, 447, 401], 4), ([48, 58, 256], [52, 448, 52], 1), ([48, 58, 70,
+71, 76, 77, 102, 103, 108, 109, 256], [96, 449, 96, 450, 96, 451, 96, 452, 96,
+453, 96], 5), ([48, 58, 256], [52, 454, 52], 1), ([48, 58, 70, 71, 76, 77, 102,
+103, 108, 109, 256], [96, 455, 96, 456, 96, 457, 96, 458, 96, 459, 96], 5), ([
+48, 58, 65, 91, 95, 96, 97, 98, 111, 112, 123, 256], [56, 134, 56, 134, 56,
+134, 56, 460, 134, 461, 134, 56], 3), ([48, 58, 65, 91, 95, 96, 97, 99, 100,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 462, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+463, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 105, 106, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 464, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97,
+110, 111, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 465, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 117, 118, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 466, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 99, 100, 123, 256], [
+59, 120, 59, 120, 59, 120, 59, 120, 467, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 100, 101, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 468, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 123, 256], [59, 120, 59, 120, 59, 469, 59,
+120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 117, 118, 123, 256], [59, 120, 59,
+120, 59, 120, 59, 120, 470, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 116,
+117, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 471, 120, 59], 2), ([48,
+58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 472, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 99, 100, 123, 256], [59,
+120, 59, 120, 59, 120, 59, 120, 473, 120, 59], 2), ([48, 58, 65, 91, 95, 96,
+97, 102, 103, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 474, 120, 59], 2
+), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59, 120, 59,
+120, 59, 120, 475, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123,
+256], [59, 120, 59, 120, 59, 120, 59, 120, 476, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 115, 116, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 477, 120,
+59], 2), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 478, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 120, 121,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 479, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 99, 100, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+480, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [59, 120, 59,
+120, 59, 120, 59, 481, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 114, 115,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 482, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 123, 256], [59, 120, 59, 120, 59, 483, 59, 120, 59], 2), ([
+48, 58, 65, 91, 95, 96, 97, 123, 256], [59, 120, 59, 120, 59, 484, 59, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 123, 256], [59, 120, 59, 120, 59, 485, 59,
+120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120, 59,
+120, 59, 120, 59, 120, 486, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 114,
+115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 487, 120, 59], 2), ([48,
+58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [59, 120, 59, 120, 59, 120, 59,
+120, 488, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 100, 101, 123, 256], [59,
+120, 59, 120, 59, 120, 59, 120, 489, 120, 59], 2), ([48, 58, 65, 91, 95, 96,
+97, 101, 102, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 490, 120, 59], 2
+), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [59, 120, 59, 120, 59,
+120, 59, 120, 491, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123,
+256], [59, 120, 59, 120, 59, 120, 59, 120, 492, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 98, 123, 256], [59, 120, 59, 120, 59, 120, 59, 493, 120, 59], 2), (
+[48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [59, 120, 59, 120, 59, 120,
+59, 120, 494, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 121, 122, 123, 256],
+[59, 120, 59, 120, 59, 120, 59, 120, 495, 120, 59], 2), ([48, 58, 65, 91, 95,
+96, 97, 115, 116, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 496, 120, 59
+], 2), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 497, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 115, 116,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 498, 120, 59], 2), ([48, 58,
+65, 91, 95, 96, 97, 99, 100, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120,
+499, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [59, 120,
+59, 120, 59, 120, 59, 120, 500, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 98,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 501, 120, 59], 2), ([48, 58, 65, 91,
+95, 96, 97, 114, 115, 123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 502, 120,
+59], 2), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [59, 120, 59, 120,
+59, 120, 59, 120, 503, 120, 59], 2), ([48, 58, 65, 91, 95, 96, 97, 116, 117,
+123, 256], [59, 120, 59, 120, 59, 120, 59, 120, 504, 120, 59], 2)], [(0, []), (
+1, [(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1, 0),
+(3, 1), (2, 1, 2), (3, 1), (2, 1, 4), (3, 1), (2, 1, 6), (3, 1), (2, 1, 8), (3,
+1), (2, 1, 10), (3, 1), (2, 1, 12), (3, 1), (2, 1, 14), (3, 1), (2, 1, 16), (3,
+1), (2, 1, 18), (3, 1), (2, 1, 20), (3, 1), (2, 1, 22), (3, 1), (2, 1, 24), (3,
+1), (2, 1, 26), (3, 1), (2, 1, 28), (3, 1), (2, 1, 30), (3, 1), (2, 1, 32), (3,
+1), (2, 1, 34), (3, 1), (2, 1, 36), (3, 1), (2, 1, 38), (3, 1), (2, 1, 40), (3,
+1), (2, 1, 42), (3, 1), (2, 1, 44), (3, 1), (2, 1, 46), (3, 1), (2, 1, 48), (3,
+1), (2, 1, 50), (3, 1), (2, 1, 52), (3, 1), (2, 1, 54), (3, 1), (2, 1, 56), (3,
+1), (2, 1, 58), (3, 1), (2, 1, 60), (3, 1), (2, 1, 62), (3, 1), (2, 1, 64), (3,
+1), (2, 1, 66), (3, 1), (2, 1, 68), (3, 1), (2, 1, 70), (3, 1), (2, 1, 72), (3,
+1), (2, 1, 74), (3, 1), (2, 1, 76), (3, 1), (2, 1, 78), (3, 1), (2, 1, 80), (3,
+1), (2, 1, 82), (3, 1), (2, 1, 84), (3, 1), (2, 1, 86), (3, 1), (2, 1, 88), (3,
+1), (2, 1, 90), (3, 1), (2, 1, 92), (3, 1), (2, 1, 94), (3, 1), (2, 1, 96), (2,
+1, 98), (2, 1, 100), (3, 1), (2, 1, 104), (2, 1, 106), (2, 1, 108), (2, 1, 110
+), (3, 1), (2, 1, 130), (2, 1, 132), (2, 1, 134), (3, 1), (2, 1, 154), (2, 1,
+156), (3, 1), (2, 1, 176), (2, 1, 178), (1, 1), (2, 1, 180), (2, 1, 182), (1, 1
+), (1, 1), (3, 1), (3, 1), (3, 1), (3, 1), (2, 1, 192), (2, 1, 194), (2, 1, 196
+), (3, 1), (2, 1, 208), (2, 1, 210), (1, 1), (2, 1, 212), (3, 1), (3, 1), (2,
+1, 226), (2, 1, 228), (2, 1, 230), (3, 1), (2, 1, 242), (2, 1, 244), (2, 1, 246
+), (2, 1, 248), (3, 1), (2, 1, 262), (2, 1, 264), (2, 1, 266), (2, 1, 268), (3,
+1), (2, 1, 284), (2, 1, 286), (2, 1, 288), (2, 1, 290), (3, 1), (2, 1, 304), (
+2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1), (1, 1), (3, 1), (
+3, 1), (3, 1), (3, 1), (3, 1), (2, 1, 322), (3, 1), (2, 1, 324), (3, 1), (2, 1,
+326), (3, 1), (2, 1, 328), (3, 1), (2, 1, 330), (3, 1), (2, 1, 332), (3, 1), (
+2, 1, 334), (3, 1), (2, 1, 336), (3, 1), (2, 1, 338), (3, 1), (2, 1, 340), (3,
+1), (2, 1, 342), (3, 1), (2, 1, 344), (3, 1), (2, 1, 346), (3, 1), (2, 1, 348),
+(3, 1), (2, 1, 350), (3, 1), (2, 1, 352), (3, 1), (2, 1, 354), (3, 1), (2, 1,
+356), (3, 1), (2, 1, 358), (3, 1), (2, 1, 360), (3, 1), (2, 1, 362), (3, 1), (
+2, 1, 364), (3, 1), (2, 1, 366), (3, 1), (2, 1, 368), (2, 1, 370), (1, 1), (3,
+1), (3, 1), (2, 1, 372), (2, 1, 374), (1, 1), (3, 1), (3, 1), (2, 1, 376), (3,
+1), (2, 1, 378), (3, 1), (2, 1, 380), (3, 1), (2, 1, 382), (3, 1), (2, 1, 384),
+(3, 1), (2, 1, 386), (2, 1, 388), (1, 1), (3, 1), (3, 1), (2, 1, 390), (2, 1,
+392), (1, 1), (3, 1), (3, 1), (2, 1, 394), (3, 1), (2, 1, 396), (3, 1), (2, 1,
+398), (3, 1), (2, 1, 400), (3, 1), (2, 1, 402), (3, 1), (2, 1, 404), (3, 1), (
+2, 1, 406), (3, 1), (2, 1, 408), (3, 1), (2, 1, 410), (3, 1), (2, 1, 412), (3,
+1), (2, 1, 414), (3, 1), (2, 1, 416), (3, 1), (2, 1, 418), (3, 1), (2, 1, 420),
+(3, 1), (2, 1, 422), (2, 1, 424), (3, 1), (2, 1, 426), (3, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1, 0), (0, 1), (2, 1, 2), (0, 1), (
+2, 1, 4), (0, 1), (2, 1, 6), (0, 1), (2, 1, 8), (0, 1), (2, 1, 10), (0, 1), (2,
+1, 12), (0, 1), (2, 1, 14), (0, 1), (2, 1, 16), (0, 1), (2, 1, 18), (0, 1), (2,
+1, 20), (0, 1), (2, 1, 22), (0, 1), (2, 1, 24), (0, 1), (2, 1, 26), (0, 1), (2,
+1, 28), (0, 1), (2, 1, 30), (0, 1), (2, 1, 32), (0, 1), (2, 1, 34), (0, 1), (2,
+1, 36), (0, 1), (2, 1, 38), (0, 1), (2, 1, 40), (0, 1), (2, 1, 42), (0, 1), (2,
+1, 44), (0, 1), (2, 1, 46), (0, 1), (2, 1, 48), (0, 1), (2, 1, 50), (0, 1), (2,
+1, 52), (0, 1), (2, 1, 54), (0, 1), (2, 1, 56), (0, 1), (2, 1, 58), (0, 1), (2,
+1, 60), (0, 1), (2, 1, 62), (0, 1), (2, 1, 64), (0, 1), (2, 1, 66), (0, 1), (2,
+1, 68), (0, 1), (2, 1, 70), (0, 1), (2, 1, 72), (0, 1), (2, 1, 74), (0, 1), (2,
+1, 76), (0, 1), (2, 1, 78), (0, 1), (2, 1, 80), (0, 1), (2, 1, 82), (0, 1), (2,
+1, 84), (0, 1), (2, 1, 86), (0, 1), (2, 1, 88), (0, 1), (2, 1, 90), (0, 1), (2,
+1, 92), (0, 1), (2, 1, 94), (0, 1), (2, 1, 96), (2, 1, 98), (2, 1, 100), (0, 1
+), (2, 1, 104), (2, 1, 106), (2, 1, 108), (2, 1, 110), (0, 1), (2, 1, 130), (2,
+1, 132), (2, 1, 134), (0, 1), (2, 1, 154), (2, 1, 156), (0, 1), (2, 1, 176), (
+2, 1, 178), (1, 1), (2, 1, 180), (2, 1, 182), (1, 1), (1, 1), (0, 1), (0, 1), (
+0, 1), (0, 1), (2, 1, 192), (2, 1, 194), (2, 1, 196), (0, 1), (2, 1, 208), (2,
+1, 210), (1, 1), (2, 1, 212), (0, 1), (0, 1), (2, 1, 226), (2, 1, 228), (2, 1,
+230), (0, 1), (2, 1, 242), (2, 1, 244), (2, 1, 246), (2, 1, 248), (0, 1), (2,
+1, 262), (2, 1, 264), (2, 1, 266), (2, 1, 268), (0, 1), (2, 1, 284), (2, 1, 286
+), (2, 1, 288), (2, 1, 290), (0, 1), (2, 1, 304), (2, 1, 306), (1, 1), (2, 1,
+308), (2, 1, 310), (1, 1), (1, 1), (1, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0,
+1), (2, 1, 322), (0, 1), (2, 1, 324), (0, 1), (2, 1, 326), (0, 1), (2, 1, 328),
+(0, 1), (2, 1, 330), (0, 1), (2, 1, 332), (0, 1), (2, 1, 334), (0, 1), (2, 1,
+336), (0, 1), (2, 1, 338), (0, 1), (2, 1, 340), (0, 1), (2, 1, 342), (0, 1), (
+2, 1, 344), (0, 1), (2, 1, 346), (0, 1), (2, 1, 348), (0, 1), (2, 1, 350), (0,
+1), (2, 1, 352), (0, 1), (2, 1, 354), (0, 1), (2, 1, 356), (0, 1), (2, 1, 358),
+(0, 1), (2, 1, 360), (0, 1), (2, 1, 362), (0, 1), (2, 1, 364), (0, 1), (2, 1,
+366), (0, 1), (2, 1, 368), (2, 1, 370), (1, 1), (0, 1), (0, 1), (2, 1, 372), (
+2, 1, 374), (1, 1), (0, 1), (0, 1), (2, 1, 376), (0, 1), (2, 1, 378), (0, 1), (
+2, 1, 380), (0, 1), (2, 1, 382), (0, 1), (2, 1, 384), (0, 1), (2, 1, 386), (2,
+1, 388), (1, 1), (0, 1), (0, 1), (2, 1, 390), (2, 1, 392), (1, 1), (0, 1), (0,
+1), (2, 1, 394), (0, 1), (2, 1, 396), (0, 1), (2, 1, 398), (0, 1), (2, 1, 400),
+(0, 1), (2, 1, 402), (0, 1), (2, 1, 404), (0, 1), (2, 1, 406), (0, 1), (2, 1,
+408), (0, 1), (2, 1, 410), (0, 1), (2, 1, 412), (0, 1), (2, 1, 414), (0, 1), (
+2, 1, 416), (0, 1), (2, 1, 418), (0, 1), (2, 1, 420), (0, 1), (2, 1, 422), (2,
+1, 424), (0, 1), (2, 1, 426), (0, 1)]), (0, [(1, 120), (0, 119), (2, 1, 427), (
+0, 120), (2, 1, 427), (3, 1)]), (2, [(1, 120), (0, 118), (2, 1, 425), (1, 1), (
+2, 1, 424), (3, 1), (2, 1, 423), (0, 1), (2, 1, 427), (0, 119), (2, 1, 425), (
+1, 1), (2, 1, 424), (0, 1), (2, 1, 423), (3, 1), (2, 1, 427), (0, 1)]), (2, [(
+1, 120), (0, 118), (2, 1, 425), (1, 1), (2, 1, 424), (3, 1), (2, 1, 423), (0,
+120), (2, 1, 425), (1, 1), (2, 1, 424), (0, 1), (2, 1, 423), (3, 1), (0, 1)]),
+(3, [(1, 120), (0, 89), (3, 1), (0, 16), (2, 1, 399), (0, 13), (2, 1, 427), (0,
+107), (2, 1, 399), (3, 1), (0, 12), (2, 1, 427), (0, 1)]), (4, [(1, 120), (0,
+67), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0,
+51), (2, 1, 427), (0, 68), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (
+2, 1, 316), (0, 53), (2, 1, 427), (3, 1)]), (5, [(1, 120), (0, 75), (3, 1), (0,
+18), (3, 1), (0, 17), (2, 1, 411), (0, 7), (2, 1, 427), (0, 113), (2, 1, 411),
+(3, 1), (0, 6), (2, 1, 427), (0, 1)]), (6, [(1, 120), (0, 76), (3, 1), (0, 7),
+(3, 1), (0, 20), (2, 1, 397), (0, 14), (2, 1, 427), (0, 106), (2, 1, 397), (3,
+1), (0, 13), (2, 1, 427), (0, 1)]), (7, [(1, 120), (0, 55), (2, 1, 184), (1, 1
+), (3, 1), (2, 1, 186), (2, 1, 188), (3, 1), (0, 63), (2, 1, 427), (0, 56), (2,
+1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 64), (2, 1, 427), (3, 1)
+]), (0, [(1, 120), (0, 98), (2, 1, 383), (0, 21), (2, 1, 427), (0, 99), (2, 1,
+383), (3, 1), (0, 20), (2, 1, 427), (0, 1)]), (0, [(1, 120), (0, 99), (2, 1,
+385), (0, 20), (2, 1, 427), (0, 100), (2, 1, 385), (3, 1), (0, 19), (2, 1, 427
+), (0, 1)]), (8, [(1, 120), (0, 73), (3, 1), (0, 36), (2, 1, 407), (0, 9), (2,
+1, 427), (0, 111), (2, 1, 407), (3, 1), (0, 8), (2, 1, 427), (0, 1)]), (9, [(1,
+120), (0, 71), (3, 1), (0, 9), (3, 1), (0, 27), (2, 1, 405), (0, 10), (2, 1,
+427), (0, 110), (2, 1, 405), (3, 1), (0, 9), (2, 1, 427), (0, 1)]), (0, [(1,
+120), (0, 95), (2, 1, 377), (0, 24), (2, 1, 427), (0, 96), (2, 1, 377), (3, 1),
+(0, 23), (2, 1, 427), (0, 1)]), (10, [(1, 120), (0, 72), (3, 1), (0, 9), (3, 2
+), (0, 24), (2, 1, 403), (0, 11), (2, 1, 427), (0, 109), (2, 1, 403), (3, 1), (
+0, 10), (2, 1, 427), (0, 1)]), (11, [(1, 120), (0, 58), (2, 1, 214), (3, 1), (
+0, 9), (3, 1), (0, 35), (2, 1, 395), (0, 15), (2, 1, 427), (0, 59), (2, 1, 214
+), (0, 46), (2, 1, 395), (3, 1), (0, 14), (2, 1, 427), (0, 1)]), (12, [(1, 120
+), (3, 2), (0, 72), (3, 1), (0, 36), (2, 1, 409), (0, 8), (2, 1, 427), (0, 112
+), (2, 1, 409), (3, 1), (0, 7), (2, 1, 427), (0, 1)]), (13, [(1, 120), (0, 49),
+(3, 1), (0, 1), (1, 1), (2, 1, 158), (3, 1), (1, 1), (2, 1, 160), (2, 1, 162),
+(1, 1), (2, 1, 164), (2, 1, 166), (1, 1), (3, 2), (2, 1, 170), (2, 1, 172), (1,
+1), (1, 1), (1, 1), (3, 4), (2, 1, 157), (2, 1, 155), (0, 5), (2, 1, 197), (1,
+1), (2, 1, 196), (3, 1), (2, 1, 198), (2, 1, 200), (3, 1), (2, 1, 213), (1, 1),
+(2, 1, 212), (3, 2), (0, 1), (2, 1, 231), (1, 1), (2, 1, 230), (3, 5), (0, 56),
+(2, 1, 427), (0, 52), (1, 1), (2, 1, 158), (0, 1), (1, 1), (2, 1, 160), (2, 1,
+162), (1, 1), (2, 1, 164), (2, 1, 166), (1, 1), (0, 2), (2, 1, 170), (2, 1, 172
+), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 157), (2, 1, 155), (3, 1), (0, 4), (
+2, 1, 197), (1, 1), (2, 1, 196), (0, 1), (2, 1, 198), (2, 1, 200), (0, 1), (2,
+1, 213), (1, 1), (2, 1, 212), (0, 3), (2, 1, 231), (1, 1), (2, 1, 230), (0, 61
+), (2, 1, 427), (0, 1)]), (14, [(1, 120), (0, 50), (2, 1, 135), (1, 1), (2, 1,
+136), (3, 1), (1, 1), (2, 1, 138), (2, 1, 140), (1, 1), (2, 1, 142), (2, 1, 144
+), (1, 1), (3, 2), (2, 1, 148), (2, 1, 150), (1, 1), (1, 1), (1, 1), (3, 4), (
+2, 1, 133), (2, 1, 131), (0, 6), (2, 1, 197), (1, 1), (2, 1, 196), (3, 1), (2,
+1, 198), (2, 1, 200), (3, 1), (2, 1, 213), (1, 1), (2, 1, 212), (3, 2), (0, 1),
+(2, 1, 231), (1, 1), (2, 1, 230), (3, 2), (0, 59), (2, 1, 427), (0, 51), (2, 1,
+135), (1, 1), (2, 1, 136), (0, 1), (1, 1), (2, 1, 138), (2, 1, 140), (1, 1), (
+2, 1, 142), (2, 1, 144), (1, 1), (0, 2), (2, 1, 148), (2, 1, 150), (1, 1), (1,
+1), (1, 1), (0, 4), (2, 1, 133), (2, 1, 131), (3, 1), (0, 5), (2, 1, 197), (1,
+1), (2, 1, 196), (0, 1), (2, 1, 198), (2, 1, 200), (0, 1), (2, 1, 213), (1, 1),
+(2, 1, 212), (0, 3), (2, 1, 231), (1, 1), (2, 1, 230), (0, 61), (2, 1, 427), (
+0, 1)]), (15, [(1, 120), (0, 96), (2, 1, 379), (0, 7), (3, 1), (0, 15), (2, 1,
+427), (0, 97), (2, 1, 379), (3, 1), (0, 22), (2, 1, 427), (0, 1)]), (0, [(1,
+120), (0, 90), (2, 1, 367), (0, 29), (2, 1, 427), (0, 91), (2, 1, 367), (3, 1),
+(0, 28), (2, 1, 427), (0, 1)]), (16, [(1, 120), (0, 70), (3, 1), (0, 9), (3, 1
+), (0, 5), (3, 1), (0, 5), (3, 1), (0, 8), (3, 1), (0, 11), (2, 1, 413), (0, 6
+), (2, 1, 427), (0, 114), (2, 1, 413), (3, 1), (0, 5), (2, 1, 427), (0, 1)]), (
+17, [(1, 120), (0, 88), (3, 1), (0, 8), (2, 1, 381), (0, 22), (2, 1, 427), (0,
+98), (2, 1, 381), (3, 1), (0, 21), (2, 1, 427), (0, 1)]), (18, [(1, 120), (0,
+69), (3, 1), (0, 9), (3, 1), (0, 7), (3, 1), (0, 26), (2, 1, 415), (0, 5), (2,
+1, 427), (0, 115), (2, 1, 415), (3, 1), (0, 4), (2, 1, 427), (0, 1)]), (0, [(1,
+120), (0, 117), (2, 1, 421), (0, 2), (2, 1, 427), (0, 118), (2, 1, 421), (3, 1
+), (0, 1), (2, 1, 427), (0, 1)]), (19, [(1, 120), (0, 48), (2, 1, 101), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2,
+1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70),
+(2, 1, 427), (0, 1)]), (20, [(1, 120), (0, 48), (2, 1, 101), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 6), (2, 1, 183), (2, 1, 181), (3, 1), (
+0, 11), (2, 1, 311), (2, 1, 309), (3, 1), (0, 52), (2, 1, 427), (0, 49), (2, 1,
+101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 5), (2,
+1, 183), (2, 1, 181), (0, 12), (2, 1, 311), (2, 1, 309), (0, 53), (2, 1, 427),
+(0, 1)]), (20, [(1, 120), (0, 48), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 5), (2, 1, 183), (2, 1, 181), (3, 1), (0, 11), (2,
+1, 311), (2, 1, 309), (3, 1), (0, 53), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 4), (2, 1, 183), (
+2, 1, 181), (0, 12), (2, 1, 311), (2, 1, 309), (0, 54), (2, 1, 427), (0, 1)]),
+(0, [(1, 120), (0, 100), (2, 1, 389), (2, 1, 387), (0, 19), (2, 1, 427), (0,
+101), (2, 1, 389), (2, 1, 387), (3, 1), (0, 18), (2, 1, 427), (0, 1)]), (0, [(
+1, 120), (0, 102), (2, 1, 393), (2, 1, 391), (0, 17), (2, 1, 427), (0, 103), (
+2, 1, 393), (2, 1, 391), (3, 1), (0, 16), (2, 1, 427), (0, 1)]), (21, [(1, 120
+), (0, 77), (3, 1), (0, 37), (2, 1, 417), (0, 4), (2, 1, 427), (0, 116), (2, 1,
+417), (3, 1), (0, 3), (2, 1, 427), (0, 1)]), (22, [(1, 120), (0, 36), (3, 11),
+(0, 1), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0,
+71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (23, [(1, 120), (0, 2),
+(3, 1), (0, 45), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1,
+97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (24, [(1, 120),
+(0, 3), (3, 1), (0, 44), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99),
+(2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102), (
+0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (25, [(
+1, 120), (0, 4), (3, 4), (0, 40), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (
+26, [(1, 120), (0, 8), (3, 3), (0, 37), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1),
+(2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0,
+1)]), (27, [(1, 120), (0, 11), (3, 3), (0, 34), (2, 1, 101), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1,
+427), (0, 1)]), (28, [(1, 120), (0, 14), (3, 2), (0, 32), (2, 1, 101), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2,
+1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70),
+(2, 1, 427), (0, 1)]), (29, [(1, 120), (0, 16), (3, 1), (0, 31), (2, 1, 101), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0,
+49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1),
+(0, 70), (2, 1, 427), (0, 1)]), (30, [(1, 120), (0, 17), (3, 3), (0, 28), (2,
+1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1,
+427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (31, [(1, 120), (0, 20), (3, 1), (0,
+27), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71),
+(2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2,
+1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (32, [(1, 120), (0, 21), (3, 3
+), (0, 24), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (33, [(1, 120), (0, 24
+), (3, 6), (0, 17), (3, 1), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]), (34, [(
+1, 120), (0, 30), (3, 1), (0, 17), (2, 1, 101), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2, 1, 101), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70), (2, 1, 427), (0, 1)]
+), (35, [(1, 120), (0, 31), (3, 2), (0, 15), (2, 1, 101), (1, 1), (2, 1, 102),
+(3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 183), (2, 1, 181), (3, 1), (0,
+10), (3, 1), (2, 1, 311), (2, 1, 309), (3, 1), (0, 54), (2, 1, 427), (0, 49), (
+2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 3
+), (2, 1, 183), (2, 1, 181), (0, 12), (2, 1, 311), (2, 1, 309), (0, 55), (2, 1,
+427), (0, 1)]), (36, [(1, 120), (0, 33), (3, 2), (0, 13), (2, 1, 101), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0, 49), (2,
+1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 70),
+(2, 1, 427), (0, 1)]), (37, [(1, 120), (0, 35), (3, 1), (0, 12), (2, 1, 101), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 71), (2, 1, 427), (0,
+49), (2, 1, 101), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1),
+(0, 70), (2, 1, 427), (0, 1)]), (0, [(1, 120), (0, 91), (2, 1, 371), (2, 1, 369
+), (0, 28), (2, 1, 427), (0, 92), (2, 1, 371), (2, 1, 369), (3, 1), (0, 27), (
+2, 1, 427), (0, 1)]), (38, [(1, 120), (0, 78), (3, 1), (0, 6), (3, 1), (0, 30),
+(2, 1, 419), (0, 3), (2, 1, 427), (0, 117), (2, 1, 419), (3, 1), (0, 2), (2, 1,
+427), (0, 1)]), (0, [(1, 120), (0, 93), (2, 1, 375), (2, 1, 373), (0, 26), (2,
+1, 427), (0, 94), (2, 1, 375), (2, 1, 373), (3, 1), (0, 25), (2, 1, 427), (0, 1
+)]), (0, [(1, 120), (0, 107), (2, 1, 401), (0, 12), (2, 1, 427), (0, 108), (2,
+1, 401), (3, 1), (0, 11), (2, 1, 427), (0, 1)]), (0, [(1, 1), (0, 2), (3, 1)]),
+(2, [(1, 1), (2, 1, 425), (1, 1), (2, 1, 424), (3, 1), (2, 1, 423), (0, 1), (2,
+1, 425), (1, 1), (2, 1, 424), (0, 1), (2, 1, 423), (3, 1), (0, 1)]), (0, [(1, 1
+), (2, 1, 365), (0, 1), (2, 1, 365), (3, 1), (0, 1)]), (4, [(1, 3), (2, 1, 313
+), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 2
+), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316),
+(0, 4), (3, 1)]), (0, [(1, 3), (0, 6), (3, 1)]), (39, [(1, 3), (0, 2), (1, 1),
+(2, 1, 320), (3, 1), (2, 1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2,
+1, 310), (1, 1), (1, 1), (1, 1), (3, 5), (2, 1, 305), (0, 3), (1, 1), (2, 1,
+320), (0, 1), (2, 1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310
+), (1, 1), (1, 1), (1, 1), (0, 5), (2, 1, 305), (3, 1), (0, 1)]), (40, [(1, 3),
+(0, 1), (2, 1, 318), (1, 1), (1, 1), (3, 3), (0, 2), (2, 1, 318), (1, 1), (1, 1
+), (0, 4), (3, 1)]), (0, [(1, 2), (0, 4), (3, 1)]), (0, [(1, 2), (2, 1, 337), (
+0, 2), (2, 1, 337), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, 375), (2, 1,
+373), (0, 2), (2, 1, 375), (2, 1, 373), (3, 1), (0, 1)]), (0, [(1, 2), (0, 1),
+(2, 1, 355), (0, 2), (2, 1, 355), (3, 1), (0, 1)]), (0, [(1, 2), (2, 1, 339), (
+0, 2), (2, 1, 339), (3, 1), (0, 2)]), (41, [(1, 2), (2, 1, 185), (1, 1), (2, 1,
+184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (0, 1), (2, 1, 185), (
+1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 3), (3, 1)]),
+(42, [(1, 2), (0, 1), (2, 1, 190), (1, 1), (1, 1), (3, 3), (0, 1), (2, 1, 190),
+(1, 1), (1, 1), (0, 3), (3, 1)]), (0, [(1, 1), (2, 1, 333), (0, 1), (2, 1, 333
+), (3, 1), (0, 1)]), (0, [(1, 2), (0, 1), (2, 1, 349), (0, 2), (2, 1, 349), (3,
+1), (0, 1)]), (0, [(1, 2), (2, 1, 329), (0, 2), (2, 1, 329), (3, 1), (0, 2)]),
+(0, [(1, 3), (0, 1), (2, 1, 351), (0, 3), (2, 1, 351), (3, 1), (0, 2)]), (0, [(
+1, 3), (2, 1, 331), (0, 3), (2, 1, 331), (3, 1), (0, 3)]), (0, [(1, 3), (0, 2),
+(2, 1, 353), (0, 3), (2, 1, 353), (3, 1), (0, 1)]), (43, [(1, 2), (0, 1), (3, 1
+), (0, 2), (3, 1)]), (44, [(1, 2), (2, 1, 215), (1, 1), (2, 1, 214), (3, 1), (
+1, 1), (2, 1, 216), (2, 1, 218), (3, 1), (1, 1), (2, 1, 222), (2, 1, 224), (1,
+1), (1, 1), (1, 1), (3, 4), (2, 1, 211), (2, 1, 209), (0, 2), (2, 1, 215), (1,
+1), (2, 1, 214), (0, 1), (1, 1), (2, 1, 216), (2, 1, 218), (0, 1), (1, 1), (2,
+1, 222), (2, 1, 224), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 211), (2, 1, 209),
+(3, 1), (0, 2)]), (0, [(1, 3), (2, 1, 1), (0, 3), (2, 1, 1), (3, 1), (0, 3)]),
+(45, [(1, 3), (0, 1), (1, 1), (3, 1), (2, 1, 3), (0, 3), (1, 1), (0, 1), (2, 1,
+3), (3, 1), (0, 2)]), (0, [(1, 3), (0, 2), (2, 1, 335), (0, 3), (2, 1, 335), (
+3, 1), (0, 1)]), (0, [(1, 17), (0, 34), (3, 1)]), (46, [(1, 17), (0, 11), (2,
+1, 214), (3, 1), (0, 1), (1, 1), (2, 1, 232), (2, 1, 234), (3, 1), (1, 1), (2,
+1, 238), (2, 1, 240), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 229), (2, 1, 227),
+(0, 15), (2, 1, 214), (0, 2), (1, 1), (2, 1, 232), (2, 1, 234), (0, 1), (1, 1),
+(2, 1, 238), (2, 1, 240), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 229), (2, 1,
+227), (3, 1), (0, 4)]), (47, [(1, 17), (0, 1), (2, 1, 159), (1, 1), (2, 1, 158
+), (3, 1), (1, 1), (2, 1, 160), (2, 1, 162), (1, 1), (2, 1, 164), (2, 1, 166),
+(1, 1), (3, 2), (2, 1, 170), (2, 1, 172), (1, 1), (1, 1), (1, 1), (3, 4), (2,
+1, 157), (2, 1, 155), (0, 7), (2, 1, 197), (1, 1), (2, 1, 196), (3, 1), (2, 1,
+198), (2, 1, 200), (3, 1), (0, 1), (2, 1, 213), (1, 1), (2, 1, 212), (3, 2), (
+0, 1), (2, 1, 231), (1, 1), (2, 1, 230), (3, 2), (0, 5), (2, 1, 159), (1, 1), (
+2, 1, 158), (0, 1), (1, 1), (2, 1, 160), (2, 1, 162), (1, 1), (2, 1, 164), (2,
+1, 166), (1, 1), (0, 2), (2, 1, 170), (2, 1, 172), (1, 1), (1, 1), (1, 1), (0,
+4), (2, 1, 157), (2, 1, 155), (3, 1), (0, 6), (2, 1, 197), (1, 1), (2, 1, 196),
+(0, 1), (2, 1, 198), (2, 1, 200), (0, 2), (2, 1, 213), (1, 1), (2, 1, 212), (0,
+3), (2, 1, 231), (1, 1), (2, 1, 230), (0, 7)]), (48, [(1, 17), (0, 8), (2, 1,
+197), (1, 1), (2, 1, 196), (3, 1), (2, 1, 198), (2, 1, 200), (3, 1), (0, 1), (
+2, 1, 213), (1, 1), (2, 1, 212), (3, 2), (0, 1), (2, 1, 231), (1, 1), (2, 1,
+230), (3, 2), (0, 12), (2, 1, 197), (1, 1), (2, 1, 196), (0, 1), (2, 1, 198), (
+2, 1, 200), (0, 2), (2, 1, 213), (1, 1), (2, 1, 212), (0, 3), (2, 1, 231), (1,
+1), (2, 1, 230), (0, 6), (3, 1)]), (49, [(1, 17), (0, 9), (1, 1), (3, 1), (2,
+1, 202), (3, 1), (0, 16), (1, 1), (0, 1), (2, 1, 202), (0, 8), (3, 1)]), (50, [
+(1, 17), (0, 5), (2, 1, 173), (1, 1), (2, 1, 174), (1, 1), (3, 2), (2, 1, 171),
+(2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 2), (3, 1), (0, 14), (
+2, 1, 173), (1, 1), (2, 1, 174), (1, 1), (0, 2), (2, 1, 171), (2, 1, 163), (2,
+1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 12)]), (51, [(1, 17), (0, 3), (
+2, 1, 167), (1, 1), (2, 1, 168), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 165), (
+2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 17), (2, 1, 167), (1, 1
+), (2, 1, 168), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 165), (2, 1, 163), (2,
+1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 14)]), (52, [(1, 17), (2, 1, 111
+), (2, 1, 109), (2, 1, 112), (3, 1), (0, 13), (2, 1, 249), (2, 1, 247), (2, 1,
+250), (3, 1), (2, 1, 269), (2, 1, 267), (1, 1), (2, 1, 270), (3, 2), (2, 1, 291
+), (2, 1, 289), (2, 1, 292), (3, 1), (2, 1, 111), (2, 1, 109), (2, 1, 112), (0,
+14), (2, 1, 249), (2, 1, 247), (2, 1, 250), (0, 1), (2, 1, 269), (2, 1, 267), (
+1, 1), (2, 1, 270), (0, 2), (2, 1, 291), (2, 1, 289), (2, 1, 292), (0, 1), (3,
+1)]), (53, [(1, 17), (0, 4), (2, 1, 173), (1, 1), (2, 1, 174), (1, 1), (3, 2),
+(2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 2), (3, 1
+), (0, 14), (2, 1, 173), (1, 1), (2, 1, 174), (1, 1), (0, 2), (2, 1, 171), (2,
+1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 13)]), (51, [(1, 17
+), (0, 2), (2, 1, 167), (1, 1), (2, 1, 168), (1, 1), (1, 1), (1, 1), (3, 4), (
+2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 17), (2, 1,
+167), (1, 1), (2, 1, 168), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 165), (2, 1,
+163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 15)]), (0, [(1, 13), (
+0, 26), (3, 1)]), (46, [(1, 13), (0, 10), (2, 1, 214), (3, 1), (0, 1), (1, 1),
+(2, 1, 232), (2, 1, 234), (3, 1), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1), (1,
+1), (1, 1), (3, 4), (2, 1, 229), (2, 1, 227), (0, 11), (2, 1, 214), (0, 2), (1,
+1), (2, 1, 232), (2, 1, 234), (0, 1), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1),
+(1, 1), (1, 1), (0, 4), (2, 1, 229), (2, 1, 227), (3, 1), (0, 1)]), (14, [(1,
+13), (2, 1, 137), (1, 1), (2, 1, 136), (3, 1), (1, 1), (2, 1, 138), (2, 1, 140
+), (1, 1), (2, 1, 142), (2, 1, 144), (1, 1), (3, 2), (2, 1, 148), (2, 1, 150),
+(1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 133), (2, 1, 131), (0, 7), (2, 1, 197),
+(1, 1), (2, 1, 196), (3, 1), (2, 1, 198), (2, 1, 200), (3, 1), (0, 1), (2, 1,
+213), (1, 1), (2, 1, 212), (3, 2), (0, 1), (2, 1, 231), (1, 1), (2, 1, 230), (
+3, 2), (0, 1), (2, 1, 137), (1, 1), (2, 1, 136), (0, 1), (1, 1), (2, 1, 138), (
+2, 1, 140), (1, 1), (2, 1, 142), (2, 1, 144), (1, 1), (0, 2), (2, 1, 148), (2,
+1, 150), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 133), (2, 1, 131), (3, 1), (0,
+6), (2, 1, 197), (1, 1), (2, 1, 196), (0, 1), (2, 1, 198), (2, 1, 200), (0, 2),
+(2, 1, 213), (1, 1), (2, 1, 212), (0, 3), (2, 1, 231), (1, 1), (2, 1, 230), (0,
+4)]), (49, [(1, 13), (0, 8), (1, 1), (3, 1), (2, 1, 202), (3, 1), (0, 12), (1,
+1), (0, 1), (2, 1, 202), (0, 5), (3, 1)]), (54, [(1, 13), (0, 4), (2, 1, 151),
+(1, 1), (2, 1, 152), (1, 1), (3, 2), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2,
+1, 133), (2, 1, 131), (0, 2), (3, 1), (0, 10), (2, 1, 151), (1, 1), (2, 1, 152
+), (1, 1), (0, 2), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1,
+131), (3, 1), (0, 9)]), (55, [(1, 13), (0, 2), (2, 1, 145), (1, 1), (2, 1, 146
+), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2,
+1, 133), (2, 1, 131), (0, 13), (2, 1, 145), (1, 1), (2, 1, 146), (1, 1), (1, 1
+), (1, 1), (0, 4), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1,
+131), (3, 1), (0, 11)]), (56, [(1, 13), (0, 3), (2, 1, 151), (1, 1), (2, 1, 152
+), (1, 1), (3, 2), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1,
+131), (0, 2), (3, 1), (0, 10), (2, 1, 151), (1, 1), (2, 1, 152), (1, 1), (0, 2
+), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (3, 1), (0,
+10)]), (55, [(1, 13), (0, 1), (2, 1, 145), (1, 1), (2, 1, 146), (1, 1), (1, 1),
+(1, 1), (3, 4), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131
+), (0, 13), (2, 1, 145), (1, 1), (2, 1, 146), (1, 1), (1, 1), (1, 1), (0, 4), (
+2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (3, 1), (0, 12)
+]), (0, [(1, 1), (2, 1, 393), (2, 1, 391), (0, 1), (2, 1, 393), (2, 1, 391), (
+3, 1), (0, 1)]), (0, [(1, 5), (0, 10), (3, 1)]), (0, [(1, 5), (0, 3), (2, 1,
+371), (2, 1, 369), (0, 5), (2, 1, 371), (2, 1, 369), (3, 1), (0, 2)]), (0, [(1,
+5), (0, 4), (2, 1, 389), (2, 1, 387), (0, 5), (2, 1, 389), (2, 1, 387), (3, 1),
+(0, 1)]), (57, [(1, 5), (3, 1), (2, 1, 347), (0, 5), (2, 1, 347), (3, 1), (0, 4
+)]), (0, [(1, 5), (0, 2), (2, 1, 359), (0, 5), (2, 1, 359), (3, 1), (0, 3)]), (
+0, [(1, 1), (2, 1, 363), (0, 1), (2, 1, 363), (3, 1), (0, 1)]), (0, [(1, 3), (
+0, 2), (2, 1, 361), (0, 3), (2, 1, 361), (3, 1), (0, 1)]), (58, [(1, 3), (3, 1
+), (2, 1, 345), (0, 3), (2, 1, 345), (3, 1), (0, 2)]), (19, [(1, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (4, [(1,
+3), (0, 2), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3,
+2), (0, 2), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0,
+2), (3, 1)]), (7, [(1, 3), (0, 1), (2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (
+2, 1, 188), (3, 1), (0, 2), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1,
+188), (0, 2), (3, 1)]), (19, [(1, 3), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1),
+(2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2,
+1, 99), (2, 1, 97), (3, 1), (0, 3)]), (0, [(1, 1), (2, 1, 341), (0, 1), (2, 1,
+341), (3, 1), (0, 1)]), (0, [(1, 12), (0, 24), (3, 1)]), (19, [(1, 12), (0, 11
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 12), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (59, [(1, 12), (3, 3), (0, 8), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 12), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2,
+1, 99), (2, 1, 97), (3, 1), (0, 1)]), (60, [(1, 12), (0, 3), (3, 1), (0, 7), (
+2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 12), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(61, [(1, 12), (0, 4), (3, 1), (0, 6), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 12), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (62, [(1, 12), (0, 5), (3, 1), (0, 5),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 12), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(63, [(1, 12), (0, 6), (3, 1), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 12), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (64, [(1, 12), (0, 7), (3, 1), (0, 3),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 12), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(65, [(1, 12), (0, 8), (3, 1), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 12), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (66, [(1, 12), (0, 9), (3, 1), (0, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 12), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(67, [(1, 12), (0, 10), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 12), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (0, 1), (2, 1, 103), (1, 1), (
+2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (68, [(1, 2), (3, 1), (
+2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (
+69, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (3, 1), (0, 1)]), (19, [(1, 5), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (
+3, 1), (2, 1, 99), (2, 1, 97), (0, 5), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (70, [(1, 5), (3, 1), (0, 3), (2,
+1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 5), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (
+71, [(1, 5), (0, 1), (3, 1), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1),
+(2, 1, 99), (2, 1, 97), (0, 5), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2,
+1, 99), (2, 1, 97), (3, 1), (0, 1)]), (72, [(1, 5), (0, 2), (3, 2), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 5), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (0, [(1,
+4), (0, 8), (3, 1)]), (19, [(1, 4), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (
+3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (73, [(1, 4), (3, 1), (0, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (
+74, [(1, 4), (0, 1), (2, 1, 19), (0, 1), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 19), (3, 1), (0, 1), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (75, [(
+1, 4), (3, 1), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (76, [(1, 4), (0, 1), (3, 1), (0, 1), (2, 1, 103), (1, 1
+), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (
+2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (77, [(1, 4), (0,
+2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (19, [(1, 3), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (78, [(1, 3), (3, 1), (0, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (79, [(1, 3),
+(0, 1), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (80, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 4), (2, 1, 35), (0, 3), (2,
+1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 35
+), (3, 1), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (0, 2)]), (81, [(1, 4), (0, 1), (3, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (82, [(1, 2), (3, 1), (2, 1, 103),
+(1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (83, [(1, 4),
+(3, 3), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (
+0, 1)]), (0, [(1, 8), (0, 16), (3, 1)]), (19, [(1, 8), (0, 7), (2, 1, 103), (1,
+1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 8), (2, 1, 103), (1, 1), (
+2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (84, [(1, 8), (3,
+1), (0, 6), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 8), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (85, [(1, 8), (0, 1), (3, 2), (0, 3), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 8), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (86, [(1, 8), (0, 3
+), (3, 2), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1,
+97), (0, 8), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97),
+(3, 1), (0, 1)]), (87, [(1, 8), (0, 5), (3, 1), (0, 1), (2, 1, 103), (1, 1), (
+2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 8), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (88, [(1, 2), (3, 1), (
+2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (
+0, [(1, 6), (0, 12), (3, 1)]), (4, [(1, 6), (0, 5), (1, 1), (2, 1, 312), (1, 1
+), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 5), (1, 1), (2, 1, 312), (1, 1
+), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2), (3, 1)]), (7, [(1, 6), (0, 3), (2,
+1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 1), (0, 5), (2, 1, 184),
+(1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 3), (3, 1)]), (19, [(1, 6), (0, 2
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 6), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 4)
+]), (89, [(1, 6), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99),
+(2, 1, 97), (0, 2), (2, 1, 311), (2, 1, 309), (3, 1), (0, 3), (2, 1, 103), (1,
+1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1), (2, 1, 311), (
+2, 1, 309), (0, 3)]), (90, [(1, 6), (3, 2), (2, 1, 103), (1, 1), (2, 1, 102), (
+3, 1), (2, 1, 99), (2, 1, 97), (0, 6), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 4)]), (91, [(1, 3), (3, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (92, [(1, 2),
+(3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (
+0, 1)]), (0, [(1, 2), (2, 1, 343), (0, 2), (2, 1, 343), (3, 1), (0, 2)]), (0, [
+(1, 2), (0, 1), (2, 1, 357), (0, 2), (2, 1, 357), (3, 1), (0, 1)]), (39, [(1, 6
+), (2, 1, 321), (1, 1), (2, 1, 320), (3, 1), (2, 1, 307), (1, 1), (2, 1, 306),
+(1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1), (1, 1), (3, 5), (2, 1, 305),
+(0, 6), (2, 1, 321), (1, 1), (2, 1, 320), (0, 1), (2, 1, 307), (1, 1), (2, 1,
+306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1), (1, 1), (0, 5), (2, 1,
+305), (3, 1), (0, 6)]), (93, [(1, 6), (0, 5), (1, 1), (2, 1, 312), (1, 1), (3,
+1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 5), (1, 1), (2, 1, 312), (1, 1), (0,
+1), (2, 1, 314), (2, 1, 316), (0, 2), (3, 1)]), (94, [(1, 6), (0, 4), (2, 1,
+311), (2, 1, 309), (3, 1), (0, 5), (2, 1, 311), (2, 1, 309), (0, 2), (3, 1)]),
+(94, [(1, 6), (0, 3), (2, 1, 311), (2, 1, 309), (3, 1), (0, 5), (2, 1, 311), (
+2, 1, 309), (0, 3), (3, 1)]), (95, [(1, 6), (0, 1), (3, 1), (2, 1, 311), (2, 1,
+309), (3, 1), (0, 5), (2, 1, 311), (2, 1, 309), (0, 4), (3, 1)]), (4, [(1, 3),
+(2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1
+), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 2), (2, 1, 319), (2, 1, 317),
+(2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2,
+1, 316), (0, 4), (3, 1)]), (96, [(1, 3), (0, 1), (1, 1), (3, 1), (2, 1, 319), (
+2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2,
+1, 314), (2, 1, 316), (3, 2), (0, 2), (1, 1), (0, 1), (2, 1, 319), (2, 1, 317),
+(2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2,
+1, 316), (0, 3), (3, 1)]), (97, [(1, 3), (0, 2), (3, 1), (0, 3), (3, 1)]), (41,
+[(1, 3), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1,
+188), (3, 2), (0, 2), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1,
+186), (2, 1, 188), (0, 4), (3, 1)]), (0, [(1, 3), (0, 2), (2, 1, 179), (2, 1,
+177), (0, 3), (2, 1, 179), (2, 1, 177), (3, 1), (0, 1)]), (98, [(1, 3), (0, 1),
+(2, 1, 190), (1, 1), (1, 1), (3, 3), (0, 2), (2, 1, 190), (1, 1), (1, 1), (0, 4
+), (3, 1)]), (41, [(1, 3), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185),
+(1, 1), (2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (0, 2),
+(2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1
+), (0, 1), (2, 1, 186), (2, 1, 188), (0, 4), (3, 1)]), (99, [(1, 3), (0, 1), (
+1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2,
+1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (0, 2), (1, 1), (0,
+1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (
+1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 3), (3, 1)]), (100, [(1, 3), (0, 2
+), (3, 1), (0, 3), (3, 1)]), (0, [(1, 1), (2, 1, 323), (0, 1), (2, 1, 323), (3,
+1), (0, 1)]), (44, [(1, 6), (2, 1, 215), (1, 1), (2, 1, 214), (3, 1), (1, 1), (
+2, 1, 216), (2, 1, 218), (3, 1), (1, 1), (2, 1, 222), (2, 1, 224), (1, 1), (1,
+1), (1, 1), (3, 4), (2, 1, 211), (2, 1, 209), (0, 6), (2, 1, 215), (1, 1), (2,
+1, 214), (0, 1), (1, 1), (2, 1, 216), (2, 1, 218), (0, 1), (1, 1), (2, 1, 222),
+(2, 1, 224), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 211), (2, 1, 209), (3, 1),
+(0, 6)]), (101, [(1, 6), (0, 1), (1, 1), (3, 1), (2, 1, 220), (3, 1), (0, 5), (
+1, 1), (0, 1), (2, 1, 220), (0, 5), (3, 1)]), (0, [(1, 6), (0, 3), (2, 1, 225),
+(2, 1, 223), (2, 1, 211), (2, 1, 209), (0, 6), (2, 1, 225), (2, 1, 223), (2, 1,
+211), (2, 1, 209), (3, 1), (0, 3)]), (0, [(1, 6), (0, 5), (2, 1, 225), (2, 1,
+223), (2, 1, 211), (2, 1, 209), (0, 6), (2, 1, 225), (2, 1, 223), (2, 1, 211),
+(2, 1, 209), (3, 1), (0, 1)]), (0, [(1, 6), (0, 2), (2, 1, 225), (2, 1, 223), (
+2, 1, 211), (2, 1, 209), (0, 6), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1,
+209), (3, 1), (0, 4)]), (0, [(1, 6), (0, 4), (2, 1, 225), (2, 1, 223), (2, 1,
+211), (2, 1, 209), (0, 6), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1, 209),
+(3, 1), (0, 2)]), (45, [(1, 1), (1, 1), (3, 1), (2, 1, 3), (0, 1), (1, 1), (0,
+1), (2, 1, 3), (3, 1), (0, 1)]), (102, [(1, 6), (0, 1), (1, 1), (3, 1), (2, 1,
+236), (3, 1), (0, 5), (1, 1), (0, 1), (2, 1, 236), (0, 5), (3, 1)]), (0, [(1, 6
+), (0, 3), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (0, 6), (2, 1,
+241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 3)]), (0, [(1, 6), (0,
+5), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (0, 6), (2, 1, 241), (
+2, 1, 239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 1)]), (0, [(1, 6), (0, 2), (
+2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (0, 6), (2, 1, 241), (2, 1,
+239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 4)]), (0, [(1, 6), (0, 4), (2, 1,
+241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (0, 6), (2, 1, 241), (2, 1, 239),
+(2, 1, 229), (2, 1, 227), (3, 1), (0, 2)]), (47, [(1, 13), (2, 1, 159), (1, 1),
+(2, 1, 158), (3, 1), (1, 1), (2, 1, 160), (2, 1, 162), (1, 1), (2, 1, 164), (2,
+1, 166), (1, 1), (3, 2), (2, 1, 170), (2, 1, 172), (1, 1), (1, 1), (1, 1), (3,
+4), (2, 1, 157), (2, 1, 155), (0, 7), (2, 1, 197), (1, 1), (2, 1, 196), (3, 1),
+(2, 1, 198), (2, 1, 200), (3, 1), (0, 1), (2, 1, 213), (1, 1), (2, 1, 212), (3,
+2), (0, 1), (2, 1, 231), (1, 1), (2, 1, 230), (3, 2), (0, 1), (2, 1, 159), (1,
+1), (2, 1, 158), (0, 1), (1, 1), (2, 1, 160), (2, 1, 162), (1, 1), (2, 1, 164),
+(2, 1, 166), (1, 1), (0, 2), (2, 1, 170), (2, 1, 172), (1, 1), (1, 1), (1, 1),
+(0, 4), (2, 1, 157), (2, 1, 155), (3, 1), (0, 6), (2, 1, 197), (1, 1), (2, 1,
+196), (0, 1), (2, 1, 198), (2, 1, 200), (0, 2), (2, 1, 213), (1, 1), (2, 1, 212
+), (0, 3), (2, 1, 231), (1, 1), (2, 1, 230), (0, 4)]), (48, [(1, 13), (0, 7), (
+2, 1, 197), (1, 1), (2, 1, 196), (3, 1), (2, 1, 198), (2, 1, 200), (3, 1), (0,
+1), (2, 1, 213), (1, 1), (2, 1, 212), (3, 2), (0, 1), (2, 1, 231), (1, 1), (2,
+1, 230), (3, 2), (0, 8), (2, 1, 197), (1, 1), (2, 1, 196), (0, 1), (2, 1, 198),
+(2, 1, 200), (0, 2), (2, 1, 213), (1, 1), (2, 1, 212), (0, 3), (2, 1, 231), (1,
+1), (2, 1, 230), (0, 3), (3, 1)]), (50, [(1, 13), (0, 4), (2, 1, 173), (1, 1),
+(2, 1, 174), (1, 1), (3, 2), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157
+), (2, 1, 155), (0, 2), (3, 1), (0, 10), (2, 1, 173), (1, 1), (2, 1, 174), (1,
+1), (0, 2), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (
+3, 1), (0, 9)]), (51, [(1, 13), (0, 2), (2, 1, 167), (1, 1), (2, 1, 168), (1, 1
+), (1, 1), (1, 1), (3, 4), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157),
+(2, 1, 155), (0, 13), (2, 1, 167), (1, 1), (2, 1, 168), (1, 1), (1, 1), (1, 1),
+(0, 4), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1
+), (0, 11)]), (53, [(1, 13), (0, 3), (2, 1, 173), (1, 1), (2, 1, 174), (1, 1),
+(3, 2), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 2
+), (3, 1), (0, 10), (2, 1, 173), (1, 1), (2, 1, 174), (1, 1), (0, 2), (2, 1,
+171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 10)]), (
+51, [(1, 13), (0, 1), (2, 1, 167), (1, 1), (2, 1, 168), (1, 1), (1, 1), (1, 1),
+(3, 4), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 13
+), (2, 1, 167), (1, 1), (2, 1, 168), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 165
+), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 12)]), (46,
+[(1, 6), (0, 3), (2, 1, 214), (3, 1), (0, 1), (1, 1), (2, 1, 232), (2, 1, 234),
+(3, 1), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1), (1, 1), (1, 1), (3, 4), (2,
+1, 229), (2, 1, 227), (0, 4), (2, 1, 214), (0, 2), (1, 1), (2, 1, 232), (2, 1,
+234), (0, 1), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1), (1, 1), (1, 1), (0, 4),
+(2, 1, 229), (2, 1, 227), (3, 1), (0, 1)]), (48, [(1, 6), (2, 1, 197), (1, 1),
+(2, 1, 196), (3, 1), (2, 1, 198), (2, 1, 200), (3, 1), (0, 1), (2, 1, 213), (1,
+1), (2, 1, 212), (3, 2), (0, 1), (2, 1, 231), (1, 1), (2, 1, 230), (3, 2), (0,
+1), (2, 1, 197), (1, 1), (2, 1, 196), (0, 1), (2, 1, 198), (2, 1, 200), (0, 2),
+(2, 1, 213), (1, 1), (2, 1, 212), (0, 3), (2, 1, 231), (1, 1), (2, 1, 230), (0,
+3), (3, 1)]), (49, [(1, 6), (0, 1), (1, 1), (3, 1), (2, 1, 202), (3, 1), (0, 5
+), (1, 1), (0, 1), (2, 1, 202), (0, 5), (3, 1)]), (103, [(1, 2), (2, 1, 202), (
+3, 1), (0, 1), (2, 1, 202), (0, 2), (3, 1)]), (104, [(1, 2), (0, 1), (2, 1, 203
+), (1, 1), (2, 1, 202), (3, 1), (2, 1, 201), (2, 1, 199), (1, 1), (2, 1, 204),
+(2, 1, 206), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 195), (2, 1, 193), (0, 2),
+(2, 1, 203), (1, 1), (2, 1, 202), (0, 1), (2, 1, 201), (2, 1, 199), (1, 1), (2,
+1, 204), (2, 1, 206), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 195), (2, 1, 193),
+(3, 1), (0, 1)]), (105, [(1, 3), (0, 2), (2, 1, 173), (1, 1), (2, 1, 174), (1,
+1), (3, 2), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (
+0, 3), (2, 1, 173), (1, 1), (2, 1, 174), (1, 1), (0, 2), (2, 1, 171), (2, 1,
+163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 1)]), (0, [(1, 3), (0,
+1), (2, 1, 175), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155
+), (0, 3), (2, 1, 175), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2,
+1, 155), (3, 1), (0, 2)]), (0, [(1, 3), (2, 1, 175), (2, 1, 171), (2, 1, 163),
+(2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 3), (2, 1, 175), (2, 1, 171), (2, 1,
+163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 3)]), (106, [(1, 4), (
+0, 1), (2, 1, 169), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1,
+155), (0, 2), (3, 1), (0, 1), (2, 1, 169), (2, 1, 165), (2, 1, 163), (2, 1, 161
+), (2, 1, 157), (2, 1, 155), (3, 1), (0, 3)]), (107, [(1, 4), (2, 1, 169), (2,
+1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 2), (3, 1), (
+0, 1), (2, 1, 169), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1,
+155), (3, 1), (0, 4)]), (108, [(1, 5), (0, 3), (2, 1, 272), (3, 1), (0, 4), (2,
+1, 272), (0, 2), (3, 1)]), (109, [(1, 5), (2, 1, 113), (1, 1), (2, 1, 112), (3,
+1), (1, 1), (2, 1, 114), (2, 1, 116), (1, 1), (2, 1, 118), (2, 1, 120), (1, 1),
+(3, 2), (2, 1, 124), (2, 1, 126), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 107),
+(2, 1, 105), (0, 1), (2, 1, 251), (1, 1), (2, 1, 250), (3, 1), (2, 1, 252), (2,
+1, 254), (3, 1), (2, 1, 271), (1, 1), (2, 1, 270), (3, 2), (0, 1), (2, 1, 293),
+(1, 1), (2, 1, 292), (3, 2), (2, 1, 113), (1, 1), (2, 1, 112), (0, 1), (1, 1),
+(2, 1, 114), (2, 1, 116), (1, 1), (2, 1, 118), (2, 1, 120), (1, 1), (0, 2), (2,
+1, 124), (2, 1, 126), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 107), (2, 1, 105),
+(3, 1), (2, 1, 251), (1, 1), (2, 1, 250), (0, 1), (2, 1, 252), (2, 1, 254), (0,
+1), (2, 1, 271), (1, 1), (2, 1, 270), (0, 3), (2, 1, 293), (1, 1), (2, 1, 292),
+(0, 3)]), (110, [(1, 3), (0, 2), (2, 1, 151), (1, 1), (2, 1, 152), (1, 1), (3,
+2), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (0, 3), (
+2, 1, 151), (1, 1), (2, 1, 152), (1, 1), (0, 2), (2, 1, 149), (2, 1, 141), (2,
+1, 139), (2, 1, 133), (2, 1, 131), (3, 1), (0, 1)]), (0, [(1, 3), (0, 1), (2,
+1, 153), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (0, 3
+), (2, 1, 153), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131
+), (3, 1), (0, 2)]), (0, [(1, 3), (2, 1, 153), (2, 1, 149), (2, 1, 141), (2, 1,
+139), (2, 1, 133), (2, 1, 131), (0, 3), (2, 1, 153), (2, 1, 149), (2, 1, 141),
+(2, 1, 139), (2, 1, 133), (2, 1, 131), (3, 1), (0, 3)]), (111, [(1, 4), (0, 1),
+(2, 1, 147), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (
+0, 2), (3, 1), (0, 1), (2, 1, 147), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2,
+1, 133), (2, 1, 131), (3, 1), (0, 3)]), (112, [(1, 4), (2, 1, 147), (2, 1, 143
+), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (0, 2), (3, 1), (0, 1),
+(2, 1, 147), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (
+3, 1), (0, 4)]), (0, [(1, 1), (2, 1, 327), (0, 1), (2, 1, 327), (3, 1), (0, 1)]
+), (0, [(1, 1), (2, 1, 325), (0, 1), (2, 1, 325), (3, 1), (0, 1)]), (113, [(1,
+4), (3, 2), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (3, 1), (0, 1)]), (114, [(1, 4), (0, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (115, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (116, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (117, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (118, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (119, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (120, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (121, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (122, [(1, 2), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (123, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (124, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (125, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (126, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (127, [(1, 3), (3, 2), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (128, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (129, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (130, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (131, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (132, [(1, 2), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (133, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 31), (0, 1), (2, 1, 103), (1,
+1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 31), (3, 1), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (
+134, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (3, 1), (0, 1)]), (135, [(1, 3), (3, 1), (0, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 3), (0, 1), (2, 1,
+39), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97),
+(0, 2), (2, 1, 39), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (0, 2)]), (136, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (
+0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (137, [(1, 4), (3, 1), (0, 2),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(138, [(1, 4), (0, 1), (3, 1), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (139, [(1, 4), (0, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (140, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (141, [(1, 4), (3, 1), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2, 1, 103), (1, 1), (2, 1, 102), (
+0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (142, [(1, 4), (0, 1), (3, 2),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 4), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(143, [(1, 3), (3, 1), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1,
+99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99),
+(2, 1, 97), (3, 1), (0, 1)]), (144, [(1, 3), (0, 1), (3, 1), (2, 1, 103), (1, 1
+), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (
+2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (145, [(1, 2), (
+3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (
+0, 1)]), (146, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (3, 1), (0, 1)]), (4, [(1, 2), (0, 1), (1, 1), (2, 1, 312), (1,
+1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 1), (1, 1), (2, 1, 312), (1,
+1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2), (3, 1)]), (19, [(1, 2), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 2)]), (147, [(
+1, 3), (3, 1), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (148, [(1, 3), (0, 1), (3, 1), (2, 1, 103), (1, 1), (2,
+1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (149, [(1, 3), (3, 1),
+(0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (
+0, 1)]), (150, [(1, 3), (0, 1), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (151, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (93, [(1, 3),
+(2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3,
+2), (0, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2,
+1, 316), (0, 4), (3, 1)]), (152, [(1, 3), (0, 2), (1, 1), (2, 1, 320), (3, 1),
+(2, 1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1,
+1), (1, 1), (3, 5), (2, 1, 305), (0, 3), (1, 1), (2, 1, 320), (0, 1), (2, 1,
+307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1), (
+1, 1), (0, 5), (2, 1, 305), (3, 1), (0, 1)]), (153, [(1, 3), (0, 1), (2, 1, 318
+), (1, 1), (1, 1), (3, 3), (0, 2), (2, 1, 318), (1, 1), (1, 1), (0, 4), (3, 1)]
+), (93, [(1, 1), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316),
+(3, 2), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2),
+(3, 1)]), (93, [(1, 2), (0, 1), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314
+), (2, 1, 316), (3, 2), (0, 1), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314
+), (2, 1, 316), (0, 2), (3, 1)]), (94, [(1, 2), (2, 1, 311), (2, 1, 309), (3, 1
+), (0, 1), (2, 1, 311), (2, 1, 309), (0, 2), (3, 1)]), (4, [(1, 4), (0, 1), (2,
+1, 313), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2),
+(0, 3), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1,
+316), (0, 4), (3, 1)]), (39, [(1, 4), (0, 3), (1, 1), (2, 1, 320), (3, 1), (2,
+1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1),
+(1, 1), (3, 5), (2, 1, 305), (0, 4), (1, 1), (2, 1, 320), (0, 1), (2, 1, 307),
+(1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1), (1, 1),
+(0, 5), (2, 1, 305), (3, 1), (0, 1)]), (154, [(1, 4), (1, 1), (3, 1), (2, 1,
+319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (3, 1
+), (2, 1, 314), (2, 1, 316), (3, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1),
+(0, 1), (2, 1, 314), (2, 1, 316), (0, 4), (1, 1), (0, 1), (2, 1, 319), (2, 1,
+317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314
+), (2, 1, 316), (0, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2,
+1, 314), (2, 1, 316), (0, 4), (3, 1)]), (40, [(1, 4), (0, 2), (2, 1, 318), (1,
+1), (1, 1), (3, 3), (0, 3), (2, 1, 318), (1, 1), (1, 1), (0, 4), (3, 1)]), (
+155, [(1, 1), (1, 1), (3, 1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313
+), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (1, 1
+), (0, 1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1,
+312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2), (3, 1)]), (156, [(1, 3
+), (0, 1), (1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185),
+(1, 1), (2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (0, 2),
+(1, 1), (0, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2,
+1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 3), (3, 1)]), (157, [(1,
+3), (0, 2), (3, 1), (0, 3), (3, 1)]), (41, [(1, 4), (0, 1), (2, 1, 185), (1, 1
+), (2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (0, 3), (2,
+1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 4),
+(3, 1)]), (0, [(1, 4), (0, 3), (2, 1, 179), (2, 1, 177), (0, 4), (2, 1, 179), (
+2, 1, 177), (3, 1), (0, 1)]), (158, [(1, 4), (1, 1), (3, 1), (2, 1, 191), (2,
+1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (3, 1), (2, 1,
+186), (2, 1, 188), (3, 2), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (
+2, 1, 186), (2, 1, 188), (0, 4), (1, 1), (0, 1), (2, 1, 191), (2, 1, 189), (2,
+1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1,
+188), (0, 2), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (
+2, 1, 188), (0, 4), (3, 1)]), (98, [(1, 4), (0, 2), (2, 1, 190), (1, 1), (1, 1
+), (3, 3), (0, 3), (2, 1, 190), (1, 1), (1, 1), (0, 4), (3, 1)]), (159, [(1, 1
+), (1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1),
+(2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (1, 1), (0, 1),
+(2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1
+), (0, 1), (2, 1, 186), (2, 1, 188), (0, 2), (3, 1)]), (160, [(1, 2), (2, 1,
+220), (3, 1), (0, 1), (2, 1, 220), (0, 2), (3, 1)]), (161, [(1, 2), (0, 1), (2,
+1, 221), (1, 1), (2, 1, 220), (3, 1), (2, 1, 219), (2, 1, 217), (1, 1), (2, 1,
+222), (2, 1, 224), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 211), (2, 1, 209), (
+0, 2), (2, 1, 221), (1, 1), (2, 1, 220), (0, 1), (2, 1, 219), (2, 1, 217), (1,
+1), (2, 1, 222), (2, 1, 224), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 211), (2,
+1, 209), (3, 1), (0, 1)]), (162, [(1, 2), (2, 1, 236), (3, 1), (0, 1), (2, 1,
+236), (0, 2), (3, 1)]), (163, [(1, 2), (0, 1), (2, 1, 237), (1, 1), (2, 1, 236
+), (3, 1), (2, 1, 235), (2, 1, 233), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1),
+(1, 1), (1, 1), (3, 4), (2, 1, 229), (2, 1, 227), (0, 2), (2, 1, 237), (1, 1),
+(2, 1, 236), (0, 1), (2, 1, 235), (2, 1, 233), (1, 1), (2, 1, 238), (2, 1, 240
+), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 229), (2, 1, 227), (3, 1), (0, 1)]),
+(104, [(1, 1), (2, 1, 203), (1, 1), (2, 1, 202), (3, 1), (2, 1, 201), (2, 1,
+199), (1, 1), (2, 1, 204), (2, 1, 206), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1,
+195), (2, 1, 193), (0, 1), (2, 1, 203), (1, 1), (2, 1, 202), (0, 1), (2, 1, 201
+), (2, 1, 199), (1, 1), (2, 1, 204), (2, 1, 206), (1, 1), (1, 1), (1, 1), (0, 4
+), (2, 1, 195), (2, 1, 193), (3, 1), (0, 1)]), (104, [(1, 5), (2, 1, 203), (1,
+1), (2, 1, 202), (3, 1), (2, 1, 201), (2, 1, 199), (1, 1), (2, 1, 204), (2, 1,
+206), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 195), (2, 1, 193), (0, 5), (2, 1,
+203), (1, 1), (2, 1, 202), (0, 1), (2, 1, 201), (2, 1, 199), (1, 1), (2, 1, 204
+), (2, 1, 206), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 195), (2, 1, 193), (3, 1
+), (0, 5)]), (0, [(1, 5), (0, 2), (2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1,
+193), (0, 5), (2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (3, 1), (0, 3
+)]), (0, [(1, 5), (0, 4), (2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (
+0, 5), (2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (3, 1), (0, 1)]), (
+0, [(1, 5), (0, 1), (2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (0, 5),
+(2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (3, 1), (0, 4)]), (0, [(1,
+5), (0, 3), (2, 1, 207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (0, 5), (2, 1,
+207), (2, 1, 205), (2, 1, 195), (2, 1, 193), (3, 1), (0, 2)]), (0, [(1, 2), (0,
+1), (2, 1, 175), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155
+), (0, 2), (2, 1, 175), (2, 1, 171), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2,
+1, 155), (3, 1), (0, 1)]), (0, [(1, 2), (2, 1, 175), (2, 1, 171), (2, 1, 163),
+(2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 2), (2, 1, 175), (2, 1, 171), (2, 1,
+163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (3, 1), (0, 2)]), (0, [(1, 1), (2,
+1, 169), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155), (0, 1
+), (2, 1, 169), (2, 1, 165), (2, 1, 163), (2, 1, 161), (2, 1, 157), (2, 1, 155
+), (3, 1), (0, 1)]), (164, [(1, 1), (2, 1, 273), (1, 1), (2, 1, 272), (3, 1), (
+2, 1, 274), (2, 1, 276), (3, 1), (2, 1, 273), (1, 1), (2, 1, 272), (0, 1), (2,
+1, 274), (2, 1, 276), (0, 1), (3, 1)]), (165, [(1, 13), (0, 10), (2, 1, 272), (
+3, 1), (0, 1), (2, 1, 294), (2, 1, 296), (3, 1), (0, 10), (2, 1, 272), (0, 2),
+(2, 1, 294), (2, 1, 296), (0, 1), (3, 1)]), (109, [(1, 13), (2, 1, 113), (1, 1
+), (2, 1, 112), (3, 1), (1, 1), (2, 1, 114), (2, 1, 116), (1, 1), (2, 1, 118),
+(2, 1, 120), (1, 1), (3, 2), (2, 1, 124), (2, 1, 126), (1, 1), (1, 1), (1, 1),
+(3, 4), (2, 1, 107), (2, 1, 105), (0, 7), (2, 1, 251), (1, 1), (2, 1, 250), (3,
+1), (2, 1, 252), (2, 1, 254), (3, 1), (0, 1), (2, 1, 271), (1, 1), (2, 1, 270),
+(3, 2), (0, 1), (2, 1, 293), (1, 1), (2, 1, 292), (3, 2), (0, 1), (2, 1, 113),
+(1, 1), (2, 1, 112), (0, 1), (1, 1), (2, 1, 114), (2, 1, 116), (1, 1), (2, 1,
+118), (2, 1, 120), (1, 1), (0, 2), (2, 1, 124), (2, 1, 126), (1, 1), (1, 1), (
+1, 1), (0, 4), (2, 1, 107), (2, 1, 105), (3, 1), (0, 6), (2, 1, 251), (1, 1), (
+2, 1, 250), (0, 1), (2, 1, 252), (2, 1, 254), (0, 2), (2, 1, 271), (1, 1), (2,
+1, 270), (0, 3), (2, 1, 293), (1, 1), (2, 1, 292), (0, 4)]), (166, [(1, 13), (
+0, 4), (2, 1, 127), (1, 1), (2, 1, 128), (1, 1), (3, 2), (2, 1, 125), (2, 1,
+117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 2), (3, 1), (0, 10), (2, 1,
+127), (1, 1), (2, 1, 128), (1, 1), (0, 2), (2, 1, 125), (2, 1, 117), (2, 1, 115
+), (2, 1, 107), (2, 1, 105), (3, 1), (0, 9)]), (167, [(1, 13), (0, 8), (1, 1),
+(3, 1), (2, 1, 256), (3, 1), (0, 12), (1, 1), (0, 1), (2, 1, 256), (0, 5), (3,
+1)]), (168, [(1, 13), (0, 2), (2, 1, 121), (1, 1), (2, 1, 122), (1, 1), (1, 1),
+(1, 1), (3, 4), (2, 1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105
+), (0, 13), (2, 1, 121), (1, 1), (2, 1, 122), (1, 1), (1, 1), (1, 1), (0, 4), (
+2, 1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 11)
+]), (169, [(1, 13), (0, 3), (2, 1, 127), (1, 1), (2, 1, 128), (1, 1), (3, 2), (
+2, 1, 125), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 2), (3, 1),
+(0, 10), (2, 1, 127), (1, 1), (2, 1, 128), (1, 1), (0, 2), (2, 1, 125), (2, 1,
+117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 10)]), (168, [(1, 13),
+(0, 1), (2, 1, 121), (1, 1), (2, 1, 122), (1, 1), (1, 1), (1, 1), (3, 4), (2,
+1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 13), (2, 1,
+121), (1, 1), (2, 1, 122), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 119), (2, 1,
+117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 12)]), (0, [(1, 2), (
+0, 1), (2, 1, 153), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1,
+131), (0, 2), (2, 1, 153), (2, 1, 149), (2, 1, 141), (2, 1, 139), (2, 1, 133),
+(2, 1, 131), (3, 1), (0, 1)]), (0, [(1, 2), (2, 1, 153), (2, 1, 149), (2, 1,
+141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (0, 2), (2, 1, 153), (2, 1, 149),
+(2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131), (3, 1), (0, 2)]), (0, [(1,
+1), (2, 1, 147), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2, 1, 131
+), (0, 1), (2, 1, 147), (2, 1, 143), (2, 1, 141), (2, 1, 139), (2, 1, 133), (2,
+1, 131), (3, 1), (0, 1)]), (170, [(1, 3), (3, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (171, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (172, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (173, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (174, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (175, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (176, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (177, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (178, [(1, 2), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (179, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 5), (0, 1), (2, 1, 103), (1,
+1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 5), (3, 1), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (180, [
+(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 9), (0, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 9), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2,
+1, 11), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 1), (2, 1, 11), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (0, 2)]), (181, [(1, 3), (3, 1), (0, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (182, [(1, 3), (0, 1
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (183, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (184, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1,
+23), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97),
+(0, 1), (2, 1, 23), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 25), (0, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 25), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (185, [(1,
+2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (186, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 33), (0, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 33), (3,
+1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]),
+(187, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 41), (0, 1), (2, 1, 103), (1, 1), (
+2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 41), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (188, [(1,
+2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (189, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (190, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (191, [(1, 2), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (192, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (193, [(1, 3), (3, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (194, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (195, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (196, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (197, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (198, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (199, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 67), (0, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 67), (3,
+1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]),
+(200, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (201, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102),
+(3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (152, [(1, 6), (2, 1, 321), (1, 1
+), (2, 1, 320), (3, 1), (2, 1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308),
+(2, 1, 310), (1, 1), (1, 1), (1, 1), (3, 5), (2, 1, 305), (0, 6), (2, 1, 321),
+(1, 1), (2, 1, 320), (0, 1), (2, 1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1,
+308), (2, 1, 310), (1, 1), (1, 1), (1, 1), (0, 5), (2, 1, 305), (3, 1), (0, 6)]
+), (93, [(1, 3), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (
+2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 2), (2, 1,
+319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1
+), (2, 1, 314), (2, 1, 316), (0, 4), (3, 1)]), (202, [(1, 3), (0, 1), (1, 1), (
+3, 1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312),
+(1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (0, 2), (1, 1), (0, 1), (2,
+1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (
+0, 1), (2, 1, 314), (2, 1, 316), (0, 3), (3, 1)]), (203, [(1, 3), (0, 2), (3, 1
+), (0, 3), (3, 1)]), (4, [(1, 4), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1,
+313), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (
+2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0,
+4), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (
+1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2), (2, 1, 313), (1, 1), (2, 1,
+312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 4), (3, 1)]), (155, [(1, 4
+), (1, 1), (3, 1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1),
+(2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (2, 1, 313), (1,
+1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 4), (1, 1), (0,
+1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (
+1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2), (2, 1, 313), (1, 1), (2, 1,
+312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 4), (3, 1)]), (204, [(1, 4
+), (1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1),
+(2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (2, 1, 185), (1,
+1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 4), (1, 1), (0,
+1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (
+1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 2), (2, 1, 185), (1, 1), (2, 1,
+184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 4), (3, 1)]), (205, [(1, 1
+), (1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1),
+(2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (1, 1), (0, 1),
+(2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1
+), (0, 1), (2, 1, 186), (2, 1, 188), (0, 2), (3, 1)]), (41, [(1, 4), (2, 1, 191
+), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (3, 1),
+(2, 1, 186), (2, 1, 188), (3, 2), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0,
+1), (2, 1, 186), (2, 1, 188), (0, 4), (2, 1, 191), (2, 1, 189), (2, 1, 187), (
+2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0,
+2), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188),
+(0, 4), (3, 1)]), (159, [(1, 4), (1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2,
+1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1,
+188), (3, 2), (2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (
+2, 1, 188), (0, 4), (1, 1), (0, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2,
+1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 2),
+(2, 1, 185), (1, 1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0,
+4), (3, 1)]), (161, [(1, 1), (2, 1, 221), (1, 1), (2, 1, 220), (3, 1), (2, 1,
+219), (2, 1, 217), (1, 1), (2, 1, 222), (2, 1, 224), (1, 1), (1, 1), (1, 1), (
+3, 4), (2, 1, 211), (2, 1, 209), (0, 1), (2, 1, 221), (1, 1), (2, 1, 220), (0,
+1), (2, 1, 219), (2, 1, 217), (1, 1), (2, 1, 222), (2, 1, 224), (1, 1), (1, 1),
+(1, 1), (0, 4), (2, 1, 211), (2, 1, 209), (3, 1), (0, 1)]), (161, [(1, 5), (2,
+1, 221), (1, 1), (2, 1, 220), (3, 1), (2, 1, 219), (2, 1, 217), (1, 1), (2, 1,
+222), (2, 1, 224), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 211), (2, 1, 209), (
+0, 5), (2, 1, 221), (1, 1), (2, 1, 220), (0, 1), (2, 1, 219), (2, 1, 217), (1,
+1), (2, 1, 222), (2, 1, 224), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 211), (2,
+1, 209), (3, 1), (0, 5)]), (0, [(1, 5), (0, 2), (2, 1, 225), (2, 1, 223), (2,
+1, 211), (2, 1, 209), (0, 5), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1, 209
+), (3, 1), (0, 3)]), (0, [(1, 5), (0, 4), (2, 1, 225), (2, 1, 223), (2, 1, 211
+), (2, 1, 209), (0, 5), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1, 209), (3,
+1), (0, 1)]), (0, [(1, 5), (0, 1), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2,
+1, 209), (0, 5), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1, 209), (3, 1), (
+0, 4)]), (0, [(1, 5), (0, 3), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1, 209
+), (0, 5), (2, 1, 225), (2, 1, 223), (2, 1, 211), (2, 1, 209), (3, 1), (0, 2)]
+), (163, [(1, 1), (2, 1, 237), (1, 1), (2, 1, 236), (3, 1), (2, 1, 235), (2, 1,
+233), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1,
+229), (2, 1, 227), (0, 1), (2, 1, 237), (1, 1), (2, 1, 236), (0, 1), (2, 1, 235
+), (2, 1, 233), (1, 1), (2, 1, 238), (2, 1, 240), (1, 1), (1, 1), (1, 1), (0, 4
+), (2, 1, 229), (2, 1, 227), (3, 1), (0, 1)]), (163, [(1, 5), (2, 1, 237), (1,
+1), (2, 1, 236), (3, 1), (2, 1, 235), (2, 1, 233), (1, 1), (2, 1, 238), (2, 1,
+240), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 229), (2, 1, 227), (0, 5), (2, 1,
+237), (1, 1), (2, 1, 236), (0, 1), (2, 1, 235), (2, 1, 233), (1, 1), (2, 1, 238
+), (2, 1, 240), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 229), (2, 1, 227), (3, 1
+), (0, 5)]), (0, [(1, 5), (0, 2), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1,
+227), (0, 5), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 3
+)]), (0, [(1, 5), (0, 4), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (
+0, 5), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 1)]), (
+0, [(1, 5), (0, 1), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (0, 5),
+(2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 4)]), (0, [(1,
+5), (0, 3), (2, 1, 241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (0, 5), (2, 1,
+241), (2, 1, 239), (2, 1, 229), (2, 1, 227), (3, 1), (0, 2)]), (164, [(1, 2), (
+2, 1, 273), (1, 1), (2, 1, 272), (3, 1), (2, 1, 274), (2, 1, 276), (3, 1), (0,
+1), (2, 1, 273), (1, 1), (2, 1, 272), (0, 1), (2, 1, 274), (2, 1, 276), (0, 2),
+(3, 1)]), (206, [(1, 2), (0, 1), (1, 1), (3, 1), (2, 1, 278), (3, 1), (0, 1), (
+1, 1), (0, 1), (2, 1, 278), (0, 1), (3, 1)]), (207, [(1, 2), (0, 1), (1, 1), (
+3, 1), (2, 1, 298), (3, 1), (0, 1), (1, 1), (0, 1), (2, 1, 298), (0, 1), (3, 1)
+]), (208, [(1, 3), (0, 2), (2, 1, 127), (1, 1), (2, 1, 128), (1, 1), (3, 2), (
+2, 1, 125), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 3), (2, 1,
+127), (1, 1), (2, 1, 128), (1, 1), (0, 2), (2, 1, 125), (2, 1, 117), (2, 1, 115
+), (2, 1, 107), (2, 1, 105), (3, 1), (0, 1)]), (0, [(1, 3), (0, 1), (2, 1, 129
+), (2, 1, 125), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 3), (2,
+1, 129), (2, 1, 125), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (3, 1
+), (0, 2)]), (0, [(1, 3), (2, 1, 129), (2, 1, 125), (2, 1, 117), (2, 1, 115), (
+2, 1, 107), (2, 1, 105), (0, 3), (2, 1, 129), (2, 1, 125), (2, 1, 117), (2, 1,
+115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 3)]), (209, [(1, 2), (2, 1, 256), (
+3, 1), (0, 1), (2, 1, 256), (0, 2), (3, 1)]), (210, [(1, 2), (0, 1), (2, 1, 257
+), (1, 1), (2, 1, 256), (3, 1), (2, 1, 255), (2, 1, 253), (1, 1), (2, 1, 258),
+(2, 1, 260), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 245), (2, 1, 243), (0, 2),
+(2, 1, 257), (1, 1), (2, 1, 256), (0, 1), (2, 1, 255), (2, 1, 253), (1, 1), (2,
+1, 258), (2, 1, 260), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 245), (2, 1, 243),
+(3, 1), (0, 1)]), (211, [(1, 4), (0, 1), (2, 1, 123), (2, 1, 119), (2, 1, 117),
+(2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 2), (3, 1), (0, 1), (2, 1, 123), (2,
+1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 3)]),
+(212, [(1, 4), (2, 1, 123), (2, 1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107),
+(2, 1, 105), (0, 2), (3, 1), (0, 1), (2, 1, 123), (2, 1, 119), (2, 1, 117), (2,
+1, 115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 4)]), (213, [(1, 3), (3, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (
+214, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 79), (0, 1), (2, 1, 103), (1, 1), (2,
+1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 79), (3, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (215, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (216, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (217, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (218, [(1, 2), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (219, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (220, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (221, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(
+1, 2), (2, 1, 7), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99),
+(2, 1, 97), (0, 1), (2, 1, 7), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 13), (0, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 13),
+(3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2
+)]), (222, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (223, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (224, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (225, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 29), (0, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 29), (3, 1), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (226, [(1, 2), (
+3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (
+0, 1)]), (227, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (3, 1), (0, 1)]), (228, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (
+2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (229, [(1, 2), (3, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(19, [(1, 2), (2, 1, 49), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 1), (2, 1, 49), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (230, [(1, 2), (3, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (231, [(
+1, 3), (0, 1), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (232, [(1, 3), (3, 1), (0, 1), (2, 1, 103), (1, 1), (2,
+1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (233, [(1, 2), (3, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(234, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (235, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102),
+(3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (236, [(1, 2), (3, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1,
+2), (2, 1, 63), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 1), (2, 1, 63), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (0, 2)]), (237, [(1, 2), (3, 1), (2, 1, 103), (1, 1
+), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (
+2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (238, [(1, 2), (
+3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (
+0, 1)]), (19, [(1, 2), (2, 1, 71), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (
+3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 71), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (93, [(1, 4), (0, 1), (
+2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3,
+2), (0, 3), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2,
+1, 316), (0, 4), (3, 1)]), (152, [(1, 4), (0, 3), (1, 1), (2, 1, 320), (3, 1),
+(2, 1, 307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1,
+1), (1, 1), (3, 5), (2, 1, 305), (0, 4), (1, 1), (2, 1, 320), (0, 1), (2, 1,
+307), (1, 1), (2, 1, 306), (1, 1), (2, 1, 308), (2, 1, 310), (1, 1), (1, 1), (
+1, 1), (0, 5), (2, 1, 305), (3, 1), (0, 1)]), (239, [(1, 4), (1, 1), (3, 1), (
+2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1),
+(3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1,
+1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 4), (1, 1), (0, 1), (2, 1, 319), (2,
+1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1,
+314), (2, 1, 316), (0, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (
+2, 1, 314), (2, 1, 316), (0, 4), (3, 1)]), (153, [(1, 4), (0, 2), (2, 1, 318),
+(1, 1), (1, 1), (3, 3), (0, 3), (2, 1, 318), (1, 1), (1, 1), (0, 4), (3, 1)]),
+(240, [(1, 1), (1, 1), (3, 1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1,
+313), (1, 1), (2, 1, 312), (1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (
+1, 1), (0, 1), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2,
+1, 312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 2), (3, 1)]), (205, [(1,
+4), (1, 1), (3, 1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1),
+(2, 1, 184), (1, 1), (3, 1), (2, 1, 186), (2, 1, 188), (3, 2), (2, 1, 185), (1,
+1), (2, 1, 184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 4), (1, 1), (0,
+1), (2, 1, 191), (2, 1, 189), (2, 1, 187), (2, 1, 185), (1, 1), (2, 1, 184), (
+1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 2), (2, 1, 185), (1, 1), (2, 1,
+184), (1, 1), (0, 1), (2, 1, 186), (2, 1, 188), (0, 4), (3, 1)]), (241, [(1, 2
+), (2, 1, 278), (3, 1), (0, 1), (2, 1, 278), (0, 2), (3, 1)]), (242, [(1, 2), (
+0, 1), (2, 1, 279), (1, 1), (2, 1, 278), (3, 1), (2, 1, 277), (2, 1, 275), (1,
+1), (2, 1, 280), (2, 1, 282), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 265), (2,
+1, 263), (0, 2), (2, 1, 279), (1, 1), (2, 1, 278), (0, 1), (2, 1, 277), (2, 1,
+275), (1, 1), (2, 1, 280), (2, 1, 282), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1,
+265), (2, 1, 263), (3, 1), (0, 1)]), (243, [(1, 2), (2, 1, 298), (3, 1), (0, 1
+), (2, 1, 298), (0, 2), (3, 1)]), (244, [(1, 2), (0, 1), (2, 1, 299), (1, 1), (
+2, 1, 298), (3, 1), (2, 1, 297), (2, 1, 295), (1, 1), (2, 1, 300), (2, 1, 302),
+(1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 287), (2, 1, 285), (0, 2), (2, 1, 299),
+(1, 1), (2, 1, 298), (0, 1), (2, 1, 297), (2, 1, 295), (1, 1), (2, 1, 300), (2,
+1, 302), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 287), (2, 1, 285), (3, 1), (0,
+1)]), (0, [(1, 2), (0, 1), (2, 1, 129), (2, 1, 125), (2, 1, 117), (2, 1, 115),
+(2, 1, 107), (2, 1, 105), (0, 2), (2, 1, 129), (2, 1, 125), (2, 1, 117), (2, 1,
+115), (2, 1, 107), (2, 1, 105), (3, 1), (0, 1)]), (0, [(1, 2), (2, 1, 129), (2,
+1, 125), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (0, 2), (2, 1, 129
+), (2, 1, 125), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105), (3, 1), (0,
+2)]), (210, [(1, 1), (2, 1, 257), (1, 1), (2, 1, 256), (3, 1), (2, 1, 255), (2,
+1, 253), (1, 1), (2, 1, 258), (2, 1, 260), (1, 1), (1, 1), (1, 1), (3, 4), (2,
+1, 245), (2, 1, 243), (0, 1), (2, 1, 257), (1, 1), (2, 1, 256), (0, 1), (2, 1,
+255), (2, 1, 253), (1, 1), (2, 1, 258), (2, 1, 260), (1, 1), (1, 1), (1, 1), (
+0, 4), (2, 1, 245), (2, 1, 243), (3, 1), (0, 1)]), (210, [(1, 5), (2, 1, 257),
+(1, 1), (2, 1, 256), (3, 1), (2, 1, 255), (2, 1, 253), (1, 1), (2, 1, 258), (2,
+1, 260), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 245), (2, 1, 243), (0, 5), (2,
+1, 257), (1, 1), (2, 1, 256), (0, 1), (2, 1, 255), (2, 1, 253), (1, 1), (2, 1,
+258), (2, 1, 260), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 245), (2, 1, 243), (
+3, 1), (0, 5)]), (0, [(1, 5), (0, 2), (2, 1, 261), (2, 1, 259), (2, 1, 245), (
+2, 1, 243), (0, 5), (2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1, 243), (3, 1),
+(0, 3)]), (0, [(1, 5), (0, 4), (2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1,
+243), (0, 5), (2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1, 243), (3, 1), (0, 1
+)]), (0, [(1, 5), (0, 1), (2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1, 243), (
+0, 5), (2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1, 243), (3, 1), (0, 4)]), (
+0, [(1, 5), (0, 3), (2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1, 243), (0, 5),
+(2, 1, 261), (2, 1, 259), (2, 1, 245), (2, 1, 243), (3, 1), (0, 2)]), (0, [(1,
+1), (2, 1, 123), (2, 1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2, 1, 105
+), (0, 1), (2, 1, 123), (2, 1, 119), (2, 1, 117), (2, 1, 115), (2, 1, 107), (2,
+1, 105), (3, 1), (0, 1)]), (245, [(1, 3), (3, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (246, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (247, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (248, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (249, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (250, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (251, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (252, [(1, 2), (3, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2,
+1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (253, [(1, 2), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (
+2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)
+]), (254, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (255, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 21), (0,
+1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (
+2, 1, 21), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (0, 2)]), (19, [(1, 2), (2, 1, 27), (0, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 27), (3, 1), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (
+2, 1, 37), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1,
+97), (0, 1), (2, 1, 37), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2,
+1, 99), (2, 1, 97), (0, 2)]), (256, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2,
+1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (257, [(1, 2), (3, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(19, [(1, 2), (2, 1, 47), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 1), (2, 1, 47), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 51), (0, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2,
+1, 51), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (0, 2)]), (19, [(1, 2), (2, 1, 95), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 95), (3, 1), (2, 1, 103), (1,
+1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1,
+53), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97),
+(0, 1), (2, 1, 53), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 55), (0, 1), (2, 1, 103), (1, 1),
+(2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 55), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1,
+2), (2, 1, 57), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 1), (2, 1, 57), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 59), (0, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 59),
+(3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2
+)]), (258, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99
+), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (
+2, 1, 97), (3, 1), (0, 1)]), (259, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (260, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (93, [(
+1, 4), (2, 1, 319), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312),
+(1, 1), (3, 1), (2, 1, 314), (2, 1, 316), (3, 2), (2, 1, 313), (1, 1), (2, 1,
+312), (1, 1), (0, 1), (2, 1, 314), (2, 1, 316), (0, 4), (2, 1, 319), (2, 1, 317
+), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314),
+(2, 1, 316), (0, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1,
+314), (2, 1, 316), (0, 4), (3, 1)]), (240, [(1, 4), (1, 1), (3, 1), (2, 1, 319
+), (2, 1, 317), (2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (3, 1),
+(2, 1, 314), (2, 1, 316), (3, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0,
+1), (2, 1, 314), (2, 1, 316), (0, 4), (1, 1), (0, 1), (2, 1, 319), (2, 1, 317),
+(2, 1, 315), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314), (2,
+1, 316), (0, 2), (2, 1, 313), (1, 1), (2, 1, 312), (1, 1), (0, 1), (2, 1, 314),
+(2, 1, 316), (0, 4), (3, 1)]), (242, [(1, 1), (2, 1, 279), (1, 1), (2, 1, 278),
+(3, 1), (2, 1, 277), (2, 1, 275), (1, 1), (2, 1, 280), (2, 1, 282), (1, 1), (1,
+1), (1, 1), (3, 4), (2, 1, 265), (2, 1, 263), (0, 1), (2, 1, 279), (1, 1), (2,
+1, 278), (0, 1), (2, 1, 277), (2, 1, 275), (1, 1), (2, 1, 280), (2, 1, 282), (
+1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 265), (2, 1, 263), (3, 1), (0, 1)]), (
+242, [(1, 5), (2, 1, 279), (1, 1), (2, 1, 278), (3, 1), (2, 1, 277), (2, 1, 275
+), (1, 1), (2, 1, 280), (2, 1, 282), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 265
+), (2, 1, 263), (0, 5), (2, 1, 279), (1, 1), (2, 1, 278), (0, 1), (2, 1, 277),
+(2, 1, 275), (1, 1), (2, 1, 280), (2, 1, 282), (1, 1), (1, 1), (1, 1), (0, 4),
+(2, 1, 265), (2, 1, 263), (3, 1), (0, 5)]), (0, [(1, 5), (0, 2), (2, 1, 283), (
+2, 1, 281), (2, 1, 265), (2, 1, 263), (0, 5), (2, 1, 283), (2, 1, 281), (2, 1,
+265), (2, 1, 263), (3, 1), (0, 3)]), (0, [(1, 5), (0, 4), (2, 1, 283), (2, 1,
+281), (2, 1, 265), (2, 1, 263), (0, 5), (2, 1, 283), (2, 1, 281), (2, 1, 265),
+(2, 1, 263), (3, 1), (0, 1)]), (0, [(1, 5), (0, 1), (2, 1, 283), (2, 1, 281), (
+2, 1, 265), (2, 1, 263), (0, 5), (2, 1, 283), (2, 1, 281), (2, 1, 265), (2, 1,
+263), (3, 1), (0, 4)]), (0, [(1, 5), (0, 3), (2, 1, 283), (2, 1, 281), (2, 1,
+265), (2, 1, 263), (0, 5), (2, 1, 283), (2, 1, 281), (2, 1, 265), (2, 1, 263),
+(3, 1), (0, 2)]), (244, [(1, 1), (2, 1, 299), (1, 1), (2, 1, 298), (3, 1), (2,
+1, 297), (2, 1, 295), (1, 1), (2, 1, 300), (2, 1, 302), (1, 1), (1, 1), (1, 1),
+(3, 4), (2, 1, 287), (2, 1, 285), (0, 1), (2, 1, 299), (1, 1), (2, 1, 298), (0,
+1), (2, 1, 297), (2, 1, 295), (1, 1), (2, 1, 300), (2, 1, 302), (1, 1), (1, 1),
+(1, 1), (0, 4), (2, 1, 287), (2, 1, 285), (3, 1), (0, 1)]), (244, [(1, 5), (2,
+1, 299), (1, 1), (2, 1, 298), (3, 1), (2, 1, 297), (2, 1, 295), (1, 1), (2, 1,
+300), (2, 1, 302), (1, 1), (1, 1), (1, 1), (3, 4), (2, 1, 287), (2, 1, 285), (
+0, 5), (2, 1, 299), (1, 1), (2, 1, 298), (0, 1), (2, 1, 297), (2, 1, 295), (1,
+1), (2, 1, 300), (2, 1, 302), (1, 1), (1, 1), (1, 1), (0, 4), (2, 1, 287), (2,
+1, 285), (3, 1), (0, 5)]), (0, [(1, 5), (0, 2), (2, 1, 303), (2, 1, 301), (2,
+1, 287), (2, 1, 285), (0, 5), (2, 1, 303), (2, 1, 301), (2, 1, 287), (2, 1, 285
+), (3, 1), (0, 3)]), (0, [(1, 5), (0, 4), (2, 1, 303), (2, 1, 301), (2, 1, 287
+), (2, 1, 285), (0, 5), (2, 1, 303), (2, 1, 301), (2, 1, 287), (2, 1, 285), (3,
+1), (0, 1)]), (0, [(1, 5), (0, 1), (2, 1, 303), (2, 1, 301), (2, 1, 287), (2,
+1, 285), (0, 5), (2, 1, 303), (2, 1, 301), (2, 1, 287), (2, 1, 285), (3, 1), (
+0, 4)]), (0, [(1, 5), (0, 3), (2, 1, 303), (2, 1, 301), (2, 1, 287), (2, 1, 285
+), (0, 5), (2, 1, 303), (2, 1, 301), (2, 1, 287), (2, 1, 285), (3, 1), (0, 2)]
+), (261, [(1, 3), (3, 1), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (3, 1), (0, 1)]), (262, [(1, 3), (0, 1), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 3), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2),
+(2, 1, 77), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 1), (2, 1, 77), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (0, 2)]), (263, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (
+2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (264, [(1, 2), (3, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(265, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (
+2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (3, 1), (0, 1)]), (266, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102),
+(3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1
+), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (267, [(1, 2), (3, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (268, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (269, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (270, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2),
+(2, 1, 17), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 1), (2, 1, 17), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (0, 2)]), (271, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (
+2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1,
+102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (272, [(1, 2), (3, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2,
+1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]),
+(19, [(1, 2), (2, 1, 61), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 1), (2, 1, 61), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (273, [(1, 2), (3, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (274, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 73), (0, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 73), (3, 1), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (
+2, 1, 75), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1,
+97), (0, 1), (2, 1, 75), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2,
+1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 81), (0, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 81), (3, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (
+19, [(1, 2), (2, 1, 83), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 1), (2, 1, 83), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (275, [(1, 2), (3, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (
+1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (276, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (277, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (278, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2),
+(2, 1, 93), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2,
+1, 97), (0, 1), (2, 1, 93), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 15), (0, 1), (2, 1, 103),
+(1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 15), (3, 1
+), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]),
+(19, [(1, 2), (2, 1, 43), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 1), (2, 1, 43), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1, 45), (0, 1),
+(2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2,
+1, 45), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97
+), (0, 2)]), (19, [(1, 2), (2, 1, 65), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 65), (3, 1), (2, 1, 103), (1,
+1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]), (19, [(1, 2), (2, 1,
+69), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97),
+(0, 1), (2, 1, 69), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99
+), (2, 1, 97), (0, 2)]), (279, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (
+0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 87), (0,
+1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (
+2, 1, 87), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1,
+97), (0, 2)]), (280, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1),
+(2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2,
+1, 99), (2, 1, 97), (3, 1), (0, 1)]), (281, [(1, 2), (3, 1), (2, 1, 103), (1, 1
+), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (
+2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2,
+1, 85), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 1), (2, 1, 85), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (0, 2)]), (282, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1,
+102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102),
+(0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (283, [(1, 2), (3, 1), (2, 1,
+103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103),
+(1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (284, [(
+1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97
+), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (
+3, 1), (0, 1)]), (285, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1
+), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (
+2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (286, [(1, 2), (3, 1), (2, 1, 103), (
+1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1
+), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1), (0, 1)]), (287, [(1, 2
+), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (
+0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (3, 1
+), (0, 1)]), (288, [(1, 2), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (
+2, 1, 99), (2, 1, 97), (0, 2), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1,
+99), (2, 1, 97), (3, 1), (0, 1)]), (19, [(1, 2), (2, 1, 91), (0, 1), (2, 1, 103
+), (1, 1), (2, 1, 102), (3, 1), (2, 1, 99), (2, 1, 97), (0, 1), (2, 1, 91), (3,
+1), (2, 1, 103), (1, 1), (2, 1, 102), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)]),
+(19, [(1, 2), (2, 1, 89), (0, 1), (2, 1, 103), (1, 1), (2, 1, 102), (3, 1), (2,
+1, 99), (2, 1, 97), (0, 1), (2, 1, 89), (3, 1), (2, 1, 103), (1, 1), (2, 1, 102
+), (0, 1), (2, 1, 99), (2, 1, 97), (0, 2)])], [1])
+# GENERATE END
+
+# GENERATE TOKENS BEGIN
+tokens = [-1, -1, 290, 322, 312, 297, 293, 321, 313, 318, 304, 315, 310, 288,
+303, 319, 320, 314, 292, 299, 300, 291, 294, 323, 298, 301, 263, 289, 308, 316,
+287, 309, 302, 305, 295, 317, 324, 325, 326, 296, 306, 327, 307, 328, 329, 330,
+262, 285, 258, -1, -1, -1, 259, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+259, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, -1, -1, -1, -1, -1,
+-1, -1, -1, -1, 259, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1,
+-1, 260, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 260,
+-1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+-1, 260, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, -1, -1, -1, -1, -1, -1, -1,
+-1, 311, 281, 280, 278, 279, 275, 276, 277, 282, 283, 284, 268, 267, 265, 266,
+264, 273, 274, 269, 270, 271, 272, 59, 123, -1, 125, -1, 44, 58, 61, 40, 41,
+91, -1, 93, -1, 46, 38, 33, 126, 45, 43, 42, 47, 37, 60, 62, 94, 124, 63, -1,
+-1, -1]
+# GENERATE END
+
+def yylex(root, pos, off, factory, yychunk_iter):
+ for end_pos, end_off, group_index in (
+ _dfa.yylex(root, pos, off, factory, yychunk_iter)
+ ):
+ token = tokens[group_index]
+ #print('end_pos', end_pos, 'end_off', end_off, 'group_index', group_index, 'token', token)
+ if token != -1:
+ yield end_pos, end_off, token
+
+if __name__ == '__main__':
+ import ansi_c
+ import element
+ import sys
+ import work
+ import xml.etree.ElementTree
+
+ root = element.Element('root')
+ pos = 0
+ off = 0
+ for end_pos, end_off, group_index in _dfa.yylex(
+ root,
+ pos,
+ off,
+ ansi_c.factory,
+ work.yychunk_line(root, sys.stdin)
+ ):
+ tag, kwargs = _dfa.groups[group_index]
+ if tag != '':
+ work.apply_markup(
+ root,
+ pos,
+ off,
+ end_pos,
+ end_off,
+ ansi_c.factory,
+ tag,
+ **kwargs
+ )
+ pos, off = element.to_start_relative(root, end_pos, end_off)
+ xml.etree.ElementTree.dump(root)
--- /dev/null
+#!/bin/sh
+if ../plex.git/plex.py ansi_c_lex.l ansi_c_tokens.py <ansi_c_yylex.py >ansi_c_yylex.py.new && ! diff -q ansi_c_yylex.py ansi_c_yylex.py.new
+ then
+ mv ansi_c_yylex.py.new ansi_c_yylex.py
+else
+ rm -f ansi_c_yylex.py.new
+fi
--- /dev/null
+import lr1dfa
+
+# GENERATE LALR1 BEGIN
+lalr1 = lr1dfa.LR1DFA([([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60,
+123, 124, 126, 127, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
+317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 487, -1,
+18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,
+54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 86, 88, 90,
+-1, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120], [1,
+6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72,
+74, 77, 89, 91, 93, 96, 98, 100, 105, 110, 116, 133, 135, 137, 153, 155, 161,
+162, 168, 172, 174, 176, 226, 227, 243, 245, 247, 249, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79,
+80, 81, -1, 82, 83, 84, -1, 85, 86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1,
+94, 95, 96, 97, 98, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126,
+127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327,
+328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22,
+24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13,
+18, 26, 30, 42, 44, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 101, -1]),
+([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 264],
+[-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 102, -1]), ([33, 34, 38, 39, 40, 41,
+42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+285, 286, 287, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+306, 307, 308, 309, 310, 311, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 34, 36,
+-1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1,
+110, 112, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 116, 133, 135, 137, 143, 145, 147,
+153, 155, 161, 162, 168, 172, 197, 198, 264], [-1, 61, 62, -1, 63, 64, -1, 65,
+-1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, -1, 103, -1,
+104, 87, 88, -1, 105, 106, -1, 89, -1, 90, -1, 107, -1, 108, -1]), ([33, 34,
+38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 264], [-1, 61, 62,
+-1, 63, 64, -1, 65, -1, 100, 109, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44,
+45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1,
+198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9,
+10, 12, 13, 18, 26, 30, 42, 44, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100,
+110, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30,
+42, 44, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 111, -1]), ([33, 34,
+38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 125, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 285, 286, 287, 288, 289, 290, 291, 292,
+293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+325, 326, 327, 328, 329, 330, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12,
+-1, 179, -1, 14, -1, 487, 16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 34,
+36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74,
+76, 78, 80, 82, 84, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106,
+108, 110, 112, 114, 116, 118, 120], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44,
+48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 96, 98, 100, 105,
+110, 116, 133, 135, 137, 153, 155, 161, 162, 168, 172, 174, 176, 226, 227, 243,
+245, 247, 249, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70,
+71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1, 82, 83, 84, -1, 85, 86, 87,
+88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 94, 95, 112, 97, 98, -1]), ([33, 34,
+38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 264], [-1, 61, 62,
+-1, 63, 64, -1, 65, -1, 100, 113, -1]), ([37, 39, 40, 41, 42, 48, 58, 59, 64,
+91, 92, 94, 95, 124, 125, 264, 285, 331], [-1, 3, -1, 3, -1, 3, -1, 228, 3, -1,
+3, -1, 3, -1, 3, -1, 3, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92,
+93, 95, 124, 126, 264, 285, 331], [-1, 13, -1, 13, -1, 13, -1, 13, -1, 13, -1,
+13, -1, 13, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124,
+126, 264, 285, 331], [-1, 15, -1, 15, -1, 15, -1, 15, -1, 15, -1, 15, -1, 15,
+-1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264,
+285, 331], [-1, 21, -1, 21, -1, 21, -1, 21, -1, 21, -1, 21, -1, 21, -1], [264],
+[-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1,
+23, -1, 23, -1, 23, -1, 23, -1, 23, -1, 23, -1, 23, -1], [264], [-1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 230,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 116, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326,
+327, 328, 331], [-1, 2, -1, 4, -1, 234, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20,
+22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12,
+13, 18, 26, 30, 42, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 118, -1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 234,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 119, -1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285,
+286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 265, -1, 265, -1,
+265, -1, 265, -1, 265, -1, 265, -1, 265, -1, 265, -1, 265, -1, 265, -1, 265], [
+264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331
+], [-1, 17, -1, 17, -1, 17, -1, 17, -1, 17, -1, 17, -1, 17, -1], [264], [-1]),
+([40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326,
+327, 328, 329, 330, 331], [-1, 221, -1, 221, -1, 221, -1, 221, -1, 221, -1,
+221, -1, 221, -1, 221, -1, 221, -1, 221, -1, 221], [264], [-1]), ([40, 43, 44,
+45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329,
+330, 331], [-1, 223, -1, 223, -1, 223, -1, 223, -1, 223, -1, 223, -1, 223, -1,
+223, -1, 223, -1, 223, -1, 223], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91,
+92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+225, -1, 225, -1, 225, -1, 225, -1, 225, -1, 225, -1, 225, -1, 225, -1, 225,
+-1, 225, -1, 225], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259,
+285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 229, -1, 229,
+-1, 229, -1, 229, -1, 229, -1, 229, -1, 229, -1, 229, -1, 229, -1, 229, -1, 229
+], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287,
+311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 231, -1, 231, -1, 231, -1,
+231, -1, 231, -1, 231, -1, 231, -1, 231, -1, 231, -1, 231, -1, 231], [264], [-1
+]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325,
+326, 327, 328, 329, 330, 331], [-1, 345, -1, 345, -1, 345, -1, 345, -1, 345,
+-1, 345, -1, 345, -1, 345, -1, 345, -1, 345, -1, 345], [264], [-1]), ([33, 34,
+38, 39, 40, 46, 58, 60, 91, 92, 93, 94, 126, 127, 258, 264, 265, 267, 285, 311,
+324, 329, 330, 331], [-1, 337, -1, 337, -1, 337, -1, 337, -1, 337, -1, 337, -1,
+337, -1, 337, -1, 337, -1, 337, -1, 337, -1, 337], [264], [-1]), ([33, 34, 38,
+39, 40, 46, 58, 60, 91, 92, 93, 94, 126, 127, 258, 264, 265, 267, 285, 311,
+324, 329, 330, 331], [-1, 339, -1, 339, -1, 339, -1, 339, -1, 339, -1, 339, -1,
+339, -1, 339, -1, 339, -1, 339, -1, 339, -1, 339], [264], [-1]), ([33, 34, 38,
+39, 40, 46, 58, 60, 91, 92, 93, 94, 126, 127, 258, 264, 265, 267, 285, 311,
+324, 329, 330, 331], [-1, 341, -1, 341, -1, 341, -1, 341, -1, 341, -1, 341, -1,
+341, -1, 341, -1, 341, -1, 341, -1, 341, -1, 341], [264], [-1]), ([40, 43, 44,
+45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329,
+330, 331], [-1, 251, -1, 251, -1, 251, -1, 251, -1, 251, -1, 251, -1, 251, -1,
+251, -1, 251, -1, 251, -1, 251], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91,
+92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+235, -1, 235, -1, 235, -1, 235, -1, 235, -1, 235, -1, 235, -1, 235, -1, 235,
+-1, 235, -1, 235], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259,
+285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 237, -1, 237,
+-1, 237, -1, 237, -1, 237, -1, 237, -1, 237, -1, 237, -1, 237, -1, 237, -1, 237
+], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287,
+311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 239, -1, 239, -1, 239, -1,
+239, -1, 239, -1, 239, -1, 239, -1, 239, -1, 239, -1, 239, -1, 239], [264], [-1
+]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325,
+326, 327, 328, 329, 330, 331], [-1, 241, -1, 241, -1, 241, -1, 241, -1, 241,
+-1, 241, -1, 241, -1, 241, -1, 241, -1, 241, -1, 241], [264], [-1]), ([40, 43,
+44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328,
+329, 330, 331], [-1, 247, -1, 247, -1, 247, -1, 247, -1, 247, -1, 247, -1, 247,
+-1, 247, -1, 247, -1, 247, -1, 247], [264], [-1]), ([40, 43, 44, 45, 58, 60,
+91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331],
+[-1, 249, -1, 249, -1, 249, -1, 249, -1, 249, -1, 249, -1, 249, -1, 249, -1,
+249, -1, 249, -1, 249], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258,
+259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 243, -1,
+243, -1, 243, -1, 243, -1, 243, -1, 243, -1, 243, -1, 243, -1, 243, -1, 243,
+-1, 243], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286,
+287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 245, -1, 245, -1, 245,
+-1, 245, -1, 245, -1, 245, -1, 245, -1, 245, -1, 245, -1, 245, -1, 245], [264],
+[-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324,
+325, 326, 327, 328, 329, 330, 331], [-1, 233, -1, 233, -1, 233, -1, 233, -1,
+233, -1, 233, -1, 233, -1, 233, -1, 233, -1, 233, -1, 233], [264], [-1]), ([40,
+43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327,
+328, 329, 330, 331], [-1, 253, -1, 253, -1, 253, -1, 253, -1, 253, -1, 253, -1,
+253, -1, 253, -1, 253, -1, 253, -1, 253], [264], [-1]), ([40, 43, 44, 45, 58,
+60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330,
+331], [-1, 255, -1, 255, -1, 255, -1, 255, -1, 255, -1, 255, -1, 255, -1, 255,
+-1, 255, -1, 255, -1, 255], [264], [-1]), ([123, 124, 258, 259, 331], [-1, 521,
+-1, 240, -1], [260, 262, 264], [-1, 121, -1]), ([123, 124, 258, 259, 331], [-1,
+521, -1, 244, -1], [260, 262, 264], [-1, 123, -1]), ([123, 124, 258, 259, 331],
+[-1, 521, -1, 248, -1], [260, 262, 264], [-1, 125, -1]), ([33, 34, 38, 39, 40,
+41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1,
+12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114,
+-1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68,
+70, 72, 74, 95, 96, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68, 69,
+70, 71, 72, 73, 74, 75, 76, 77, 126, -1, 127, -1]), ([58, 59, 331], [-1, 256,
+-1], [264], [-1]), ([40, 41, 331], [-1, 258, -1], [264], [-1]), ([40, 41, 331],
+[-1, 260, -1], [264], [-1]), ([40, 41, 331], [-1, 262, -1], [264], [-1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 312, 313, 314, 315, 316, 317,
+318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1,
+6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1,
+30, 32, -1, 36, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 227, 243, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79,
+80, 81, -1, 132, -1]), ([40, 41, 331], [-1, 266, -1], [264], [-1]), ([258, 259,
+331], [-1, 268, -1], [264], [-1]), ([59, 60, 331], [-1, 270, -1], [264], [-1]),
+([59, 60, 331], [-1, 272, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43,
+44, 45, 46, 59, 60, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12,
+-1, 179, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1,
+114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66,
+68, 70, 72, 74, 77, 89, 91, 93, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66,
+67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 137, 81, -1]), ([40,
+41, 331], [-1, 276, -1], [264], [-1]), ([40, 41, 331], [-1, 278, -1], [264], [
+-1]), ([40, 41, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324,
+325, 326, 327, 328, 329, 330, 331], [-1, 280, 343, -1, 343, -1, 343, -1, 343,
+-1, 343, -1, 343, -1, 343, -1, 343, -1, 343, -1, 343, -1, 343], [264], [-1]), (
+[40, 41, 331], [-1, 282, -1], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92,
+258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+347, -1, 347, -1, 347, -1, 347, -1, 347, -1, 347, -1, 347, -1, 347, -1, 347,
+-1, 347, -1, 347], [264], [-1]), ([40, 41, 331], [-1, 284, -1], [264], [-1]), (
+[40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326,
+327, 328, 329, 330, 331], [-1, 227, -1, 227, -1, 227, -1, 227, -1, 227, -1,
+227, -1, 227, -1, 227, -1, 227, -1, 227, -1, 227], [264], [-1]), ([37, 39, 40,
+48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 37, -1, 37, -1, 37,
+-1, 37, -1, 37, -1, 37, -1, 37, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64,
+91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 5, -1, 5, -1, 5, -1, 5, -1, 5,
+-1, 5, -1, 5, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124,
+126, 264, 285, 331], [-1, 7, -1, 7, -1, 7, -1, 7, -1, 7, -1, 7, -1, 7, -1], [
+264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331
+], [-1, 11, -1, 11, -1, 11, -1, 11, -1, 11, -1, 11, -1, 11, -1], [264], [-1]),
+([37, 39, 40, 41, 46, 47, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 265, 266,
+267, 285, 331], [-1, 61, -1, 286, 61, 288, 61, -1, 61, -1, 290, -1, 61, -1, 61,
+-1, 292, 294, 296, 61, -1], [264], [-1]), ([37, 39, 41, 46, 47, 48, 58, 61, 62,
+64, 93, 95, 124, 126, 267, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+285, 331], [-1, 85, -1, 85, -1, 85, -1, 85, 298, 85, -1, 85, -1, 85, -1, 85,
+300, 302, 304, 306, 308, 310, 312, 314, 316, 318, -1], [264], [-1]), ([37, 39,
+41, 46, 47, 48, 58, 61, 62, 64, 93, 95, 124, 126, 267, 275, 331], [-1, 89, -1,
+89, -1, 89, -1, 89, -1, 89, -1, 89, -1, 89, -1, 89, -1], [264], [-1]), ([37,
+38, 39, 41, 42, 43, 46, 47, 48, 58, 61, 62, 64, 93, 95, 124, 126, 267, 275, 331
+], [-1, 320, 97, -1, 97, 322, 97, -1, 324, -1, 97, -1, 97, -1, 97, -1, 97, -1,
+97, -1], [264], [-1]), ([38, 39, 41, 42, 43, 44, 45, 46, 58, 61, 62, 64, 93,
+95, 124, 126, 267, 275, 331], [-1, 103, -1, 103, -1, 326, 103, 328, -1, 103,
+-1, 103, -1, 103, -1, 103, -1, 103, -1], [264], [-1]), ([38, 39, 41, 42, 44,
+45, 58, 61, 62, 64, 93, 95, 124, 126, 267, 268, 269, 275, 331], [-1, 109, -1,
+109, -1, 109, -1, 109, -1, 109, -1, 109, -1, 109, -1, 330, 332, 109, -1], [264
+], [-1]), ([38, 39, 41, 42, 44, 45, 58, 60, 61, 62, 63, 64, 93, 95, 124, 126,
+269, 270, 271, 275, 331], [-1, 119, -1, 119, -1, 119, -1, 119, 334, -1, 336,
+119, -1, 119, -1, 119, -1, 338, 340, 119, -1], [264], [-1]), ([38, 39, 41, 42,
+44, 45, 58, 60, 63, 64, 93, 95, 124, 126, 271, 272, 273, 275, 331], [-1, 125,
+-1, 125, -1, 125, -1, 125, -1, 125, -1, 125, -1, 125, -1, 342, 344, 125, -1], [
+264], [-1]), ([38, 39, 41, 42, 44, 45, 58, 60, 63, 64, 93, 95, 124, 126, 273,
+275, 331], [-1, 346, -1, 129, -1, 129, -1, 129, -1, 129, -1, 129, -1, 129, -1,
+129, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94, 95, 124, 126,
+273, 275, 331], [-1, 133, -1, 133, -1, 133, -1, 133, -1, 133, 348, -1, 133, -1,
+133, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94, 124, 125,
+126, 273, 275, 331], [-1, 137, -1, 137, -1, 137, -1, 137, -1, 137, -1, 350,
+137, -1, 137, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94, 125,
+126, 273, 274, 275, 331], [-1, 141, -1, 141, -1, 141, -1, 141, -1, 141, -1,
+141, -1, 352, 141, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94,
+125, 126, 274, 275, 331], [-1, 145, -1, 145, -1, 145, -1, 354, -1, 145, -1,
+145, -1, 356, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94, 125, 126,
+331], [-1, 155, -1, 155, -1, 155, -1, 155, -1, 155, -1], [264], [-1]), ([41,
+42, 44, 45, 58, 60, 93, 94, 331], [-1, 183, -1, 183, -1, 183, -1, 183, -1], [
+264], [-1]), ([59, 60, 331], [-1, 358, -1], [264], [-1]), ([41, 42, 44, 45, 59,
+60, 331], [-1, 181, -1, 360, -1, 181, -1], [264], [-1]), ([33, 34, 38, 39, 40,
+41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267,
+285, 311, 312, 315, 316, 331], [-1, 495, -1, 495, -1, 495, -1, 495, -1, 495,
+-1, 495, -1, 495, -1, 495, -1, 495, -1, 495, -1, 495, -1, 495, -1, 495, -1, 495
+], [264], [-1]), ([40, 41, 42, 43, 59, 60, 258, 259, 285, 286, 287, 288, 289,
+290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+306, 307, 308, 309, 310, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+362, -1, 364, -1, 211, -1, 366, -1, 34, -1, 38, 40, 42, 44, 46, 48, 50, 52, 54,
+56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 108, -1, 112,
+-1, 116, -1, 120], [100, 105, 107, 109, 110, 116, 133, 135, 137, 153, 155, 161,
+162, 168, 172, 174, 176, 178, 180, 185, 264], [-1, 184, 185, 186, 187, 85, 86,
+87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 188, 189, -1]), ([40, 43, 44, 45,
+59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329,
+330, 331], [-1, 197, -1, 197, -1, 197, -1, 197, -1, 197, -1, 197, -1, 197, -1,
+197, -1, 197, -1, 197, -1, 197], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91,
+92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+201, -1, 201, -1, 201, -1, 201, -1, 201, -1, 201, -1, 201, -1, 201, -1, 201,
+-1, 201, -1, 201], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259,
+285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 203, -1, 203,
+-1, 203, -1, 203, -1, 203, -1, 203, -1, 203, -1, 203, -1, 203, -1, 203, -1, 203
+], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287,
+311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 259, -1, 259, -1, 259, -1,
+259, -1, 259, -1, 259, -1, 259, -1, 259, -1, 259, -1, 259, -1, 259], [264], [-1
+]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325,
+326, 327, 328, 329, 330, 331], [-1, 261, -1, 261, -1, 261, -1, 261, -1, 261,
+-1, 261, -1, 261, -1, 261, -1, 261, -1, 261, -1, 261], [264], [-1]), ([40, 43,
+44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328,
+329, 330, 331], [-1, 263, -1, 263, -1, 263, -1, 263, -1, 263, -1, 263, -1, 263,
+-1, 263, -1, 263, -1, 263, -1, 263], [264], [-1]), ([40, 43, 44, 45, 58, 60,
+91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331],
+[-1, 257, -1, 257, -1, 257, -1, 257, -1, 257, -1, 257, -1, 257, -1, 257, -1,
+257, -1, 257, -1, 257], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258,
+259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 205, -1,
+205, -1, 205, -1, 205, -1, 205, -1, 205, -1, 205, -1, 205, -1, 205, -1, 205,
+-1, 205], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286,
+287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 207, -1, 207, -1, 207,
+-1, 207, -1, 207, -1, 207, -1, 207, -1, 207, -1, 207, -1, 207, -1, 207], [264],
+[-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324,
+325, 326, 327, 328, 329, 330, 331], [-1, 209, -1, 209, -1, 209, -1, 209, -1,
+209, -1, 209, -1, 209, -1, 209, -1, 209, -1, 209, -1, 209], [264], [-1]), ([33,
+34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258,
+264, 265, 267, 285, 311, 312, 315, 316, 331], [-1, 195, -1, 195, -1, 195, -1,
+195, -1, 195, -1, 195, -1, 195, -1, 195, -1, 195, -1, 195, -1, 195, -1, 195,
+-1, 195, -1, 195], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59,
+60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 315, 316,
+331], [-1, 497, -1, 497, -1, 497, -1, 497, -1, 497, -1, 497, -1, 497, -1, 497,
+-1, 497, -1, 497, -1, 497, -1, 497, -1, 497, -1, 497], [264], [-1]), ([256,
+257, 331], [-1, 1, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45,
+46, 59, 60, 123, 124, 125, 126, 127, 256, 257, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
+313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
+329, 330, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1,
+489, 16, -1, 489, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 34, 36, 38, 40,
+42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80,
+82, 84, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112,
+114, 116, 118, 120], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 96, 98, 100, 105, 110, 116, 133,
+135, 137, 153, 155, 161, 162, 168, 172, 174, 176, 226, 227, 243, 247, 249, 264
+], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+76, 77, 78, -1, 79, 80, 81, -1, 82, 83, 84, -1, 85, 86, 87, 88, -1, 89, -1, 90,
+-1, 91, 92, 93, -1, 94, 95, -1, 190, -1]), ([33, 34, 38, 39, 40, 41, 42, 44,
+45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311,
+312, 315, 316, 331], [-1, 491, -1, 491, -1, 491, -1, 491, -1, 491, -1, 491, -1,
+491, -1, 491, -1, 491, -1, 491, -1, 491, -1, 491, -1, 491, -1, 491], [264], [-1
+]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 3,
+-1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1], [264], [-1]), ([37, 39, 41, 46,
+47, 48, 58, 64, 93, 95, 124, 126, 267, 285, 331], [-1, 85, -1, 85, -1, 85, -1,
+85, -1, 85, -1, 85, -1, 85, -1], [264], [-1]), ([37, 39, 41, 46, 47, 48, 58,
+64, 93, 95, 124, 126, 267, 285, 331], [-1, 77, -1, 77, -1, 77, -1, 77, -1, 77,
+-1, 77, -1, 77, -1], [264], [-1]), ([37, 39, 41, 46, 47, 48, 58, 64, 93, 95,
+124, 126, 267, 285, 331], [-1, 67, -1, 67, -1, 67, -1, 67, -1, 67, -1, 67, -1,
+67, -1], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 382, -1, 360, -1], [264], [
+-1]), ([40, 43, 58, 60, 91, 92, 258, 259, 285, 286, 293, 311, 326, 327, 331], [
+-1, 291, -1, 291, -1, 291, -1, 291, -1, 291, -1, 291, -1, 291, -1], [264], [-1]
+), ([40, 41, 42, 43, 58, 59, 91, 92, 285, 286, 293, 294, 295, 296, 297, 298,
+299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 326, 327, 331
+], [-1, 384, 401, 386, -1, 401, -1, 388, -1, 34, -1, 50, 52, 54, 56, 58, 60,
+62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 112, -1], [116, 133, 135,
+137, 145, 147, 153, 155, 161, 162, 168, 172, 198, 200, 202, 210, 264], [-1,
+104, 87, 88, -1, 195, -1, 89, -1, 90, -1, 107, -1, 196, 197, 198, -1]), ([40,
+43, 58, 60, 91, 92, 258, 259, 285, 286, 293, 311, 326, 327, 331], [-1, 287, -1,
+287, -1, 287, -1, 287, -1, 287, -1, 287, -1, 287, -1], [264], [-1]), ([40, 43,
+58, 60, 91, 92, 258, 259, 285, 286, 293, 311, 326, 327, 331], [-1, 293, -1,
+293, -1, 293, -1, 293, -1, 293, -1, 293, -1, 293, -1], [264], [-1]), ([41, 42,
+331], [-1, 398, -1], [264], [-1]), ([37, 39, 41, 46, 47, 48, 58, 64, 93, 95,
+124, 126, 267, 285, 331], [-1, 69, -1, 69, -1, 69, -1, 69, -1, 69, -1, 69, -1,
+69, -1], [264], [-1]), ([37, 39, 41, 46, 47, 48, 58, 64, 93, 95, 124, 126, 267,
+285, 331], [-1, 71, -1, 71, -1, 71, -1, 71, -1, 71, -1, 71, -1, 71, -1], [264],
+[-1]), ([37, 39, 41, 46, 47, 48, 58, 64, 93, 95, 124, 126, 267, 285, 331], [-1,
+73, -1, 73, -1, 73, -1, 73, -1, 73, -1, 73, -1, 73, -1], [264], [-1]), ([125,
+126, 331], [-1, 400, -1], [264], [-1]), ([37, 39, 41, 46, 47, 48, 58, 64, 93,
+95, 124, 126, 267, 285, 331], [-1, 75, -1, 75, -1, 75, -1, 75, -1, 75, -1, 75,
+-1, 75, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59,
+60, 123, 124, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286,
+287, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
+327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1,
+16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 86, 88, 90, -1, 92, 94,
+96, 98, 100, 102, 104, 106, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18,
+26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93,
+227, 243, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71,
+72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1, 201, -1]), ([33, 34, 38, 39,
+40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265,
+266, 267, 285, 286, 287, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+304, 305, 306, 307, 308, 309, 310, 311, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 34, 36, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80,
+82, 84, -1, 110, 112, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48,
+51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 116, 133, 135, 137,
+143, 145, 147, 153, 155, 161, 162, 168, 172, 197, 198, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79,
+-1, 103, -1, 104, 87, 88, -1, 105, 106, -1, 89, -1, 90, -1, 107, -1, 202, -1]),
+([37, 39, 41, 46, 47, 48, 58, 64, 93, 95, 124, 126, 267, 285, 331], [-1, 79,
+-1, 79, -1, 79, -1, 79, -1, 79, -1, 79, -1, 79, -1], [264], [-1]), ([33, 34,
+38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 285, 286, 287, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 34, 36, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74,
+76, 78, 80, 82, 84, -1, 110, 112, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30,
+42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 116, 133,
+135, 137, 143, 145, 147, 153, 155, 161, 162, 168, 172, 197, 198, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 79, -1, 103, -1, 104, 87, 88, -1, 105, 106, -1, 89, -1, 90, -1, 107, -1,
+203, -1]), ([37, 39, 41, 46, 47, 48, 58, 64, 93, 95, 124, 126, 267, 285, 331],
+[-1, 63, -1, 63, -1, 63, -1, 63, -1, 63, -1, 63, -1, 63, -1], [264], [-1]), ([
+37, 39, 41, 46, 47, 48, 58, 64, 93, 95, 124, 126, 267, 285, 331], [-1, 65, -1,
+65, -1, 65, -1, 65, -1, 65, -1, 65, -1, 65, -1], [264], [-1]), ([40, 43, 44,
+45, 58, 60, 91, 92, 123, 124, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327,
+328, 329, 330, 331], [-1, 269, -1, 269, -1, 269, -1, 269, -1, 523, -1, 269, -1,
+269, -1, 269, -1, 269, -1, 269, -1, 269, -1, 269], [264], [-1]), ([123, 124,
+331], [-1, 408, -1], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 123, 124,
+258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+273, -1, 273, -1, 273, -1, 273, -1, 523, -1, 273, -1, 273, -1, 273, -1, 273,
+-1, 273, -1, 273, -1, 273], [264], [-1]), ([123, 124, 331], [-1, 410, -1], [264
+], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 123, 124, 258, 259, 285, 286, 287,
+311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 309, -1, 309, -1, 309, -1,
+309, -1, 523, -1, 309, -1, 309, -1, 309, -1, 309, -1, 309, -1, 309, -1, 309], [
+264], [-1]), ([123, 124, 331], [-1, 412, -1], [264], [-1]), ([41, 42, 44, 45,
+58, 60, 93, 94, 125, 126, 331], [-1, 191, -1, 191, -1, 191, -1, 191, -1, 191,
+-1], [264], [-1]), ([58, 59, 331], [-1, 414, -1], [264], [-1]), ([33, 34, 38,
+39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 312, 313, 314, 315, 316, 317, 318, 319,
+320, 321, 322, 323, 324, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8,
+10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, -1, 110, -1,
+114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66,
+68, 70, 72, 74, 77, 89, 91, 93, 227, 243, 264], [-1, 61, 62, -1, 63, 64, -1,
+65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1,
+208, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30,
+42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 264], [-1,
+61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+78, -1, 79, -1, 209, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126,
+127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327,
+328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22,
+24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13,
+18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93,
+264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+75, 76, 77, 78, -1, 79, -1, 210, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44,
+45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1,
+198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9,
+10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77,
+89, 91, 93, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71,
+72, 73, 74, 75, 76, 77, 78, -1, 79, -1, 211, -1]), ([317, 318, 331], [-1, 424,
+-1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 126,
+127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 285, 286, 287, 288, 289,
+290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+306, 307, 308, 309, 310, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 2,
+-1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64,
+66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 108, 110, 112, 114, 116, 118, 120],
+[1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70,
+72, 74, 77, 89, 91, 93, 96, 98, 100, 105, 110, 116, 133, 135, 137, 153, 155,
+161, 162, 168, 172, 174, 176, 226, 227, 264], [-1, 61, 62, -1, 63, 64, -1, 65,
+-1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 213, 81, -1,
+214, 83, 84, -1, 85, 86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 94, -1]),
+([59, 60, 331], [-1, 430, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44,
+45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311,
+312, 331], [-1, 481, -1, 481, -1, 481, -1, 481, -1, 481, -1, 481, -1, 481, -1,
+481, -1, 481, -1, 481, -1, 481, -1, 481, -1, 481], [264], [-1]), ([33, 34, 38,
+39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264,
+265, 267, 285, 311, 312, 331], [-1, 483, -1, 483, -1, 483, -1, 483, -1, 483,
+-1, 483, -1, 483, -1, 483, -1, 483, -1, 483, -1, 483, -1, 483, -1, 483], [264],
+[-1]), ([59, 60, 331], [-1, 432, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41,
+42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+285, 286, 287, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+306, 307, 308, 309, 310, 311, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 34, 36,
+-1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1,
+110, 112, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 95, 96, 116, 133, 135, 137, 143, 145, 147, 153,
+155, 161, 162, 168, 172, 197, 198, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1,
+100, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 126, -1, 217, -1, 104, 87, 88,
+-1, 105, 106, -1, 89, -1, 90, -1, 107, -1, 218, -1]), ([285, 286, 293, 294,
+295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+311, 326, 327, 331], [-1, 34, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70,
+72, 74, 76, 78, 80, 82, 84, -1, 112, -1], [116, 133, 135, 137, 143, 145, 147,
+153, 155, 161, 162, 168, 172, 197, 198, 264], [-1, 104, 87, 88, -1, 105, 106,
+-1, 89, -1, 90, -1, 107, -1, 219, -1]), ([285, 286, 293, 294, 295, 296, 297,
+298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 326, 327,
+331], [-1, 34, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
+80, 82, 84, -1, 112, -1], [116, 133, 135, 137, 143, 145, 147, 153, 155, 161,
+162, 168, 172, 197, 198, 264], [-1, 104, 87, 88, -1, 105, 106, -1, 89, -1, 90,
+-1, 107, -1, 220, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 221, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 95, 96, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 100, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+126, -1, 222, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, 53, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+28, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1,
+61, 62, -1, 63, 64, -1, 65, 223, 224, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+76, 77, 78, -1, 225, -1]), ([258, 259, 331], [-1, 452, -1], [264], [-1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 264], [-1, 61, 62, -1, 63, 64, -1,
+65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, -1, 227, -1
+]), ([258, 259, 331], [-1, 456, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64,
+91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 47, -1, 47, -1, 47, -1, 47, -1,
+47, -1, 47, -1, 47, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93,
+95, 124, 126, 264, 285, 331], [-1, 49, -1, 49, -1, 49, -1, 49, -1, 49, -1, 49,
+-1, 49, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126,
+127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327,
+328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22,
+24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13,
+18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [
+-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+77, 78, -1, 229, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 230, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 231, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 232, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 233, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 234, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 235, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 236, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 237, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 238, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 239, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 240, -1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 264], [-1, 61, 62,
+-1, 63, 64, -1, 65, -1, 100, 241, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44,
+45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1,
+198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9,
+10, 12, 13, 18, 26, 30, 42, 44, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100,
+242, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30,
+42, 44, 48, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 243, -1]), ([
+33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262,
+263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1,
+6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36,
+-1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 264], [-1,
+61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 244, -1]), ([33, 34, 38, 39, 40, 41,
+42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12,
+-1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1],
+[1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 264], [-1, 61, 62, -1, 63,
+64, -1, 65, -1, 100, 67, 68, 245, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44,
+45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1,
+198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9,
+10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 264], [-1, 61, 62, -1, 63, 64, -1, 65,
+-1, 100, 67, 68, 246, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126,
+127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327,
+328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22,
+24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13,
+18, 26, 30, 42, 44, 48, 51, 54, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100,
+67, 68, 69, 247, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68,
+69, 248, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68,
+69, 249, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68,
+69, 250, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67,
+68, 69, 70, 251, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67,
+68, 69, 70, 252, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100,
+67, 68, 69, 70, 71, 253, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326,
+327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20,
+22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12,
+13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 264], [-1, 61, 62, -1, 63, 64,
+-1, 65, -1, 100, 67, 68, 69, 70, 71, 72, 254, -1]), ([33, 34, 38, 39, 40, 41,
+42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12,
+-1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1],
+[1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 264], [
+-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68, 69, 70, 71, 72, 73, 255, -1]),
+([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48,
+51, 54, 59, 62, 64, 66, 68, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67,
+68, 69, 70, 71, 72, 73, 74, 256, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44,
+45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1,
+198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9,
+10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77,
+89, 91, 93, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71,
+72, 73, 74, 75, 76, 77, 78, -1, 79, -1, 257, -1]), ([33, 34, 38, 39, 40, 41,
+42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12,
+-1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1],
+[1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70,
+264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68, 69, 70, 71, 72, 73, 74,
+75, 258, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125,
+127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1, 463, -1, 463, -1,
+463, -1, 463, -1, 463, -1, 463, -1, 463, -1, 463, -1, 463, -1, 463, -1, 463,
+-1, 463, -1, 463], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326,
+327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20,
+22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12,
+13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264
+], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+76, 77, 78, -1, 259, -1]), ([40, 41, 42, 43, 258, 259, 331], [-1, 362, -1, 364,
+-1, 366, -1], [178, 180, 185, 264], [-1, 260, 189, -1]), ([40, 41, 42, 43, 258,
+259, 293, 294, 295, 296, 326, 327, 331], [-1, 371, -1, 371, -1, 371, -1, 50,
+52, 54, -1, 522, -1], [168, 172, 185, 187, 189, 264], [-1, 262, -1, 263, 264,
+-1]), ([40, 42, 44, 45, 58, 60, 61, 62, 91, 92, 331], [-1, 361, -1, 361, -1,
+361, -1, 361, -1, 361, -1], [264], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92,
+258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+199, -1, 199, -1, 199, -1, 199, -1, 199, -1, 199, -1, 199, -1, 199, -1, 199,
+-1, 199, -1, 199], [264], [-1]), ([59, 60, 331], [-1, 530, -1], [264], [-1]), (
+[44, 45, 59, 60, 331], [-1, 532, -1, 213, -1], [264], [-1]), ([44, 45, 59, 60,
+331], [-1, 215, -1, 215, -1], [264], [-1]), ([44, 45, 59, 60, 61, 62, 331], [
+-1, 421, -1, 421, -1, 534, -1], [210, 212, 264], [-1, 268, -1]), ([40, 41, 42,
+44, 45, 58, 60, 61, 62, 91, 92, 331], [-1, 538, 357, -1, 357, -1, 357, -1, 357,
+-1, 540, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60,
+123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 315, 316, 331
+], [-1, 493, -1, 493, -1, 493, -1, 493, -1, 493, -1, 493, -1, 493, -1, 493, -1,
+493, -1, 493, -1, 493, -1, 493, -1, 493, -1, 493], [264], [-1]), ([37, 39, 40,
+48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 9, -1, 9, -1, 9, -1,
+9, -1, 9, -1, 9, -1, 9, -1], [264], [-1]), ([40, 41, 42, 43, 91, 92, 285, 286,
+287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
+303, 304, 305, 306, 307, 308, 309, 310, 311, 324, 325, 326, 327, 328, 329, 330,
+331], [-1, 384, 542, 544, -1, 388, -1, 34, -1, 38, 40, 42, 44, 46, 48, 50, 52,
+54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 108, -1,
+112, -1, 116, -1, 120], [98, 100, 105, 110, 116, 133, 135, 137, 153, 155, 161,
+162, 168, 172, 174, 176, 189, 191, 193, 202, 210, 264], [-1, 273, 84, -1, 85,
+86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 274, 275, -1, 276, -1]), ([40,
+43, 58, 59, 91, 92, 293, 294, 295, 296, 326, 327, 331], [-1, 371, -1, 371, -1,
+371, -1, 50, 52, 54, -1, 522, -1], [168, 172, 185, 187, 189, 264], [-1, 262,
+-1, 277, 264, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 93, 94, 126, 127,
+258, 264, 265, 267, 286, 287, 289, 290, 293, 294, 295, 296, 325, 326, 327, 328,
+331], [-1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325,
+-1, 325, -1, 325, -1, 556, -1, 50, 52, 54, -1, 325, 522, 325, -1], [162, 164,
+166, 168, 172, 264], [-1, 279, 280, 281, 282, -1]), ([40, 43, 58, 60, 91, 92,
+258, 259, 285, 286, 293, 311, 326, 327, 331], [-1, 289, -1, 289, -1, 289, -1,
+289, -1, 289, -1, 289, -1, 289, -1], [264], [-1]), ([41, 42, 58, 59, 331], [-1,
+395, -1, 395, -1], [264], [-1]), ([41, 42, 44, 45, 58, 59, 331], [-1, 397, -1,
+397, -1, 397, -1], [264], [-1]), ([40, 41, 42, 44, 45, 58, 59, 91, 92, 331], [
+-1, 566, 403, -1, 403, -1, 403, -1, 568, -1], [264], [-1]), ([33, 34, 38, 39,
+40, 41, 42, 43, 44, 45, 46, 123, 124, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 570, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 264],
+[-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 286, -1]), ([33, 34, 38, 39, 40, 41,
+42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285,
+311, 312, 331], [-1, 461, -1, 461, -1, 461, -1, 461, -1, 461, -1, 461, -1, 461,
+-1, 461, -1, 461, -1, 461, -1, 461, -1, 461, -1, 461], [264], [-1]), ([33, 34,
+38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264,
+265, 267, 285, 311, 312, 331], [-1, 455, -1, 455, -1, 455, -1, 455, -1, 455,
+-1, 455, -1, 455, -1, 455, -1, 455, -1, 455, -1, 455, -1, 455, -1, 455], [264],
+[-1]), ([41, 42, 331], [-1, 574, -1], [264], [-1]), ([41, 42, 331], [-1, 576,
+-1], [264], [-1]), ([125, 126, 285, 286, 293, 294, 295, 296, 297, 298, 299,
+300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 326, 327, 329, 330,
+331], [-1, 275, -1, 34, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74,
+76, 78, 80, 82, 84, -1, 112, -1, 118, -1], [116, 133, 135, 137, 139, 141, 143,
+145, 147, 153, 155, 161, 162, 168, 172, 226, 227, 264], [-1, 104, 87, 88, 289,
+290, 291, 292, 106, -1, 89, -1, 90, -1, 107, -1, 293, -1]), ([125, 126, 285,
+286, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+308, 309, 310, 311, 326, 327, 329, 330, 331], [-1, 275, -1, 34, -1, 50, 52, 54,
+56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 112, -1, 118,
+-1], [116, 133, 135, 137, 139, 141, 143, 145, 147, 153, 155, 161, 162, 168,
+172, 226, 227, 264], [-1, 104, 87, 88, 294, 290, 291, 292, 106, -1, 89, -1, 90,
+-1, 107, -1, 293, -1]), ([125, 126, 258, 259, 331], [-1, 311, -1, 590, -1], [9,
+10, 155, 158, 160, 161, 264], [-1, 296, -1, 297, 298, 299, -1]), ([33, 34, 38,
+39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 312, 313, 314, 315, 316, 317, 318, 319,
+320, 321, 322, 323, 324, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8,
+10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, -1, 110, -1,
+114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66,
+68, 70, 72, 74, 77, 89, 91, 93, 227, 243, 264], [-1, 61, 62, -1, 63, 64, -1,
+65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1,
+300, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125,
+127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1, 459, -1, 459, -1,
+459, -1, 459, -1, 459, -1, 459, -1, 459, -1, 459, -1, 459, -1, 459, -1, 459,
+-1, 459, -1, 459], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 602, -1, 360, -1
+], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 604, -1, 360, -1], [264], [-1]),
+([41, 42, 44, 45, 331], [-1, 606, -1, 360, -1], [264], [-1]), ([40, 41, 331], [
+-1, 608, -1], [264], [-1]), ([59, 60, 331], [-1, 610, -1], [264], [-1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1,
+30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42,
+44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 79, 306, 81, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123,
+124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1, 479, -1,
+479, -1, 479, -1, 479, -1, 479, -1, 479, -1, 479, -1, 479, -1, 479, -1, 479,
+-1, 479, -1, 479, -1, 479], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45,
+46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312,
+331], [-1, 485, -1, 485, -1, 485, -1, 485, -1, 485, -1, 485, -1, 485, -1, 485,
+-1, 485, -1, 485, -1, 485, -1, 485, -1, 485], [264], [-1]), ([41, 42, 331], [
+-1, 614, -1], [264], [-1]), ([41, 42, 331], [-1, 616, -1], [264], [-1]), ([41,
+42, 331], [-1, 618, -1], [264], [-1]), ([41, 42, 331], [-1, 620, -1], [264], [
+-1]), ([44, 45, 331], [-1, 622, -1], [264], [-1]), ([44, 45, 331], [-1, 624, -1
+], [264], [-1]), ([41, 42, 331], [-1, 626, -1], [264], [-1]), ([41, 42, 44, 45,
+331], [-1, 55, -1, 628, -1], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 57, -1,
+57, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264,
+285, 331], [-1, 43, -1, 43, -1, 43, -1, 43, -1, 43, -1, 43, -1, 43, -1], [264],
+[-1]), ([44, 45, 93, 94, 331], [-1, 360, -1, 630, -1], [264], [-1]), ([37, 39,
+40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 45, -1, 45, -1,
+45, -1, 45, -1, 45, -1, 45, -1, 45, -1], [264], [-1]), ([41, 42, 44, 45, 58,
+60, 93, 94, 125, 126, 331], [-1, 157, -1, 157, -1, 157, -1, 157, -1, 157, -1],
+[264], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94, 125, 126, 331], [-1, 159, -1,
+159, -1, 159, -1, 159, -1, 159, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60,
+93, 94, 125, 126, 331], [-1, 161, -1, 161, -1, 161, -1, 161, -1, 161, -1], [264
+], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94, 125, 126, 331], [-1, 163, -1, 163,
+-1, 163, -1, 163, -1, 163, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94,
+125, 126, 331], [-1, 165, -1, 165, -1, 165, -1, 165, -1, 165, -1], [264], [-1]
+), ([41, 42, 44, 45, 58, 60, 93, 94, 125, 126, 331], [-1, 167, -1, 167, -1,
+167, -1, 167, -1, 167, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94,
+125, 126, 331], [-1, 169, -1, 169, -1, 169, -1, 169, -1, 169, -1], [264], [-1]
+), ([41, 42, 44, 45, 58, 60, 93, 94, 125, 126, 331], [-1, 171, -1, 171, -1,
+171, -1, 171, -1, 171, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94,
+125, 126, 331], [-1, 173, -1, 173, -1, 173, -1, 173, -1, 173, -1], [264], [-1]
+), ([41, 42, 44, 45, 58, 60, 93, 94, 125, 126, 331], [-1, 175, -1, 175, -1,
+175, -1, 175, -1, 175, -1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 93, 94,
+125, 126, 331], [-1, 177, -1, 177, -1, 177, -1, 177, -1, 177, -1], [264], [-1]
+), ([37, 39, 41, 46, 47, 48, 58, 61, 62, 64, 93, 95, 124, 126, 267, 275, 331],
+[-1, 95, -1, 95, -1, 95, -1, 95, -1, 95, -1, 95, -1, 95, -1, 95, -1], [264], [
+-1]), ([37, 39, 41, 46, 47, 48, 58, 61, 62, 64, 93, 95, 124, 126, 267, 275, 331
+], [-1, 91, -1, 91, -1, 91, -1, 91, -1, 91, -1, 91, -1, 91, -1, 91, -1], [264],
+[-1]), ([37, 39, 41, 46, 47, 48, 58, 61, 62, 64, 93, 95, 124, 126, 267, 275,
+331], [-1, 93, -1, 93, -1, 93, -1, 93, -1, 93, -1, 93, -1, 93, -1, 93, -1], [
+264], [-1]), ([37, 38, 39, 41, 42, 43, 46, 47, 48, 58, 61, 62, 64, 93, 95, 124,
+126, 267, 275, 331], [-1, 320, 99, -1, 99, 322, 99, -1, 324, -1, 99, -1, 99,
+-1, 99, -1, 99, -1, 99, -1], [264], [-1]), ([37, 38, 39, 41, 42, 43, 46, 47,
+48, 58, 61, 62, 64, 93, 95, 124, 126, 267, 275, 331], [-1, 320, 101, -1, 101,
+322, 101, -1, 324, -1, 101, -1, 101, -1, 101, -1, 101, -1, 101, -1], [264], [-1
+]), ([38, 39, 41, 42, 43, 44, 45, 46, 58, 61, 62, 64, 93, 95, 124, 126, 267,
+275, 331], [-1, 105, -1, 105, -1, 326, 105, 328, -1, 105, -1, 105, -1, 105, -1,
+105, -1, 105, -1], [264], [-1]), ([38, 39, 41, 42, 43, 44, 45, 46, 58, 61, 62,
+64, 93, 95, 124, 126, 267, 275, 331], [-1, 107, -1, 107, -1, 326, 107, 328, -1,
+107, -1, 107, -1, 107, -1, 107, -1, 107, -1], [264], [-1]), ([38, 39, 41, 42,
+44, 45, 58, 61, 62, 64, 93, 95, 124, 126, 267, 268, 269, 275, 331], [-1, 111,
+-1, 111, -1, 111, -1, 111, -1, 111, -1, 111, -1, 111, -1, 330, 332, 111, -1], [
+264], [-1]), ([38, 39, 41, 42, 44, 45, 58, 61, 62, 64, 93, 95, 124, 126, 267,
+268, 269, 275, 331], [-1, 113, -1, 113, -1, 113, -1, 113, -1, 113, -1, 113, -1,
+113, -1, 330, 332, 113, -1], [264], [-1]), ([38, 39, 41, 42, 44, 45, 58, 61,
+62, 64, 93, 95, 124, 126, 267, 268, 269, 275, 331], [-1, 115, -1, 115, -1, 115,
+-1, 115, -1, 115, -1, 115, -1, 115, -1, 330, 332, 115, -1], [264], [-1]), ([38,
+39, 41, 42, 44, 45, 58, 61, 62, 64, 93, 95, 124, 126, 267, 268, 269, 275, 331],
+[-1, 117, -1, 117, -1, 117, -1, 117, -1, 117, -1, 117, -1, 117, -1, 330, 332,
+117, -1], [264], [-1]), ([38, 39, 41, 42, 44, 45, 58, 60, 61, 62, 63, 64, 93,
+95, 124, 126, 269, 270, 271, 275, 331], [-1, 121, -1, 121, -1, 121, -1, 121,
+334, -1, 336, 121, -1, 121, -1, 121, -1, 338, 340, 121, -1], [264], [-1]), ([
+38, 39, 41, 42, 44, 45, 58, 60, 61, 62, 63, 64, 93, 95, 124, 126, 269, 270,
+271, 275, 331], [-1, 123, -1, 123, -1, 123, -1, 123, 334, -1, 336, 123, -1,
+123, -1, 123, -1, 338, 340, 123, -1], [264], [-1]), ([38, 39, 41, 42, 44, 45,
+58, 60, 63, 64, 93, 95, 124, 126, 271, 272, 273, 275, 331], [-1, 127, -1, 127,
+-1, 127, -1, 127, -1, 127, -1, 127, -1, 127, -1, 342, 344, 127, -1], [264], [-1
+]), ([38, 39, 41, 42, 44, 45, 58, 60, 63, 64, 93, 95, 124, 126, 273, 275, 331],
+[-1, 346, -1, 131, -1, 131, -1, 131, -1, 131, -1, 131, -1, 131, -1, 131, -1], [
+264], [-1]), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94, 95, 124, 126, 273, 275,
+331], [-1, 135, -1, 135, -1, 135, -1, 135, -1, 135, 348, -1, 135, -1, 135, -1],
+[264], [-1]), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94, 124, 125, 126, 273,
+275, 331], [-1, 139, -1, 139, -1, 139, -1, 139, -1, 139, -1, 350, 139, -1, 139,
+-1], [264], [-1]), ([44, 45, 58, 59, 331], [-1, 360, -1, 632, -1], [264], [-1]
+), ([41, 42, 44, 45, 58, 60, 63, 64, 93, 94, 125, 126, 273, 274, 275, 331], [
+-1, 143, -1, 143, -1, 143, -1, 143, -1, 143, -1, 143, -1, 352, 143, -1], [264],
+[-1]), ([41, 42, 44, 45, 58, 60, 93, 94, 331], [-1, 185, -1, 185, -1, 185, -1,
+185, -1], [264], [-1]), ([41, 42, 331], [-1, 634, -1], [264], [-1]), ([33, 34,
+38, 39, 40, 46, 58, 59, 91, 92, 93, 94, 126, 127, 258, 264, 265, 267, 286, 287,
+289, 290, 293, 296, 325, 328, 331], [-1, 343, -1, 343, -1, 343, -1, 343, -1,
+343, -1, 343, -1, 343, -1, 343, -1, 343, -1, 343, -1, 343, -1, 343, -1, 343, -1
+], [264], [-1]), ([40, 43, 44, 45, 58, 59, 91, 92, 258, 259, 293, 296, 326,
+327, 331], [-1, 375, -1, 375, -1, 375, -1, 375, -1, 375, -1, 375, -1, 375, -1],
+[264], [-1]), ([40, 41, 42, 43, 258, 259, 331], [-1, 362, -1, 364, -1, 366, -1
+], [178, 180, 185, 264], [-1, 318, 189, -1]), ([40, 43, 44, 45, 58, 59, 91, 92,
+258, 259, 293, 294, 295, 296, 326, 327, 331], [-1, 373, -1, 373, -1, 373, -1,
+373, -1, 373, -1, 50, 52, 54, -1, 522, -1], [168, 172, 264], [-1, 319, -1]), ([
+33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257,
+258, 264, 265, 267, 285, 311, 312, 315, 316, 331], [-1, 193, -1, 193, -1, 193,
+-1, 193, -1, 193, -1, 193, -1, 193, -1, 193, -1, 193, -1, 193, -1, 193, -1,
+193, -1, 193, -1, 193], [264], [-1]), ([40, 41, 42, 43, 258, 259, 331], [-1,
+362, -1, 364, -1, 366, -1], [109, 110, 178, 180, 185, 264], [-1, 320, -1, 188,
+189, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 123, 124, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 642, -1, 16, -1, 198, 20,
+22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12,
+13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89,
+212, 214, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71,
+72, 73, 74, 75, 76, 77, 78, -1, 322, -1, 323, -1]), ([44, 45, 59, 60, 331], [
+-1, 219, -1, 219, -1], [264], [-1]), ([41, 42, 258, 259, 285, 286, 287, 288,
+289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+305, 306, 307, 308, 309, 310, 311, 324, 325, 326, 327, 328, 329, 330, 331], [
+-1, 387, -1, 648, -1, 34, -1, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60,
+62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 108, -1, 112, -1, 116, -1,
+120], [98, 100, 105, 110, 116, 133, 135, 137, 153, 155, 161, 162, 168, 172,
+174, 176, 189, 191, 193, 195, 197, 264], [-1, 273, 84, -1, 85, 86, 87, 88, -1,
+89, -1, 90, -1, 91, 92, 93, -1, 325, 275, 326, 327, -1]), ([33, 34, 38, 39, 40,
+41, 42, 44, 45, 46, 93, 94, 126, 127, 258, 264, 265, 267, 286, 287, 289, 290,
+293, 294, 295, 296, 325, 326, 327, 328, 331], [-1, 325, -1, 325, -1, 325, -1,
+325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 556, -1, 50, 52,
+54, -1, 325, 522, 325, -1], [162, 164, 166, 168, 172, 264], [-1, 328, 280, 281,
+282, -1]), ([40, 42, 44, 45, 58, 59, 91, 92, 331], [-1, 411, -1, 411, -1, 411,
+-1, 411, -1], [264], [-1]), ([40, 43, 91, 92, 293, 294, 295, 296, 326, 327, 331
+], [-1, 371, -1, 371, -1, 50, 52, 54, -1, 522, -1], [168, 172, 185, 187, 189,
+264], [-1, 262, -1, 329, 264, -1]), ([40, 41, 42, 43, 44, 45, 91, 92, 258, 259,
+285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 324, 325, 326, 327, 328,
+329, 330, 331], [-1, 660, 401, 662, -1, 401, -1, 388, -1, 366, -1, 34, -1, 38,
+40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
+80, 82, 84, -1, 108, -1, 112, -1, 116, -1, 120], [100, 105, 110, 116, 133, 135,
+137, 153, 155, 161, 162, 168, 172, 174, 176, 178, 180, 185, 198, 200, 202, 210,
+264], [-1, 184, -1, 85, 86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 332,
+189, -1, 333, 197, 198, -1]), ([41, 42, 44, 45, 331], [-1, 525, -1, 668, -1], [
+262, 264], [-1, 335]), ([41, 42, 44, 45, 331], [-1, 379, -1, 379, -1], [264], [
+-1]), ([40, 41, 42, 91, 92, 331], [-1, 566, 672, -1, 568, -1], [264], [-1]), ([
+40, 41, 42, 43, 58, 59, 91, 92, 331], [-1, 384, 401, 386, -1, 401, -1, 388, -1
+], [198, 200, 202, 210, 264], [-1, 337, 197, 198, -1]), ([33, 34, 38, 39, 40,
+41, 42, 44, 45, 46, 93, 94, 126, 127, 258, 264, 265, 267, 286, 287, 289, 290,
+293, 296, 325, 328, 331], [-1, 335, -1, 335, -1, 335, -1, 335, -1, 335, -1,
+335, -1, 335, -1, 335, -1, 335, -1, 335, -1, 335, -1, 335, -1, 335, -1], [264],
+[-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 93, 94, 126, 127, 258,
+259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331
+], [-1, 2, -1, 4, -1, 6, -1, 676, 10, -1, 12, -1, 149, -1, 16, -1, 198, 20, 22,
+24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13,
+18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [
+-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+77, 78, 339, 340, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 93, 94, 126,
+127, 258, 264, 265, 267, 286, 287, 289, 290, 293, 294, 295, 296, 325, 326, 327,
+328, 331], [-1, 327, -1, 327, -1, 327, -1, 327, -1, 327, -1, 327, -1, 327, -1,
+327, -1, 327, -1, 327, -1, 556, -1, 50, 52, 54, -1, 327, 522, 327, -1], [166,
+168, 172, 264], [-1, 341, 282, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46,
+93, 94, 126, 127, 258, 264, 265, 267, 286, 287, 289, 290, 293, 296, 325, 328,
+331], [-1, 329, -1, 329, -1, 329, -1, 329, -1, 329, -1, 329, -1, 329, -1, 329,
+-1, 329, -1, 329, -1, 329, -1, 329, -1, 329, -1], [264], [-1]), ([33, 34, 38,
+39, 40, 41, 42, 44, 45, 46, 93, 94, 126, 127, 258, 264, 265, 267, 286, 287,
+289, 290, 293, 296, 325, 328, 331], [-1, 333, -1, 333, -1, 333, -1, 333, -1,
+333, -1, 333, -1, 333, -1, 333, -1, 333, -1, 333, -1, 333, -1, 333, -1, 333, -1
+], [264], [-1]), ([41, 42, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+311, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 684, -1, 34, -1, 38, 40, 42,
+44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82,
+84, -1, 108, -1, 112, -1, 116, -1, 120], [98, 100, 105, 110, 116, 133, 135,
+137, 153, 155, 161, 162, 168, 172, 174, 176, 189, 191, 193, 264], [-1, 273, 84,
+-1, 85, 86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 343, 275, -1]), ([33,
+34, 38, 39, 40, 41, 42, 44, 45, 46, 93, 94, 126, 127, 258, 264, 265, 267, 286,
+287, 289, 290, 293, 294, 295, 296, 325, 326, 327, 328, 331], [-1, 325, -1, 325,
+-1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1, 325, -1,
+556, -1, 50, 52, 54, -1, 325, 522, 325, -1], [162, 164, 166, 168, 172, 264], [
+-1, 344, 280, 281, 282, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 47, 91,
+92, 123, 124, 125, 126, 127, 258, 264, 265, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 441, -1, 441, -1, 441, -1, 441, -1, 441, 690, -1, 692, -1, 441, -1,
+429, 441, -1, 441, -1, 441, -1, 441, -1, 441, -1, 441, -1], [214, 217, 219,
+220, 222, 224, 226, 264], [-1, 347, 348, 349, 350, 351, 352, -1]), ([37, 39,
+41, 46, 47, 48, 58, 64, 93, 95, 124, 126, 267, 285, 331], [-1, 87, -1, 87, -1,
+87, -1, 87, -1, 87, -1, 87, -1, 87, -1], [264], [-1]), ([37, 39, 41, 46, 47,
+48, 58, 64, 93, 95, 123, 124, 126, 267, 285, 331], [-1, 81, -1, 81, -1, 81, -1,
+81, -1, 81, -1, 570, 81, -1, 81, -1], [264], [-1]), ([123, 124, 331], [-1, 570,
+-1], [264], [-1]), ([125, 126, 331], [-1, 706, -1], [264], [-1]), ([125, 126,
+285, 286, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
+307, 308, 309, 310, 311, 326, 327, 329, 330, 331], [-1, 277, -1, 34, -1, 50,
+52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 112,
+-1, 118, -1], [116, 133, 135, 137, 141, 143, 145, 147, 153, 155, 161, 162, 168,
+172, 226, 227, 264], [-1, 104, 87, 88, -1, 354, 292, 106, -1, 89, -1, 90, -1,
+107, -1, 293, -1]), ([125, 126, 285, 286, 293, 311, 326, 327, 329, 330, 331], [
+-1, 279, -1, 279, -1, 279, -1, 279, -1, 279, -1], [264], [-1]), ([40, 41, 42,
+43, 58, 59, 60, 258, 259, 285, 286, 293, 294, 295, 296, 297, 298, 299, 300,
+301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 326, 327, 331], [-1,
+362, -1, 364, -1, 353, 295, -1, 366, -1, 34, -1, 50, 52, 54, 56, 58, 60, 62,
+64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, -1, 112, -1], [116, 133, 135, 137,
+145, 147, 149, 151, 153, 155, 161, 162, 168, 172, 176, 178, 180, 185, 264], [
+-1, 104, 87, 88, -1, 195, 355, 356, 357, 89, -1, 90, -1, 107, -1, 358, 359,
+189, -1]), ([125, 126, 285, 286, 293, 311, 326, 327, 329, 330, 331], [-1, 285,
+-1, 285, -1, 285, -1, 285, -1, 285, -1], [264], [-1]), ([125, 126, 331], [-1,
+720, -1], [264], [-1]), ([44, 45, 61, 62, 125, 126, 331], [-1, 19, -1, 19, -1,
+19, -1], [264], [-1]), ([44, 45, 61, 62, 125, 126, 331], [-1, 187, -1, 722, -1,
+187, -1], [93, 95, 264], [-1, 362, -1]), ([125, 126, 331], [-1, 726, -1], [264
+], [-1]), ([44, 45, 125, 126, 331], [-1, 728, -1, 313, -1], [264], [-1]), ([44,
+45, 125, 126, 331], [-1, 317, -1, 317, -1], [264], [-1]), ([33, 34, 38, 39, 40,
+41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267,
+285, 311, 312, 331], [-1, 457, -1, 457, -1, 457, -1, 457, -1, 457, -1, 457, -1,
+457, -1, 457, -1, 457, -1, 457, -1, 457, -1, 457, -1, 457], [264], [-1]), ([33,
+34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 312, 313, 314, 315, 316, 317,
+318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1,
+6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1,
+30, 32, -1, 36, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 227, 243, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79,
+80, 81, -1, 365, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60,
+123, 124, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
+328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1, 16,
+-1, 18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 86, 88, 90, -1, 92, 94, 96,
+98, 100, 102, 104, 106, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 227,
+243, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73,
+74, 75, 76, 77, 78, -1, 79, 80, 81, -1, 366, -1]), ([33, 34, 38, 39, 40, 41,
+42, 43, 44, 45, 46, 59, 60, 123, 124, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+322, 323, 324, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1,
+12, -1, 179, -1, 14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36,
+-1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, -1, 110, -1, 114, -1],
+[1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70,
+72, 74, 77, 89, 91, 93, 227, 243, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1,
+66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1, 367, -1
+]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48,
+51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 264], [-1, 61, 62, -1,
+63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79,
+-1, 368, -1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 16, -1, 198, 20,
+22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12,
+13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91,
+93, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73,
+74, 75, 76, 77, 78, -1, 79, 369, 81, -1]), ([59, 60, 331], [-1, 740, -1], [264
+], [-1]), ([40, 43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324,
+325, 326, 327, 328, 329, 330, 331], [-1, 351, -1, 351, -1, 351, -1, 351, -1,
+351, -1, 351, -1, 351, -1, 351, -1, 351, -1, 351, -1, 351], [264], [-1]), ([40,
+43, 44, 45, 59, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327,
+328, 329, 330, 331], [-1, 349, -1, 349, -1, 349, -1, 349, -1, 349, -1, 349, -1,
+349, -1, 349, -1, 349, -1, 349, -1, 349], [264], [-1]), ([37, 39, 41, 46, 47,
+48, 58, 64, 93, 95, 124, 126, 267, 285, 331], [-1, 83, -1, 83, -1, 83, -1, 83,
+-1, 83, -1, 83, -1, 83, -1], [264], [-1]), ([40, 43, 44, 45, 58, 60, 91, 92,
+258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331], [-1,
+323, -1, 323, -1, 323, -1, 323, -1, 323, -1, 323, -1, 323, -1, 323, -1, 323,
+-1, 323, -1, 323], [264], [-1]), ([285, 286, 293, 294, 295, 296, 297, 298, 299,
+300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 313, 314, 326, 327,
+331], [-1, 34, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
+80, 82, 84, -1, 742, -1, 112, -1], [13, 15, 16, 18, 116, 133, 135, 137, 143,
+145, 147, 153, 155, 161, 162, 168, 172, 197, 198, 264], [-1, 372, 373, 374, -1,
+104, 87, 88, -1, 105, 106, -1, 89, -1, 90, -1, 107, -1, 375, -1]), ([261, 262,
+331], [-1, 752, -1], [264], [-1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95,
+124, 126, 264, 285, 331], [-1, 41, -1, 41, -1, 41, -1, 41, -1, 41, -1, 41, -1,
+41, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127,
+258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328,
+331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26,
+28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26,
+30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61,
+62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+-1, 377, -1]), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285,
+331], [-1, 39, -1, 39, -1, 39, -1, 39, -1, 39, -1, 39, -1, 39, -1], [264], [-1]
+), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48,
+51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 264], [-1, 61, 62, -1, 63, 64, -1, 65,
+-1, 100, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 378, -1]), ([40, 42, 44,
+45, 58, 60, 61, 62, 91, 92, 331], [-1, 363, -1, 363, -1, 363, -1, 363, -1, 363,
+-1], [264], [-1]), ([41, 42, 44, 45, 58, 60, 61, 62, 331], [-1, 359, -1, 359,
+-1, 359, -1, 359, -1], [264], [-1]), ([40, 43, 44, 45, 58, 59, 91, 92, 258,
+259, 293, 296, 326, 327, 331], [-1, 377, -1, 377, -1, 377, -1, 377, -1, 377,
+-1, 377, -1, 377, -1], [264], [-1]), ([44, 45, 59, 60, 331], [-1, 217, -1, 217,
+-1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 47, 91, 92, 123,
+124, 125, 126, 127, 258, 264, 265, 267, 286, 287, 325, 326, 327, 328, 331], [
+-1, 441, -1, 441, -1, 441, -1, 441, -1, 441, 690, -1, 692, -1, 441, -1, 429,
+441, -1, 441, -1, 441, -1, 441, -1, 441, -1, 441, -1], [214, 217, 219, 220,
+222, 224, 226, 264], [-1, 379, 348, 349, 350, 351, 352, -1]), ([44, 45, 59, 60,
+125, 126, 331], [-1, 427, -1, 427, -1, 427, -1], [264], [-1]), ([44, 45, 59,
+60, 331], [-1, 423, -1, 423, -1], [264], [-1]), ([41, 42, 44, 45, 331], [-1,
+391, -1, 391, -1], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 525, -1, 668, -1
+], [262, 264], [-1, 380]), ([41, 42, 331], [-1, 762, -1], [264], [-1]), ([41,
+42, 44, 45, 331], [-1, 389, -1, 764, -1], [264], [-1]), ([33, 34, 38, 39, 40,
+41, 42, 43, 44, 45, 46, 93, 94, 126, 127, 258, 259, 260, 261, 262, 263, 264,
+265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1,
+676, 10, -1, 12, -1, 149, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1,
+36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51,
+54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61, 62, -1, 63, 64, -1,
+65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 383, 340, -1]), ([
+40, 41, 42, 43, 91, 92, 331], [-1, 384, 401, 386, -1, 388, -1], [198, 200, 202,
+210, 264], [-1, 384, 197, 198, -1]), ([40, 41, 42, 43, 91, 92, 258, 259, 285,
+286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 324, 325, 326, 327, 328, 329,
+330, 331], [-1, 660, 542, 770, -1, 388, -1, 366, -1, 34, -1, 38, 40, 42, 44,
+46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84,
+-1, 108, -1, 112, -1, 116, -1, 120], [98, 100, 105, 110, 116, 133, 135, 137,
+153, 155, 161, 162, 168, 172, 174, 176, 178, 180, 185, 189, 191, 193, 202, 210,
+264], [-1, 273, 84, -1, 85, 86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1,
+260, 189, -1, 274, 275, -1, 276, -1]), ([40, 43, 44, 45, 91, 92, 258, 259, 293,
+294, 295, 296, 326, 327, 331], [-1, 371, -1, 371, -1, 371, -1, 371, -1, 50, 52,
+54, -1, 522, -1], [168, 172, 185, 187, 189, 264], [-1, 262, -1, 386, 264, -1]),
+([41, 42, 44, 45, 331], [-1, 383, -1, 383, -1], [264], [-1]), ([41, 42, 44, 45,
+331], [-1, 385, -1, 385, -1], [264], [-1]), ([285, 286, 287, 288, 289, 290,
+291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
+307, 308, 309, 310, 311, 312, 324, 325, 326, 327, 328, 329, 330, 331], [-1, 34,
+-1, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74,
+76, 78, 80, 82, 84, 774, -1, 108, -1, 112, -1, 116, -1, 120], [98, 100, 105,
+110, 116, 133, 135, 137, 153, 155, 161, 162, 168, 172, 174, 176, 191, 193, 264
+], [-1, 273, 84, -1, 85, 86, 87, 88, -1, 89, -1, 90, -1, 91, 92, 93, -1, 388,
+-1]), ([41, 42, 331], [-1, 778, -1], [264], [-1]), ([40, 42, 44, 45, 58, 59,
+91, 92, 331], [-1, 405, -1, 405, -1, 405, -1, 405, -1], [264], [-1]), ([41, 42,
+44, 45, 58, 59, 331], [-1, 399, -1, 399, -1, 399, -1], [264], [-1]), ([33, 34,
+38, 39, 40, 41, 42, 43, 44, 45, 46, 93, 94, 126, 127, 258, 259, 260, 261, 262,
+263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1,
+6, -1, 8, 10, -1, 12, -1, 151, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 264],
+[-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 109, -1]), ([93, 94, 331], [-1, 780,
+-1], [264], [-1]), ([93, 94, 331], [-1, 153, -1], [264], [-1]), ([33, 34, 38,
+39, 40, 41, 42, 44, 45, 46, 93, 94, 126, 127, 258, 264, 265, 267, 286, 287,
+289, 290, 293, 296, 325, 328, 331], [-1, 331, -1, 331, -1, 331, -1, 331, -1,
+331, -1, 331, -1, 331, -1, 331, -1, 331, -1, 331, -1, 331, -1, 331, -1, 331, -1
+], [264], [-1]), ([40, 42, 44, 45, 58, 59, 91, 92, 331], [-1, 417, -1, 417, -1,
+417, -1, 417, -1], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 525, -1, 668, -1
+], [262, 264], [-1, 391]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 93,
+94, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325,
+326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 676, 10, -1, 12, -1, 149, -1,
+16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1,
+6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72,
+74, 77, 89, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71,
+72, 73, 74, 75, 76, 77, 78, 392, 340, -1]), ([258, 259, 331], [-1, 786, -1], [
+264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30,
+42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 95, 96, 264], [-1, 61, 62,
+-1, 63, 64, -1, 65, -1, 100, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 126,
+-1, 394, -1]), ([125, 126, 331], [-1, 790, -1], [264], [-1]), ([44, 45, 125,
+126, 331], [-1, 792, -1, 431, -1], [264], [-1]), ([44, 45, 125, 126, 331], [-1,
+435, -1, 435, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+123, 124, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 642, -1,
+16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1,
+6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72,
+74, 77, 89, 212, 214, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68,
+69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 322, -1, 397, -1]), ([46, 47, 61,
+62, 91, 92, 331], [-1, 690, -1, 796, -1, 692, -1], [224, 226, 264], [-1, 399,
+-1]), ([46, 47, 61, 62, 91, 92, 331], [-1, 445, -1, 445, -1, 445, -1], [264], [
+-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325,
+326, 327, 328, 329, 330, 331], [-1, 267, -1, 267, -1, 267, -1, 267, -1, 267,
+-1, 267, -1, 267, -1, 267, -1, 267, -1, 267, -1, 267], [264], [-1]), ([125,
+126, 285, 286, 293, 311, 326, 327, 329, 330, 331], [-1, 281, -1, 281, -1, 281,
+-1, 281, -1, 281, -1], [264], [-1]), ([59, 60, 331], [-1, 800, -1], [264], [-1]
+), ([44, 45, 59, 60, 331], [-1, 802, -1, 297, -1], [264], [-1]), ([44, 45, 59,
+60, 331], [-1, 299, -1, 299, -1], [264], [-1]), ([58, 59, 331], [-1, 804, -1],
+[264], [-1]), ([44, 45, 58, 59, 60, 331], [-1, 305, -1, 355, 305, -1], [264], [
+-1]), ([40, 43, 44, 45, 58, 60, 91, 92, 258, 259, 285, 286, 287, 311, 324, 325,
+326, 327, 328, 329, 330, 331], [-1, 271, -1, 271, -1, 271, -1, 271, -1, 271,
+-1, 271, -1, 271, -1, 271, -1, 271, -1, 271, -1, 271], [264], [-1]), ([33, 34,
+38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263,
+264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6,
+-1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1,
+110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59,
+62, 64, 66, 68, 70, 72, 74, 95, 96, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1,
+100, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 126, -1, 403, -1]), ([44, 45,
+125, 126, 331], [-1, 321, -1, 321, -1], [264], [-1]), ([40, 43, 44, 45, 58, 60,
+91, 92, 258, 259, 285, 286, 287, 311, 324, 325, 326, 327, 328, 329, 330, 331],
+[-1, 307, -1, 307, -1, 307, -1, 307, -1, 307, -1, 307, -1, 307, -1, 307, -1,
+307, -1, 307, -1, 307], [264], [-1]), ([125, 126, 258, 259, 331], [-1, 315, -1,
+590, -1], [9, 10, 160, 161, 264], [-1, 296, -1, 404, -1]), ([33, 34, 38, 39,
+40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265,
+267, 285, 311, 312, 315, 316, 331], [-1, 467, -1, 467, -1, 467, -1, 467, -1,
+467, -1, 467, -1, 467, -1, 467, -1, 467, -1, 467, -1, 467, -1, 467, -1, 467,
+810, 467], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123,
+124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1, 469, -1,
+469, -1, 469, -1, 469, -1, 469, -1, 469, -1, 469, -1, 469, -1, 469, -1, 469,
+-1, 469, -1, 469, -1, 469], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45,
+46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312,
+331], [-1, 471, -1, 471, -1, 471, -1, 471, -1, 471, -1, 471, -1, 471, -1, 471,
+-1, 471, -1, 471, -1, 471, -1, 471, -1, 471], [264], [-1]), ([41, 42, 44, 45,
+331], [-1, 812, -1, 360, -1], [264], [-1]), ([59, 60, 331], [-1, 814, -1], [264
+], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259,
+260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, 179, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28,
+-1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30,
+42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 264], [-1,
+61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+78, -1, 79, 408, 81, -1]), ([58, 59, 331], [-1, 35, -1], [264], [-1]), ([41,
+42, 44, 45, 331], [-1, 818, -1, 820, -1], [264], [-1]), ([41, 42, 44, 45, 331],
+[-1, 27, -1, 27, -1], [264], [-1]), ([58, 59, 331], [-1, 822, -1], [264], [-1]
+), ([58, 59, 331], [-1, 33, -1], [264], [-1]), ([41, 42, 331], [-1, 824, -1], [
+264], [-1]), ([41, 42, 44, 45, 331], [-1, 59, -1, 59, -1], [264], [-1]), ([41,
+42, 44, 45, 58, 60, 93, 94, 125, 126, 331], [-1, 147, -1, 147, -1, 147, -1,
+147, -1, 147, -1], [264], [-1]), ([125, 126, 331], [-1, 826, -1], [264], [-1]),
+([41, 42, 331], [-1, 828, -1], [264], [-1]), ([40, 42, 44, 45, 58, 60, 61, 62,
+91, 92, 331], [-1, 367, -1, 367, -1, 367, -1, 367, -1, 367, -1], [264], [-1]),
+([258, 259, 331], [-1, 830, -1], [264], [-1]), ([93, 94, 331], [-1, 832, -1], [
+264], [-1]), ([41, 42, 331], [-1, 834, -1], [264], [-1]), ([40, 43, 91, 92,
+258, 259, 293, 294, 295, 296, 326, 327, 331], [-1, 371, -1, 371, -1, 371, -1,
+50, 52, 54, -1, 522, -1], [168, 172, 185, 187, 189, 264], [-1, 262, -1, 418,
+264, -1]), ([40, 41, 42, 43, 44, 45, 91, 92, 258, 259, 331], [-1, 660, 401,
+662, -1, 401, -1, 388, -1, 366, -1], [178, 180, 185, 198, 200, 202, 210, 264],
+[-1, 318, 189, -1, 337, 197, 198, -1]), ([41, 42, 331], [-1, 527, -1], [264], [
+-1]), ([41, 42, 44, 45, 331], [-1, 381, -1, 381, -1], [264], [-1]), ([40, 42,
+44, 45, 58, 59, 91, 92, 331], [-1, 413, -1, 413, -1, 413, -1, 413, -1], [264],
+[-1]), ([40, 42, 44, 45, 58, 59, 91, 92, 331], [-1, 409, -1, 409, -1, 409, -1,
+409, -1], [264], [-1]), ([41, 42, 331], [-1, 838, -1], [264], [-1]), ([93, 94,
+331], [-1, 840, -1], [264], [-1]), ([46, 47, 61, 62, 91, 92, 331], [-1, 451,
+-1, 451, -1, 451, -1], [264], [-1]), ([93, 94, 331], [-1, 842, -1], [264], [-1]
+), ([37, 39, 40, 48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 51,
+-1, 51, -1, 51, -1, 51, -1, 51, -1, 51, -1, 51, -1], [264], [-1]), ([33, 34,
+38, 39, 40, 41, 42, 44, 45, 46, 47, 91, 92, 123, 124, 125, 126, 127, 258, 264,
+265, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 441, -1, 441, -1, 441, -1,
+441, -1, 441, 690, -1, 692, -1, 441, -1, 433, 441, -1, 441, -1, 441, -1, 441,
+-1, 441, -1, 441, -1], [219, 220, 222, 224, 226, 264], [-1, 422, 350, 351, 352,
+-1]), ([44, 45, 125, 126, 331], [-1, 439, -1, 439, -1], [264], [-1]), ([33, 34,
+38, 39, 40, 41, 42, 44, 45, 46, 123, 124, 126, 127, 258, 264, 265, 267, 286,
+287, 325, 326, 327, 328, 331], [-1, 443, -1, 443, -1, 443, -1, 443, -1, 443,
+-1, 443, -1, 443, -1, 443, -1, 443, -1, 443, -1, 443, -1, 443, -1], [264], [-1]
+), ([46, 47, 61, 62, 91, 92, 331], [-1, 447, -1, 447, -1, 447, -1], [264], [-1]
+), ([125, 126, 285, 286, 293, 311, 326, 327, 329, 330, 331], [-1, 283, -1, 283,
+-1, 283, -1, 283, -1, 283, -1], [264], [-1]), ([40, 41, 42, 43, 58, 59, 258,
+259, 331], [-1, 362, -1, 364, -1, 353, -1, 366, -1], [151, 153, 176, 178, 180,
+185, 264], [-1, 423, -1, 358, 359, 189, -1]), ([33, 34, 38, 39, 40, 41, 42, 43,
+44, 45, 46, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286,
+287, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 16,
+-1, 198, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 110, -1, 114, -1], [1, 6,
+9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74,
+95, 96, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 100, 67, 68, 69, 70, 71, 72,
+73, 74, 75, 76, 77, 126, -1, 424, -1]), ([44, 45, 125, 126, 331], [-1, 189, -1,
+189, -1], [264], [-1]), ([44, 45, 125, 126, 331], [-1, 319, -1, 319, -1], [264
+], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 126,
+127, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 286, 287, 312, 313, 314,
+315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 331], [
+-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 18, 20,
+22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100,
+102, 104, 106, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44,
+48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 227, 243, 264], [
+-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+77, 78, -1, 79, 80, 81, -1, 425, -1]), ([59, 60, 331], [-1, 852, -1], [264], [
+-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260,
+261, 262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2,
+-1, 4, -1, 6, 179, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30,
+32, -1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44,
+48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91, 93, 264], [-1, 61, 62,
+-1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1,
+79, 427, 81, -1]), ([41, 42, 331], [-1, 856, -1], [264], [-1]), ([37, 39, 40,
+48, 58, 64, 91, 92, 93, 95, 124, 126, 264, 285, 331], [-1, 25, -1, 25, -1, 25,
+-1, 25, -1, 25, -1, 25, -1, 25, -1], [264], [-1]), ([285, 286, 293, 294, 295,
+296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+313, 314, 326, 327, 331], [-1, 34, -1, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68,
+70, 72, 74, 76, 78, 80, 82, 84, -1, 742, -1, 112, -1], [15, 16, 18, 116, 133,
+135, 137, 143, 145, 147, 153, 155, 161, 162, 168, 172, 197, 198, 264], [-1,
+429, 374, -1, 104, 87, 88, -1, 105, 106, -1, 89, -1, 90, -1, 107, -1, 375, -1]
+), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45, 46, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 325, 326, 327, 328, 331], [-1, 2, -1,
+4, -1, 6, -1, 8, 10, -1, 12, -1, 16, -1, 198, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48,
+51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 264], [-1, 61, 62, -1, 63, 64,
+-1, 65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 430, -1]),
+([59, 60, 331], [-1, 862, -1], [264], [-1]), ([44, 45, 59, 60, 125, 126, 331],
+[-1, 425, -1, 425, -1, 425, -1], [264], [-1]), ([40, 42, 44, 45, 58, 60, 61,
+62, 91, 92, 331], [-1, 369, -1, 369, -1, 369, -1, 369, -1, 369, -1], [264], [-1
+]), ([41, 42, 44, 45, 331], [-1, 393, -1, 393, -1], [264], [-1]), ([40, 42, 44,
+45, 58, 60, 61, 62, 91, 92, 331], [-1, 365, -1, 365, -1, 365, -1, 365, -1, 365,
+-1], [264], [-1]), ([40, 42, 44, 45, 58, 59, 91, 92, 331], [-1, 407, -1, 407,
+-1, 407, -1, 407, -1], [264], [-1]), ([40, 41, 42, 43, 91, 92, 258, 259, 331],
+[-1, 660, 401, 662, -1, 388, -1, 366, -1], [178, 180, 185, 198, 200, 202, 210,
+264], [-1, 318, 189, -1, 384, 197, 198, -1]), ([40, 42, 44, 45, 58, 59, 91, 92,
+331], [-1, 419, -1, 419, -1, 419, -1, 419, -1], [264], [-1]), ([40, 42, 44, 45,
+58, 59, 91, 92, 331], [-1, 415, -1, 415, -1, 415, -1, 415, -1], [264], [-1]), (
+[46, 47, 61, 62, 91, 92, 331], [-1, 449, -1, 449, -1, 449, -1], [264], [-1]), (
+[44, 45, 125, 126, 331], [-1, 437, -1, 437, -1], [264], [-1]), ([44, 45, 59,
+60, 331], [-1, 301, -1, 301, -1], [264], [-1]), ([44, 45, 59, 60, 331], [-1,
+303, -1, 303, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59,
+60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1,
+465, -1, 465, -1, 465, -1, 465, -1, 465, -1, 465, -1, 465, -1, 465, -1, 465,
+-1, 465, -1, 465, -1, 465, -1, 465], [264], [-1]), ([33, 34, 38, 39, 40, 41,
+42, 44, 45, 46, 59, 60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285,
+311, 312, 331], [-1, 473, -1, 473, -1, 473, -1, 473, -1, 473, -1, 473, -1, 473,
+-1, 473, -1, 473, -1, 473, -1, 473, -1, 473, -1, 473], [264], [-1]), ([41, 42,
+331], [-1, 864, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 43, 44, 45,
+46, 59, 60, 123, 124, 126, 127, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+267, 286, 287, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8, 10, -1, 12, -1, 179, -1,
+14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32, -1, 36, -1, 86, 88, 90, -1,
+92, 94, 96, 98, 100, 102, 104, 106, -1, 110, -1, 114, -1], [1, 6, 9, 10, 12,
+13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, 72, 74, 77, 89, 91,
+93, 227, 243, 264], [-1, 61, 62, -1, 63, 64, -1, 65, -1, 66, 67, 68, 69, 70,
+71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1, 433, -1]), ([41, 42, 44,
+45, 331], [-1, 29, -1, 29, -1], [264], [-1]), ([41, 42, 44, 45, 331], [-1, 31,
+-1, 31, -1], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60,
+123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 315, 316, 331
+], [-1, 453, -1, 453, -1, 453, -1, 453, -1, 453, -1, 453, -1, 453, -1, 453, -1,
+453, -1, 453, -1, 453, -1, 453, -1, 453, -1, 453], [264], [-1]), ([33, 34, 38,
+39, 40, 41, 42, 43, 44, 45, 46, 59, 60, 123, 124, 126, 127, 258, 259, 260, 261,
+262, 263, 264, 265, 266, 267, 286, 287, 312, 313, 314, 315, 316, 317, 318, 319,
+320, 321, 322, 323, 324, 325, 326, 327, 328, 331], [-1, 2, -1, 4, -1, 6, -1, 8,
+10, -1, 12, -1, 179, -1, 14, -1, 16, -1, 18, 20, 22, 24, 26, 28, -1, 30, 32,
+-1, 36, -1, 86, 88, 90, -1, 92, 94, 96, 98, 100, 102, 104, 106, -1, 110, -1,
+114, -1], [1, 6, 9, 10, 12, 13, 18, 26, 30, 42, 44, 48, 51, 54, 59, 62, 64, 66,
+68, 70, 72, 74, 77, 89, 91, 93, 227, 243, 264], [-1, 61, 62, -1, 63, 64, -1,
+65, -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, 79, 80, 81, -1,
+434, -1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59, 60, 123, 124, 125,
+127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1, 477, -1, 477, -1,
+477, -1, 477, -1, 477, -1, 477, -1, 477, -1, 477, -1, 477, -1, 477, -1, 477,
+-1, 477, -1, 477], [264], [-1]), ([33, 34, 38, 39, 40, 41, 42, 44, 45, 46, 59,
+60, 123, 124, 125, 127, 256, 257, 258, 264, 265, 267, 285, 311, 312, 331], [-1,
+475, -1, 475, -1, 475, -1, 475, -1, 475, -1, 475, -1, 475, -1, 475, -1, 475,
+-1, 475, -1, 475, -1, 475, -1, 475], [264], [-1])], [(1, []), (1, [(0, 1,
+'ExpressionIdentifier', {})]), (1, []), (1, []), (3, []), (1, []), (1, []), (1,
+[]), (1, []), (1, []), (1, []), (1, [(0, 1, 'ExpressionFunctionName', {})]), (
+6, [(0, 6, 'GenericSelection', {}), (4, 1, 'GenericAssociationList', {})]), (1,
+[]), (3, []), (3, [(0, 3, 'GenericAssociation', {})]), (1, []), (1, [(0, 1,
+'DefaultTypeName', {})]), (1, []), (4, [(0, 4, 'ExpressionIndex', {})]), (4, [(
+0, 4, 'ExpressionCall', {}), (2, 1, 'ArgumentExpressionList', {})]), (3, [(0,
+3, 'ExpressionField', {})]), (3, [(0, 3, 'ExpressionFieldDereference', {})]), (
+2, [(0, 2, 'ExpressionPostIncrement', {})]), (2, [(0, 2,
+'ExpressionPostDecrement', {})]), (6, [(0, 6, 'ExpressionArray', {}), (4, 1,
+'DesignatorInitializerList', {})]), (0, []), (1, []), (1, []), (3, []), (1, []
+), (2, [(0, 2, 'ExpressionPreIncrement', {})]), (2, [(0, 2,
+'ExpressionPreDecrement', {})]), (2, [(0, 2, 'ExpressionAddressOf', {})]), (2,
+[(0, 2, 'ExpressionDereference', {})]), (2, [(0, 2, 'ExpressionPlus', {})]), (
+2, [(0, 2, 'ExpressionMinus', {})]), (2, [(0, 2, 'ExpressionBitwiseNot', {})]),
+(2, [(0, 2, 'ExpressionLogicalNot', {})]), (2, [(0, 2,
+'ExpressionSizeOfExpression', {})]), (4, [(0, 4, 'ExpressionSizeOfType', {})]),
+(4, [(0, 4, 'ExpressionAlignOfType', {})]), (1, []), (4, [(0, 4,
+'ExpressionCast', {})]), (1, []), (3, [(0, 3, 'ExpressionMultiply', {})]), (3,
+[(0, 3, 'ExpressionDivide', {})]), (3, [(0, 3, 'ExpressionModulo', {})]), (1, [
+]), (3, [(0, 3, 'ExpressionAdd', {})]), (3, [(0, 3, 'ExpressionSubtract', {})]
+), (1, []), (3, [(0, 3, 'ExpressionShiftLeft', {})]), (3, [(0, 3,
+'ExpressionShiftRight', {})]), (1, []), (3, [(0, 3, 'ExpressionLessThan', {})]
+), (3, [(0, 3, 'ExpressionGreaterThan', {})]), (3, [(0, 3,
+'ExpressionLessThanOrEqual', {})]), (3, [(0, 3, 'ExpressionGreaterThanOrEqual',
+{})]), (1, []), (3, [(0, 3, 'ExpressionEqual', {})]), (3, [(0, 3,
+'ExpressionNotEqual', {})]), (1, []), (3, [(0, 3, 'ExpressionBitwiseAnd', {})]
+), (1, []), (3, [(0, 3, 'ExpressionExclusiveOr', {})]), (1, []), (3, [(0, 3,
+'ExpressionBitwiseOr', {})]), (1, []), (3, [(0, 3, 'ExpressionLogicalAnd', {})]
+), (1, []), (3, [(0, 3, 'ExpressionLogicalOr', {})]), (1, []), (5, [(0, 5,
+'ExpressionConditional', {})]), (0, [(0, 0, 'ExpressionEmpty', {})]), (1, [(0,
+1, 'ExpressionAsterisk', {})]), (1, []), (1, []), (3, [(0, 3,
+'ExpressionAssignment', {})]), (3, [(0, 3, 'ExpressionMultiplyAssignment', {})]
+), (3, [(0, 3, 'ExpressionDivideAssignment', {})]), (3, [(0, 3,
+'ExpressionModuloAssignment', {})]), (3, [(0, 3, 'ExpressionAddAssignment', {})
+]), (3, [(0, 3, 'ExpressionSubtractAssignment', {})]), (3, [(0, 3,
+'ExpressionLeftShiftAssignment', {})]), (3, [(0, 3,
+'ExpressionRightShiftAssignment', {})]), (3, [(0, 3,
+'ExpressionBitwiseAndAssignment', {})]), (3, [(0, 3,
+'ExpressionExclusiveOrAssignment', {})]), (3, [(0, 3,
+'ExpressionBitwiseOrAssignment', {})]), (0, [(0, 0, 'ExpressionEmpty', {})]), (
+1, []), (1, []), (3, [(0, 3, 'ExpressionComma', {})]), (0, [(0, 0,
+'ExpressionEmpty', {})]), (2, []), (1, []), (3, [(0, 3, 'Declaration', {}), (0,
+1, 'DeclarationSpecifierList', {}), (1, 1, 'InitDeclaratorList', {})]), (1, []
+), (1, []), (2, []), (1, []), (1, []), (1, []), (1, []), (1, []), (0, []), (1,
+[]), (1, []), (3, []), (2, [(0, 2, 'InitDeclarator', {})]), (1, [(0, 1,
+'StorageClassSpecifier', {'n': '0'})]), (1, [(0, 1, 'StorageClassSpecifier', {
+'n': '1'})]), (1, [(0, 1, 'StorageClassSpecifier', {'n': '2'})]), (1, [(0, 1,
+'StorageClassSpecifier', {'n': '3'})]), (1, [(0, 1, 'StorageClassSpecifier', {
+'n': '4'})]), (1, [(0, 1, 'StorageClassSpecifier', {'n': '5'})]), (1, [(0, 1,
+'TypeSpecifier', {'n': '0'})]), (1, [(0, 1, 'TypeSpecifier', {'n': '1'})]), (1,
+[(0, 1, 'TypeSpecifier', {'n': '2'})]), (1, [(0, 1, 'TypeSpecifier', {'n': '3'}
+)]), (1, [(0, 1, 'TypeSpecifier', {'n': '4'})]), (1, [(0, 1, 'TypeSpecifier', {
+'n': '5'})]), (1, [(0, 1, 'TypeSpecifier', {'n': '6'})]), (1, [(0, 1,
+'TypeSpecifier', {'n': '7'})]), (1, [(0, 1, 'TypeSpecifier', {'n': '8'})]), (1,
+[(0, 1, 'TypeSpecifier', {'n': '9'})]), (1, [(0, 1, 'TypeSpecifier', {'n': '10'
+})]), (1, [(0, 1, 'TypeSpecifier', {'n': '11'})]), (1, []), (1, []), (1, []), (
+1, []), (1, []), (5, [(0, 5, 'StructSpecifier', {}), (3, 1,
+'StructDeclarationList', {})]), (2, [(0, 2, 'StructSpecifier', {})]), (5, [(0,
+5, 'UnionSpecifier', {}), (3, 1, 'StructDeclarationList', {})]), (2, [(0, 2,
+'UnionSpecifier', {})]), (0, []), (1, []), (1, []), (2, []), (3, [(0, 3,
+'StructDeclaration', {}), (0, 1, 'SpecifierQualifierList', {}), (1, 1,
+'StructDeclaratorList', {})]), (1, []), (1, []), (2, []), (1, []), (1, []), (0,
+[]), (1, []), (1, []), (3, []), (3, [(0, 3, 'StructDeclarator', {})]), (1, []),
+(5, [(0, 5, 'EnumSpecifier', {}), (3, 1, 'EnumeratorList', {})]), (2, [(0, 2,
+'EnumSpecifier', {})]), (0, []), (1, []), (2, []), (1, []), (3, []), (2, [(0,
+2, 'Enumerator', {})]), (4, []), (0, []), (1, []), (1, []), (2, []), (1, []), (
+1, [(0, 1, 'StorageClassSpecifier', {'n': '2'})]), (1, [(0, 1, 'TypeQualifier',
+{'n': '0'})]), (1, [(0, 1, 'TypeQualifier', {'n': '1'})]), (1, [(0, 1,
+'TypeQualifier', {'n': '2'})]), (1, [(0, 1, 'TypeQualifier', {'n': '3'})]), (1,
+[(0, 1, 'FunctionSpecifier', {'n': '0'})]), (1, [(0, 1, 'FunctionSpecifier', {
+'n': '1'})]), (4, [(0, 4, 'AlignAsType', {})]), (4, [(0, 4,
+'AlignAsExpression', {})]), (0, [(0, 0, 'DeclaratorEmpty', {})]), (1, []), (1,
+[]), (3, [(0, 3, 'DeclaratorPointer', {}), (1, 1, 'TypeQualifierList', {})]), (
+1, []), (3, []), (5, [(0, 5, 'DeclaratorArray', {}), (2, 1,
+'TypeQualifierOrStaticList', {})]), (4, [(0, 4, 'DeclaratorFunctionOldStyle', {
+}), (2, 1, 'IdentifierList', {})]), (5, [(0, 5, 'DeclaratorFunction', {}), (2,
+1, 'ParameterDeclarationList', {})]), (0, []), (1, []), (1, []), (2, []), (1, [
+]), (3, []), (2, [(0, 2, 'ParameterDeclaration', {}), (0, 1,
+'DeclarationSpecifierList', {})]), (2, [(0, 2, 'ParameterDeclaration', {}), (0,
+1, 'DeclarationSpecifierList', {})]), (0, []), (1, []), (1, []), (3, []), (2, [
+(0, 2, 'TypeName', {}), (0, 1, 'SpecifierQualifierList', {})]), (1, []), (3, [(
+0, 3, 'DeclaratorPointer', {}), (1, 1, 'TypeQualifierList', {})]), (0, [(0, 0,
+'DeclaratorAbstract', {})]), (1, []), (3, []), (5, [(1, 3, 'DeclaratorPointer',
+{}), (2, 1, 'TypeQualifierList', {})]), (4, [(0, 5, 'DeclaratorArray', {}), (0,
+0, 'DeclaratorAbstract', {}), (1, 1, 'TypeQualifierOrStaticList', {})]), (2, [(
+0, 5, 'DeclaratorFunction', {}), (0, 0, 'DeclaratorAbstract', {}), (1, 0,
+'ParameterDeclarationList', {}), (1, 0, 'CommaEllipsisEmpty', {})]), (4, [(0,
+5, 'DeclaratorFunction', {}), (0, 0, 'DeclaratorAbstract', {}), (1, 1,
+'ParameterDeclarationList', {})]), (5, [(0, 5, 'DeclaratorArray', {}), (2, 1,
+'TypeQualifierOrStaticList', {})]), (3, [(0, 5, 'DeclaratorFunction', {}), (2,
+0, 'ParameterDeclarationList', {}), (2, 0, 'CommaEllipsisEmpty', {})]), (5, [(
+0, 5, 'DeclaratorFunction', {}), (2, 1, 'ParameterDeclarationList', {})]), (0,
+[(0, 0, 'EqualsInitializerEmpty', {})]), (2, []), (3, [(1, 1,
+'DesignatorInitializerList', {})]), (1, []), (0, []), (1, []), (2, []), (1, []
+), (3, []), (2, [(0, 2, 'DesignatorInitializer', {}), (0, 1, 'DesignatorList',
+{})]), (0, []), (2, []), (1, []), (2, []), (3, [(0, 3, 'DesignatorIndex', {})]
+), (2, [(0, 2, 'DesignatorField', {})]), (7, [(0, 7, 'StaticAssertDeclaration',
+{})]), (3, [(0, 3, 'StatementLabel', {})]), (4, [(0, 4, 'StatementCase', {})]),
+(3, [(0, 3, 'StatementDefault', {})]), (3, [(1, 1, 'BlockItemList', {})]), (2,
+[(0, 2, 'StatementExpression', {})]), (7, [(0, 7, 'StatementIfElse', {})]), (5,
+[(0, 5, 'StatementIf', {})]), (5, [(0, 5, 'StatementSwitch', {})]), (5, [(0, 5,
+'StatementWhile', {})]), (7, [(0, 7, 'StatementDoWhile', {})]), (9, [(0, 9,
+'StatementFor', {})]), (8, [(0, 8, 'StatementFor', {})]), (3, [(0, 3,
+'StatementGoto', {})]), (2, [(0, 2, 'StatementContinue', {})]), (2, [(0, 2,
+'StatementBreak', {})]), (3, [(0, 3, 'StatementReturn', {})]), (0, []), (1, []
+), (1, []), (2, []), (1, []), (1, []), (0, []), (1, []), (1, []), (2, []), (1,
+[]), (1, []), (6, [(0, 6, 'FunctionDefinition', {}), (0, 1,
+'DeclarationSpecifierList', {}), (2, 1, 'DeclarationList', {}), (4, 1,
+'BlockItemList', {})]), (0, []), (1, []), (1, []), (2, []), (0, [(0, 0,
+'IdentifierEmpty', {})]), (1, []), (0, [(0, 0, 'CommaEllipsisEmpty', {})]), (2,
+[(0, 2, 'CommaEllipsis', {})])], 331, 256)
+# GENERATE END
+
+def yyparse(root, pos, off, factory, yylex_iter):
+ lalr1.yyparse(root, pos, off, factory, yylex_iter)
+
+if __name__ == '__main__':
+ import ansi_c
+ import ansi_c_yylex
+ import element
+ import work
+ import sys
+ import xml.etree.ElementTree
+
+ root = element.Element('root')
+ yyparse(
+ root,
+ 0,
+ 0,
+ ansi_c.factory,
+ ansi_c_yylex.yylex(
+ root,
+ 0,
+ 0,
+ ansi_c.factory,
+ work.yychunk_line(root, sys.stdin)
+ )
+ )
+ xml.etree.ElementTree.dump(root)
--- /dev/null
+#!/bin/sh
+if ../pyacc.git/pyacc.py ansi_c_yacc.y ansi_c_tokens.py <ansi_c_yyparse.py >ansi_c_yyparse.py.new && ! diff -q ansi_c_yyparse.py ansi_c_yyparse.py.new
+ then
+ mv ansi_c_yyparse.py.new ansi_c_yyparse.py
+else
+ rm -f ansi_c_yyparse.py.new
+fi
--- /dev/null
+import element
+
+class AlignAsExpression(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'AlignAsExpression',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ AlignAsExpression if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.AlignAsExpression({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class AlignAsType(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'AlignAsType',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ AlignAsType if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.AlignAsType({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ArgumentExpressionList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ArgumentExpressionList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ ArgumentExpressionList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ArgumentExpressionList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class BlockItemList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'BlockItemList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ BlockItemList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.BlockItemList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class CommaEllipsis(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'CommaEllipsis',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ CommaEllipsis if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.CommaEllipsis({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class CommaEllipsisEmpty(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'CommaEllipsisEmpty',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ CommaEllipsisEmpty if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.CommaEllipsisEmpty({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class Declaration(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Declaration',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Declaration if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.Declaration({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclarationList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclarationList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DeclarationList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclarationList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclarationSpecifierList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclarationSpecifierList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DeclarationSpecifierList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclarationSpecifierList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class Declarator(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Declarator',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Declarator if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.Declarator({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclaratorAbstract(Declarator):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclaratorAbstract',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Declarator.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Declarator.copy(
+ self,
+ DeclaratorAbstract if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclaratorAbstract({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclaratorArray(Declarator):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclaratorArray',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Declarator.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Declarator.copy(
+ self,
+ DeclaratorArray if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclaratorArray({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclaratorEmpty(Declarator):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclaratorEmpty',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Declarator.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Declarator.copy(
+ self,
+ DeclaratorEmpty if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclaratorEmpty({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclaratorFunction(Declarator):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclaratorFunction',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Declarator.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Declarator.copy(
+ self,
+ DeclaratorFunction if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclaratorFunction({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclaratorFunctionOldStyle(Declarator):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclaratorFunctionOldStyle',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Declarator.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Declarator.copy(
+ self,
+ DeclaratorFunctionOldStyle if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclaratorFunctionOldStyle({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DeclaratorPointer(Declarator):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DeclaratorPointer',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Declarator.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Declarator.copy(
+ self,
+ DeclaratorPointer if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DeclaratorPointer({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DefaultTypeName(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DefaultTypeName',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DefaultTypeName if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DefaultTypeName({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DesignatorField(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DesignatorField',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DesignatorField if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DesignatorField({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DesignatorIndex(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DesignatorIndex',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DesignatorIndex if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DesignatorIndex({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DesignatorInitializer(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DesignatorInitializer',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DesignatorInitializer if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DesignatorInitializer({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DesignatorInitializerList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DesignatorInitializerList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DesignatorInitializerList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DesignatorInitializerList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class DesignatorList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'DesignatorList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ DesignatorList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.DesignatorList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class EnumSpecifier(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'EnumSpecifier',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ EnumSpecifier if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.EnumSpecifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class Enumerator(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Enumerator',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Enumerator if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.Enumerator({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class EnumeratorList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'EnumeratorList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ EnumeratorList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.EnumeratorList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class EqualsInitializerEmpty(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'EqualsInitializerEmpty',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ EqualsInitializerEmpty if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.EqualsInitializerEmpty({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class Expression(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Expression',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Expression if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.Expression({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionAdd(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionAdd',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionAdd if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionAdd({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionAddAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionAddAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionAddAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionAddAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionAddressOf(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionAddressOf',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionAddressOf if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionAddressOf({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionAlignOfType(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionAlignOfType',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionAlignOfType if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionAlignOfType({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionArray(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionArray',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionArray if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionArray({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionAsterisk(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionAsterisk',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionAsterisk if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionAsterisk({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionBitwiseAnd(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionBitwiseAnd',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionBitwiseAnd if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionBitwiseAnd({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionBitwiseAndAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionBitwiseAndAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionBitwiseAndAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionBitwiseAndAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionBitwiseNot(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionBitwiseNot',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionBitwiseNot if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionBitwiseNot({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionBitwiseOr(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionBitwiseOr',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionBitwiseOr if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionBitwiseOr({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionBitwiseOrAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionBitwiseOrAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionBitwiseOrAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionBitwiseOrAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionCall(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionCall',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionCall if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionCall({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionCast(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionCast',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionCast if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionCast({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionComma(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionComma',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionComma if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionComma({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionConditional(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionConditional',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionConditional if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionConditional({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionDereference(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionDereference',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionDereference if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionDereference({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionDivide(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionDivide',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionDivide if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionDivide({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionDivideAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionDivideAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionDivideAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionDivideAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionEmpty(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionEmpty',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionEmpty if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionEmpty({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionEqual(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionEqual',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionEqual if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionEqual({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionExclusiveOr(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionExclusiveOr',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionExclusiveOr if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionExclusiveOr({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionExclusiveOrAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionExclusiveOrAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionExclusiveOrAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionExclusiveOrAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionField(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionField',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionField if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionField({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionFieldDereference(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionFieldDereference',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionFieldDereference if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionFieldDereference({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionFloatLiteral(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionFloatLiteral',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionFloatLiteral if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionFloatLiteral({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionFunctionName(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionFunctionName',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionFunctionName if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionFunctionName({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionGreaterThan(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionGreaterThan',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionGreaterThan if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionGreaterThan({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionGreaterThanOrEqual(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionGreaterThanOrEqual',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionGreaterThanOrEqual if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionGreaterThanOrEqual({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionIdentifier(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionIdentifier',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionIdentifier if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionIdentifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionIndex(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionIndex',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionIndex if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionIndex({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionIntLiteral(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionIntLiteral',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionIntLiteral if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionIntLiteral({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class Identifier(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Identifier',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Identifier if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.Identifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+
+class ExpressionLeftShiftAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionLeftShiftAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionLeftShiftAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionLeftShiftAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionLessThan(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionLessThan',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionLessThan if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionLessThan({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionLessThanOrEqual(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionLessThanOrEqual',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionLessThanOrEqual if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionLessThanOrEqual({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionLogicalAnd(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionLogicalAnd',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionLogicalAnd if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionLogicalAnd({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionLogicalNot(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionLogicalNot',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionLogicalNot if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionLogicalNot({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionLogicalOr(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionLogicalOr',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionLogicalOr if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionLogicalOr({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionMinus(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionMinus',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionMinus if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionMinus({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionModulo(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionModulo',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionModulo if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionModulo({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionModuloAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionModuloAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionModuloAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionModuloAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionMultiply(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionMultiply',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionMultiply if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionMultiply({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionMultiplyAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionMultiplyAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionMultiplyAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionMultiplyAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionNotEqual(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionNotEqual',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionNotEqual if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionNotEqual({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionPlus(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionPlus',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionPlus if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionPlus({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionPostDecrement(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionPostDecrement',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionPostDecrement if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionPostDecrement({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionPostIncrement(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionPostIncrement',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionPostIncrement if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionPostIncrement({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionPreDecrement(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionPreDecrement',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionPreDecrement if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionPreDecrement({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionPreIncrement(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionPreIncrement',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionPreIncrement if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionPreIncrement({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionRightShiftAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionRightShiftAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionRightShiftAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionRightShiftAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionShiftLeft(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionShiftLeft',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionShiftLeft if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionShiftLeft({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionShiftRight(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionShiftRight',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionShiftRight if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionShiftRight({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionSizeOfExpression(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionSizeOfExpression',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionSizeOfExpression if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionSizeOfExpression({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionSizeOfType(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionSizeOfType',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionSizeOfType if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionSizeOfType({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionSubtract(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionSubtract',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionSubtract if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionSubtract({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ExpressionSubtractAssignment(Expression):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ExpressionSubtractAssignment',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Expression.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Expression.copy(
+ self,
+ ExpressionSubtractAssignment if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ExpressionSubtractAssignment({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class FunctionDefinition(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'FunctionDefinition',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ FunctionDefinition if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.FunctionDefinition({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class FunctionSpecifier(element.Element):
+ # GENERATE ELEMENT(int n) BEGIN
+ def __init__(
+ self,
+ tag = 'FunctionSpecifier',
+ attrib = {},
+ text = '',
+ children = [],
+ n = -1
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.n = (
+ element.deserialize_int(n)
+ if isinstance(n, str) else
+ n
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('n', element.serialize_int(self.n))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.n = element.deserialize_int(self.get('n', '-1'))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ FunctionSpecifier if factory is None else factory
+ )
+ result.n = self.n
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.n != -1:
+ params.append(
+ 'n = {0:s}'.format(repr(self.n))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.FunctionSpecifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class GenericAssociation(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'GenericAssociation',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ GenericAssociation if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.GenericAssociation({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class GenericAssociationList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'GenericAssociationList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ GenericAssociationList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.GenericAssociationList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class GenericSelection(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'GenericSelection',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ GenericSelection if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.GenericSelection({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class IdentifierEmpty(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'IdentifierEmpty',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ IdentifierEmpty if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.IdentifierEmpty({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class IdentifierList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'IdentifierList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ IdentifierList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.IdentifierList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class InitDeclarator(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'InitDeclarator',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ InitDeclarator if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.InitDeclarator({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class InitDeclaratorList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'InitDeclaratorList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ InitDeclaratorList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.InitDeclaratorList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ParameterDeclaration(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ParameterDeclaration',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ ParameterDeclaration if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ParameterDeclaration({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class ParameterDeclarationList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'ParameterDeclarationList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ ParameterDeclarationList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.ParameterDeclarationList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class SpecifierQualifierList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'SpecifierQualifierList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ SpecifierQualifierList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.SpecifierQualifierList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class Statement(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Statement',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Statement if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.Statement({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementBreak(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementBreak',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementBreak if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementBreak({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementCase(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementCase',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementCase if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementCase({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementContinue(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementContinue',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementContinue if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementContinue({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementDefault(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementDefault',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementDefault if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementDefault({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementDoWhile(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementDoWhile',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementDoWhile if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementDoWhile({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementExpression(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementExpression',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementExpression if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementExpression({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementFor(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementFor',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementFor if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementFor({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementGoto(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementGoto',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementGoto if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementGoto({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementIf(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementIf',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementIf if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementIf({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementIfElse(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementIfElse',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementIfElse if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementIfElse({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementLabel(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementLabel',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementLabel if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementLabel({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementReturn(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementReturn',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementReturn if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementReturn({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementSwitch(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementSwitch',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementSwitch if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementSwitch({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StatementWhile(Statement):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StatementWhile',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Statement.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Statement.copy(
+ self,
+ StatementWhile if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StatementWhile({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StaticAssertDeclaration(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StaticAssertDeclaration',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StaticAssertDeclaration if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StaticAssertDeclaration({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StorageClassSpecifier(element.Element):
+ # GENERATE ELEMENT(int n) BEGIN
+ def __init__(
+ self,
+ tag = 'StorageClassSpecifier',
+ attrib = {},
+ text = '',
+ children = [],
+ n = -1
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.n = (
+ element.deserialize_int(n)
+ if isinstance(n, str) else
+ n
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('n', element.serialize_int(self.n))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.n = element.deserialize_int(self.get('n', '-1'))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StorageClassSpecifier if factory is None else factory
+ )
+ result.n = self.n
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.n != -1:
+ params.append(
+ 'n = {0:s}'.format(repr(self.n))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StorageClassSpecifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StructDeclaration(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StructDeclaration',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StructDeclaration if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StructDeclaration({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StructDeclarationList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StructDeclarationList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StructDeclarationList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StructDeclarationList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StructDeclarator(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StructDeclarator',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StructDeclarator if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StructDeclarator({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StructDeclaratorList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StructDeclaratorList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StructDeclaratorList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StructDeclaratorList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class StructSpecifier(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'StructSpecifier',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ StructSpecifier if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.StructSpecifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class TypeName(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'TypeName',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ TypeName if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.TypeName({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class TypeQualifier(element.Element):
+ # GENERATE ELEMENT(int n) BEGIN
+ def __init__(
+ self,
+ tag = 'TypeQualifier',
+ attrib = {},
+ text = '',
+ children = [],
+ n = -1
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.n = (
+ element.deserialize_int(n)
+ if isinstance(n, str) else
+ n
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('n', element.serialize_int(self.n))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.n = element.deserialize_int(self.get('n', '-1'))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ TypeQualifier if factory is None else factory
+ )
+ result.n = self.n
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.n != -1:
+ params.append(
+ 'n = {0:s}'.format(repr(self.n))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.TypeQualifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class TypeQualifierList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'TypeQualifierList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ TypeQualifierList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.TypeQualifierList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class TypeQualifierOrStaticList(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'TypeQualifierOrStaticList',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ TypeQualifierOrStaticList if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.TypeQualifierOrStaticList({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class TypeSpecifier(element.Element):
+ # GENERATE ELEMENT(int n) BEGIN
+ def __init__(
+ self,
+ tag = 'TypeSpecifier',
+ attrib = {},
+ text = '',
+ children = [],
+ n = -1
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.n = (
+ element.deserialize_int(n)
+ if isinstance(n, str) else
+ n
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('n', element.serialize_int(self.n))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.n = element.deserialize_int(self.get('n', '-1'))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ TypeSpecifier if factory is None else factory
+ )
+ result.n = self.n
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.n != -1:
+ params.append(
+ 'n = {0:s}'.format(repr(self.n))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.TypeSpecifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+class UnionSpecifier(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'UnionSpecifier',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ UnionSpecifier if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'ast.UnionSpecifier({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+# GENERATE FACTORY(element.Element) BEGIN
+tag_to_class = {
+ 'AlignAsExpression': AlignAsExpression,
+ 'AlignAsType': AlignAsType,
+ 'ArgumentExpressionList': ArgumentExpressionList,
+ 'BlockItemList': BlockItemList,
+ 'CommaEllipsis': CommaEllipsis,
+ 'CommaEllipsisEmpty': CommaEllipsisEmpty,
+ 'Declaration': Declaration,
+ 'DeclarationList': DeclarationList,
+ 'DeclarationSpecifierList': DeclarationSpecifierList,
+ 'Declarator': Declarator,
+ 'DeclaratorAbstract': DeclaratorAbstract,
+ 'DeclaratorArray': DeclaratorArray,
+ 'DeclaratorEmpty': DeclaratorEmpty,
+ 'DeclaratorFunction': DeclaratorFunction,
+ 'DeclaratorFunctionOldStyle': DeclaratorFunctionOldStyle,
+ 'DeclaratorPointer': DeclaratorPointer,
+ 'DefaultTypeName': DefaultTypeName,
+ 'DesignatorField': DesignatorField,
+ 'DesignatorIndex': DesignatorIndex,
+ 'DesignatorInitializer': DesignatorInitializer,
+ 'DesignatorInitializerList': DesignatorInitializerList,
+ 'DesignatorList': DesignatorList,
+ 'EnumSpecifier': EnumSpecifier,
+ 'Enumerator': Enumerator,
+ 'EnumeratorList': EnumeratorList,
+ 'EqualsInitializerEmpty': EqualsInitializerEmpty,
+ 'Expression': Expression,
+ 'ExpressionAdd': ExpressionAdd,
+ 'ExpressionAddAssignment': ExpressionAddAssignment,
+ 'ExpressionAddressOf': ExpressionAddressOf,
+ 'ExpressionAlignOfType': ExpressionAlignOfType,
+ 'ExpressionArray': ExpressionArray,
+ 'ExpressionAssignment': ExpressionAssignment,
+ 'ExpressionAsterisk': ExpressionAsterisk,
+ 'ExpressionBitwiseAnd': ExpressionBitwiseAnd,
+ 'ExpressionBitwiseAndAssignment': ExpressionBitwiseAndAssignment,
+ 'ExpressionBitwiseNot': ExpressionBitwiseNot,
+ 'ExpressionBitwiseOr': ExpressionBitwiseOr,
+ 'ExpressionBitwiseOrAssignment': ExpressionBitwiseOrAssignment,
+ 'ExpressionCall': ExpressionCall,
+ 'ExpressionCast': ExpressionCast,
+ 'ExpressionComma': ExpressionComma,
+ 'ExpressionConditional': ExpressionConditional,
+ 'ExpressionDereference': ExpressionDereference,
+ 'ExpressionDivide': ExpressionDivide,
+ 'ExpressionDivideAssignment': ExpressionDivideAssignment,
+ 'ExpressionEmpty': ExpressionEmpty,
+ 'ExpressionEqual': ExpressionEqual,
+ 'ExpressionExclusiveOr': ExpressionExclusiveOr,
+ 'ExpressionExclusiveOrAssignment': ExpressionExclusiveOrAssignment,
+ 'ExpressionField': ExpressionField,
+ 'ExpressionFieldDereference': ExpressionFieldDereference,
+ 'ExpressionFloatLiteral': ExpressionFloatLiteral,
+ 'ExpressionFunctionName': ExpressionFunctionName,
+ 'ExpressionGreaterThan': ExpressionGreaterThan,
+ 'ExpressionGreaterThanOrEqual': ExpressionGreaterThanOrEqual,
+ 'ExpressionIdentifier': ExpressionIdentifier,
+ 'ExpressionIndex': ExpressionIndex,
+ 'ExpressionIntLiteral': ExpressionIntLiteral,
+ 'Identifier': Identifier,
+ 'ExpressionLeftShiftAssignment': ExpressionLeftShiftAssignment,
+ 'ExpressionLessThan': ExpressionLessThan,
+ 'ExpressionLessThanOrEqual': ExpressionLessThanOrEqual,
+ 'ExpressionLogicalAnd': ExpressionLogicalAnd,
+ 'ExpressionLogicalNot': ExpressionLogicalNot,
+ 'ExpressionLogicalOr': ExpressionLogicalOr,
+ 'ExpressionMinus': ExpressionMinus,
+ 'ExpressionModulo': ExpressionModulo,
+ 'ExpressionModuloAssignment': ExpressionModuloAssignment,
+ 'ExpressionMultiply': ExpressionMultiply,
+ 'ExpressionMultiplyAssignment': ExpressionMultiplyAssignment,
+ 'ExpressionNotEqual': ExpressionNotEqual,
+ 'ExpressionPlus': ExpressionPlus,
+ 'ExpressionPostDecrement': ExpressionPostDecrement,
+ 'ExpressionPostIncrement': ExpressionPostIncrement,
+ 'ExpressionPreDecrement': ExpressionPreDecrement,
+ 'ExpressionPreIncrement': ExpressionPreIncrement,
+ 'ExpressionRightShiftAssignment': ExpressionRightShiftAssignment,
+ 'ExpressionShiftLeft': ExpressionShiftLeft,
+ 'ExpressionShiftRight': ExpressionShiftRight,
+ 'ExpressionSizeOfExpression': ExpressionSizeOfExpression,
+ 'ExpressionSizeOfType': ExpressionSizeOfType,
+ 'ExpressionSubtract': ExpressionSubtract,
+ 'ExpressionSubtractAssignment': ExpressionSubtractAssignment,
+ 'FunctionDefinition': FunctionDefinition,
+ 'FunctionSpecifier': FunctionSpecifier,
+ 'GenericAssociation': GenericAssociation,
+ 'GenericAssociationList': GenericAssociationList,
+ 'GenericSelection': GenericSelection,
+ 'IdentifierEmpty': IdentifierEmpty,
+ 'IdentifierList': IdentifierList,
+ 'InitDeclarator': InitDeclarator,
+ 'InitDeclaratorList': InitDeclaratorList,
+ 'ParameterDeclaration': ParameterDeclaration,
+ 'ParameterDeclarationList': ParameterDeclarationList,
+ 'SpecifierQualifierList': SpecifierQualifierList,
+ 'Statement': Statement,
+ 'StatementBreak': StatementBreak,
+ 'StatementCase': StatementCase,
+ 'StatementContinue': StatementContinue,
+ 'StatementDefault': StatementDefault,
+ 'StatementDoWhile': StatementDoWhile,
+ 'StatementExpression': StatementExpression,
+ 'StatementFor': StatementFor,
+ 'StatementGoto': StatementGoto,
+ 'StatementIf': StatementIf,
+ 'StatementIfElse': StatementIfElse,
+ 'StatementLabel': StatementLabel,
+ 'StatementReturn': StatementReturn,
+ 'StatementSwitch': StatementSwitch,
+ 'StatementWhile': StatementWhile,
+ 'StaticAssertDeclaration': StaticAssertDeclaration,
+ 'StorageClassSpecifier': StorageClassSpecifier,
+ 'StructDeclaration': StructDeclaration,
+ 'StructDeclarationList': StructDeclarationList,
+ 'StructDeclarator': StructDeclarator,
+ 'StructDeclaratorList': StructDeclaratorList,
+ 'StructSpecifier': StructSpecifier,
+ 'TypeName': TypeName,
+ 'TypeQualifier': TypeQualifier,
+ 'TypeQualifierList': TypeQualifierList,
+ 'TypeQualifierOrStaticList': TypeQualifierOrStaticList,
+ 'TypeSpecifier': TypeSpecifier,
+ 'UnionSpecifier': UnionSpecifier
+}
+def factory(tag, attrib = {}, *args, **kwargs):
+ return tag_to_class.get(tag, element.Element)(tag, attrib, *args, **kwargs)
+# GENERATE END
--- /dev/null
+#!/bin/sh
+if ./generate.py ast <ast.py >ast.py.new && ! diff -q ast.py ast.py.new
+then
+ mv ast.py.new ast.py
+else
+ rm -f ast.py.new
+fi
--- /dev/null
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+def bisect_set_or(character_set0, character_set1):
+ # calculate union of the child sets
+ # we do this by calculating a series of breakpoints, at each breakpoint
+ # evaluating the "or" (max) of the even/odd truth values of each child,
+ # then making the output truth value even/odd by outputting if necessary
+ result = []
+ i = 0
+ j = 0
+ while True:
+ if i < len(character_set0):
+ k = character_set0[i]
+ if j < len(character_set1):
+ k = min(k, character_set1[j])
+ elif j < len(character_set1):
+ k = character_set1[j]
+ else:
+ break
+ if i < len(character_set0) and character_set0[i] == k:
+ i += 1
+ if j < len(character_set1) and character_set1[j] == k:
+ j += 1
+ if (len(result) & 1) != max(i & 1, j & 1):
+ result.append(k)
+ assert (i & 1) == 0 and (j & 1) == 0
+ return result
+
+def bisect_set_and(character_set0, character_set1):
+ # calculate intersection of the child sets
+ # we do this by calculating a series of breakpoints, at each breakpoint
+ # evaluating the "and" (min) of the even/odd truth values of each child,
+ # then making the output truth value even/odd by outputting if necessary
+ result = []
+ i = 0
+ j = 0
+ while True:
+ if i < len(character_set0):
+ k = character_set0[i]
+ if j < len(character_set1):
+ k = min(k, character_set1[j])
+ elif j < len(character_set1):
+ k = character_set1[j]
+ else:
+ break
+ if i < len(character_set0) and character_set0[i] == k:
+ i += 1
+ if j < len(character_set1) and character_set1[j] == k:
+ j += 1
+ if (len(result) & 1) != min(i & 1, j & 1):
+ result.append(k)
+ assert (i & 1) == 0 and (j & 1) == 0
+ return result
+
+def bisect_set_not(character_set):
+ # calculate complement of the child set
+ # if child set begins with [0], remove it, otherwise add [0] prefix
+ # if child set ends with [n_characters], remove it, otherwise add [n_characters] suffix
+ # the suffix part is not totally necessary, but makes sure length is even
+ # (the evenness is so that single character sets can always be [c, c + 1])
+ result = list(character_set)
+ if result[:1] == [0]:
+ del result[:1]
+ else:
+ result[:0] = [0]
+ if result[-1:] == [n_characters]:
+ del result[-1:]
+ else:
+ result.append(n_characters)
+ return result
--- /dev/null
+import ansi_c_yylex
+import ansi_c_yyparse
+import ast
+import element
+
+def extract(i):
+ return ''.join(
+ [
+ k
+ for j in range(len(i))
+ for k in [element.get_text(i, j), extract(i[j])]
+ ] +
+ [element.get_text(i, len(i))]
+ )
+
+def c_to_python(text):
+ root = element.Element('root', text = text)
+ ansi_c_yyparse.yyparse(
+ root,
+ 0,
+ 0,
+ ast.factory,
+ ansi_c_yylex.yylex(
+ root,
+ 0,
+ 0,
+ ast.factory,
+ iter([])
+ )
+ )
+ return extract(root)
--- /dev/null
+#!/usr/bin/env python3
+
+import re
+import sys
+
+re_begin = re.compile(
+ '([\t ]*# GENERATE .*) BEGIN'
+)
+re_end = re.compile(
+ '([\t ]*# GENERATE END)'
+)
+
+line = sys.stdin.readline()
+while len(line):
+ match = re_begin.match(line)
+ if match is not None:
+ sys.stdout.write(match.group(1))
+ line = sys.stdin.readline()
+ while len(line):
+ match = re_end.match(line)
+ if match is not None:
+ sys.stdout.write(line[len(match.group(1)):])
+ break
+ line = sys.stdin.readline()
+ else:
+ sys.stdout.write(line)
+ line = sys.stdin.readline()
--- /dev/null
+import bisect
+import element
+import work
+import sys
+
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+class DFA:
+ # transition classes:
+ # instructions to transform thread list from a multistate to next multistate
+ # (TRANSITION_POP, n) j += n
+ # (TRANSITION_DUP, n) threads0[j - n:j] = threads0[j:j + n]
+ # j -= n
+ # (TRANSITION_MARK, n, mark_value) threads0[j:j + n] = [
+ # (i, mark, thread)
+ # for thread in threads0[j:j + n]
+ # ]
+ # (TRANSITION_MOVE, n) threads1.extend(threads0[j:j + n])
+ # j += n
+ # (TRANSITION_DEL, n) del threads1[-n:]
+
+ TRANSITION_POP = 0
+ TRANSITION_DUP = 1
+ TRANSITION_MARK = 2
+ TRANSITION_MOVE = 3
+ #TRANSITION_DEL = 4
+
+ def __init__(
+ self,
+ groups = [],
+ states = [([n_characters], [0], 0)],
+ actions = [(0, [])],
+ start_action = [] # can have multiple DFAs in same container
+ ):
+ # groups: list of group_desc
+ # group_desc: (tag, kwargs)
+ # tag, kwargs will be passed to apply_markup() hence factory()
+ # states: list of state_desc
+ # state_desc: (list of breaks, list of action to do, accept_thread)
+ # actions: list of action_desc
+ # action_desc: (state to go to next, compiled transition to do first)
+ # accept_thread: which thread of thread list to use, -1 don't accept
+ self.groups = groups
+ self.states = states
+ self.actions = actions
+ self.start_action = start_action
+
+ def match_text(self, text, i, start_index = 0):
+ def transit(transition):
+ nonlocal threads0, threads1, prefix_slop # note: also uses i
+ j = prefix_slop
+ for trans in transition:
+ if trans[0] == DFA.TRANSITION_POP:
+ j += trans[1]
+ elif trans[0] == DFA.TRANSITION_DUP:
+ while j < trans[1]:
+ threads0[:0] = [None] * prefix_slop
+ threads1[:0] = [None] * prefix_slop
+ j += prefix_slop
+ prefix_slop *= 2
+ threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
+ j -= trans[1]
+ elif trans[0] == DFA.TRANSITION_MARK:
+ threads0[j:j + trans[1]] = [
+ (i, trans[2], thread)
+ for thread in threads0[j:j + trans[1]]
+ ]
+ elif trans[0] == DFA.TRANSITION_MOVE:
+ threads1.extend(threads0[j:j + trans[1]])
+ j += trans[1]
+ #elif trans[0] == DFA.TRANSITION_DEL:
+ # del threads1[-trans[1]:]
+ else:
+ assert False
+ assert j == len(threads0)
+ threads0, threads1 = threads1, threads0
+ del threads1[prefix_slop:]
+
+ threads0 = [None, None]
+ threads1 = [None]
+ prefix_slop = 1
+
+ action = self.start_action[start_index]
+ while action != -1:
+ state, transition = self.actions[action]
+ #print('i', i, 'action', action, 'state', state, 'transition', transition)
+ transit(transition)
+ if state == 0:
+ # there is only one match, which is complete
+ assert len(threads0) == prefix_slop + 1
+ return threads0[prefix_slop]
+ if i >= len(text):
+ # return best match we have, but not incomplete match
+ i = self.states[state][2]
+ return (None if i == -1 else threads0[prefix_slop + i])
+ action = self.states[state][1][
+ bisect.bisect_right(self.states[state][0], ord(text[i]))
+ ]
+ i += 1
+ return None
+
+ def match_yychunk(self, root, pos, off, yychunk_iter, start_index = 0):
+ if pos < 0:
+ pos, off = element.to_start_relative(root, pos, off)
+
+ def transit(transition):
+ nonlocal threads0, threads1, prefix_slop # note: also uses pos, off
+ j = prefix_slop
+ for trans in transition:
+ if trans[0] == DFA.TRANSITION_POP:
+ j += trans[1]
+ elif trans[0] == DFA.TRANSITION_DUP:
+ while j < trans[1]:
+ threads0[:0] = [None] * prefix_slop
+ threads1[:0] = [None] * prefix_slop
+ j += prefix_slop
+ prefix_slop *= 2
+ threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
+ j -= trans[1]
+ elif trans[0] == DFA.TRANSITION_MARK:
+ threads0[j:j + trans[1]] = [
+ (pos, off, trans[2], thread)
+ for thread in threads0[j:j + trans[1]]
+ ]
+ elif trans[0] == DFA.TRANSITION_MOVE:
+ threads1.extend(threads0[j:j + trans[1]])
+ j += trans[1]
+ #elif trans[0] == DFA.TRANSITION_DEL:
+ # del threads1[-trans[1]:]
+ else:
+ assert False
+ assert j == len(threads0)
+ threads0, threads1 = threads1, threads0
+ del threads1[prefix_slop:]
+
+ threads0 = [None, None]
+ threads1 = [None]
+ prefix_slop = 1
+
+ action = self.start_action[start_index]
+ text = element.get_text(root, pos)
+ while action != -1:
+ state, transition = self.actions[action]
+ transit(transition)
+ if state == 0:
+ # there is only one match, which is complete
+ assert len(threads0) == prefix_slop + 1
+ return threads0[prefix_slop]
+ while off >= len(text):
+ if pos < len(root):
+ pos += 1
+ off = 0
+ else:
+ try:
+ next(yychunk_iter)
+ except StopIteration:
+ # return best match we have, but not incomplete match
+ i = self.states[state][2]
+ return (None if i == -1 else threads0[prefix_slop + i])
+ text = element.get_text(root, pos)
+ #print(
+ # 'state {0:d} pos {1:d} off {2:d} text "{3:s}"'.format(
+ # state,
+ # pos,
+ # off,
+ # text.replace('\n', '$')
+ # )
+ #)
+ action = self.states[state][1][
+ bisect.bisect_right(self.states[state][0], ord(text[off]))
+ ]
+ off += 1
+ return None
+
+ def yylex(self, root, pos, off, factory, yychunk_iter):
+ if pos < 0:
+ pos, off = element.to_start_relative(root, pos, off)
+
+ while True:
+ # note: pointers must be kept start relative during the below call,
+ # because it extends the following text by calling the yychunk_iter
+ thread = self.match_yychunk(root, pos, off, yychunk_iter)
+ if thread is None:
+ break
+ stack = []
+ while True:
+ pos, off, mark_value, thread = thread
+ group_index = mark_value >> 1
+ if (mark_value & 1) != 0:
+ end_pos, end_off = element.to_end_relative(root, pos, off)
+ stack.append((end_pos, end_off, group_index))
+ else:
+ end_pos, end_off, temp = stack.pop()
+ assert temp == group_index
+ if len(stack) == 0:
+ break
+ tag, kwargs = self.groups[group_index]
+ if tag != '':
+ work.apply_markup(
+ root,
+ pos,
+ off,
+ end_pos,
+ end_off,
+ factory,
+ tag,
+ **kwargs
+ )
+ # note: pointers must be kept end relative during the below call,
+ # because it modifies the preceding text by calling apply_markup()
+ yield end_pos, end_off, group_index
+ pos, off = element.to_start_relative(root, end_pos, end_off)
+
+ def __repr__(self):
+ return 'dfa.DFA({0:s}, {1:s}, {2:s}, {3:s})'.format(
+ repr(self.groups),
+ repr(self.states),
+ repr(self.actions),
+ repr(self.start_action)
+ )
--- /dev/null
+import xml.etree.ElementTree
+
+class Element(xml.etree.ElementTree._Element_Py):
+ def __init__(self, tag = 'Element', attrib = {}, text = '', children = []):
+ xml.etree.ElementTree._Element_Py.__init__(self, tag, attrib)
+ self.ref = -1
+ self.seen = False
+ set_text(self, 0, text)
+ self[:] = children
+ def serialize(self, ref_list):
+ for i in self:
+ # parented, enforce that child can only be parented at most once
+ # (although there can be unlimited numbers of numeric refs to it)
+ assert not i.seen
+ i.seen = True
+ if i.ref == -1:
+ i.serialize(ref_list)
+ def deserialize(self, ref_list):
+ for i in self:
+ i.deserialize(ref_list)
+ def copy(self, factory = None):
+ result = (Element if factory is None else factory)(self.tag, self.attrib)
+ result.text = self.text
+ result.tail = self.tail
+ result[:] = [i.copy() for i in self]
+ return result
+ def repr_serialize(self, params):
+ if len(self):
+ params.append(
+ 'children = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self])
+ )
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'element.Element({0:s})'.format(', '.join(params))
+
+bool_to_str = ['false', 'true']
+def serialize_bool(value):
+ return bool_to_str[int(value)]
+
+str_to_bool = {'false': False, 'true': True}
+def deserialize_bool(text):
+ return str_to_bool[text]
+
+def serialize_int(value):
+ return str(value)
+
+def deserialize_int(text):
+ return int(text)
+
+def serialize_ref(value, ref_list):
+ if value is None:
+ ref = -1
+ else:
+ ref = value.ref
+ if ref == -1:
+ ref = len(ref_list)
+ ref_list.append(value)
+ value.ref = ref
+ value.set('ref', str(ref))
+ # this doesn't set the seen flag, so it will be parented by the
+ # root, unless it is already parented or gets parented later on
+ if not value.seen:
+ value.serialize(ref_list)
+ return str(ref)
+
+def deserialize_ref(text, ref_list):
+ ref = int(text)
+ return None if ref < 0 else ref_list[ref]
+
+def serialize_str(value):
+ return value
+
+def deserialize_str(text):
+ return text
+
+def serialize(value, fout, encoding = 'unicode'):
+ ref_list = []
+ serialize_ref(value, ref_list)
+ parents = [i for i in ref_list if not i.seen]
+ root = Element('root', children = parents)
+ for i in range(len(root)):
+ set_text(root, i, '\n ')
+ set_text(root, len(root), '\n')
+ root.tail = '\n'
+ xml.etree.ElementTree.ElementTree(root).write(fout, encoding)
+ for i in root:
+ i.tail = None
+ for i in ref_list:
+ i.ref = -1
+ del i.attrib['ref']
+ i = 0
+ while i < len(parents):
+ for j in parents[i]:
+ j.seen = False
+ parents.append(j)
+ i += 1
+
+def deserialize(fin, factory = Element, encoding = 'unicode'):
+ root = xml.etree.ElementTree.parse(
+ fin,
+ xml.etree.ElementTree.XMLParser(
+ target = xml.etree.ElementTree.TreeBuilder(factory),
+ encoding = encoding
+ )
+ ).getroot()
+ assert root.tag == 'root'
+ for i in root:
+ i.tail = None
+ i = 0
+ parents = root[:]
+ ref_list = []
+ while i < len(parents):
+ j = parents[i]
+ if 'ref' in j.attrib:
+ ref = int(j.attrib['ref'])
+ del j.attrib['ref']
+ if len(ref_list) < ref + 1:
+ ref_list.extend([None] * (ref + 1 - len(ref_list)))
+ ref_list[ref] = j
+ parents.extend(j[:])
+ i += 1
+ for i in root:
+ i.deserialize(ref_list)
+ return ref_list[0]
+
+# compatibility scheme to access arbitrary xml.etree.ElementTree.Element-like
+# objects (not just Element defined above) using a more consistent interface:
+def get_text(root, i):
+ if i < 0:
+ i += len(root) + 1
+ text = root.text if i == 0 else root[i - 1].tail
+ return '' if text is None else text
+
+def set_text(root, i, text):
+ if i < 0:
+ i += len(root) + 1
+ if len(text) == 0:
+ text = None
+ if i == 0:
+ root.text = text
+ else:
+ root[i - 1].tail = text
+
+def to_end_relative(root, pos, off):
+ assert pos >= 0 and off >= 0
+ off -= len(get_text(root, pos))
+ pos -= len(root) + 1
+ return pos, off
+
+def to_start_relative(root, pos, off):
+ assert pos < 0 and off <= 0
+ pos += len(root) + 1
+ off += len(get_text(root, pos))
+ return pos, off
--- /dev/null
+#!/usr/bin/env python3
+
+import re
+import sys
+
+if len(sys.argv) >= 2:
+ package_name = '{0:s}.'.format(sys.argv[1])
+else:
+ package_name = ''
+
+default_value = {
+ 'bool': 'False',
+ 'int': '-1',
+ 'ref': 'None',
+ 'str': '\'\'',
+ 'list(bool)': '[]',
+ 'list(int)': '[]',
+ 'list(ref)': '[]',
+ 'list(str)': '[]',
+ 'set(bool)': 'set()',
+ 'set(int)': 'set()',
+ 'set(ref)': 'set()',
+ 'set(str)': 'set()'
+}
+default_value_str = {
+ 'bool': 'false',
+ 'int': '-1',
+ 'ref': '-1',
+ 'str': ''
+}
+
+re_class = re.compile(
+ '([\t ]*)class ([A-Za-z_][A-Za-z0-9_]*)\(([A-Za-z_][A-Za-z0-9_.]*)'
+)
+re_element = re.compile(
+ '([\t ]*)# GENERATE ELEMENT\((([^()]|\([^()]*\))*)\)( BEGIN)?'
+)
+re_factory = re.compile(
+ '([\t ]*)# GENERATE FACTORY\(([^()]*)\)( BEGIN)?'
+)
+stack = []
+classes = []
+base_classes = [{'element.Element': []}] # params
+
+line = sys.stdin.readline()
+while len(line):
+ match = re_class.match(line)
+ if match is not None:
+ sys.stdout.write(line)
+ indent = match.group(1)
+ class_name = match.group(2)
+ base_class = match.group(3)
+ while len(stack) and stack[-1][0][:len(indent)] == indent:
+ _, temp_class_name, _, _ = stack.pop()
+ for temp_base_class, temp_fields in base_classes.pop().items():
+ base_classes[-1][
+ '{0:s}.{1:s}'.format(temp_class_name, temp_base_class)
+ ] = temp_fields
+ for i in range(len(base_classes) - 1, -1, -1):
+ if base_class in base_classes[i]:
+ classes.append(
+ '.'.join([j for _, j, _, _ in stack] + [class_name])
+ )
+ full_base_class = '.'.join(
+ [j for _, j, _, _ in stack[:i]] + [base_class]
+ )
+ base_classes[-1][class_name] = list(base_classes[i][base_class])
+ break
+ else:
+ full_base_class = base_class
+ stack.append((indent, class_name, base_class, full_base_class))
+ base_classes.append({})
+ else:
+ match = re_element.match(line)
+ if match is not None:
+ indent = match.group(1)
+ params = match.group(2)
+ begin = match.group(4)
+
+ while len(stack) and stack[-1][0][:len(indent)] == indent:
+ _, temp_class_name, _, _ = stack.pop()
+ for temp_base_class, temp_fields in base_classes.pop().items():
+ base_classes[-1][
+ '{0:s}.{1:s}'.format(temp_class_name, temp_base_class)
+ ] = temp_fields
+ _, class_name, base_class, full_base_class = stack[-1]
+
+ fields = params.split(',')
+ if fields[-1] == '':
+ del fields[-1:]
+ fields = [i.split() for i in fields]
+ fields = [(type, name) for [type, name] in fields]
+ i = len(base_classes[-2][class_name])
+ base_classes[-2][class_name].extend(fields)
+
+ sys.stdout.write(
+ '''{0:s}# GENERATE ELEMENT({1:s}) BEGIN
+{2:s}def __init__(
+{3:s} self,
+{4:s} tag = '{5:s}',
+{6:s} attrib = {{}},
+{7:s} text = '',
+{8:s} children = []{9:s}
+{10:s}):
+{11:s} {12:s}.__init__(
+{13:s} self,
+{14:s} tag,
+{15:s} attrib,
+{16:s} text,
+{17:s} children{18:s}
+{19:s} )
+'''.format(
+ indent,
+ params,
+ indent,
+ indent,
+ indent,
+ '_'.join([i for _, i, _, _ in stack]),
+ indent,
+ indent,
+ indent,
+ ''.join(
+ [
+ ',\n{0:s} {1:s} = {2:s}'.format(
+ indent,
+ name,
+ default_value[type]
+ )
+ for type, name in base_classes[-2][class_name]
+ ]
+ ),
+ indent,
+ indent,
+ full_base_class,
+ indent,
+ indent,
+ indent,
+ indent,
+ indent,
+ ''.join(
+ [
+ ',\n{0:s} {1:s}'.format(
+ indent,
+ name
+ )
+ for type, name in base_classes[-2][class_name][:i]
+ ]
+ ),
+ indent
+ )
+ )
+ for type, name in fields:
+ if type == 'ref' or type == 'list(ref)' or type == 'set(ref)' or type == 'str':
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = {2:s}
+'''.format(indent, name, name)
+ )
+ elif type[:5] == 'list(' and type[-1:] == ')':
+ subtype = type[5:-1]
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = (
+{2:s} [element.deserialize_{3:s}(i) for i in {4:s}.split()]
+{5:s} if isinstance({6:s}, str) else
+{7:s} {8:s}
+{9:s} )
+'''.format(
+ indent,
+ name,
+ indent,
+ subtype,
+ name,
+ indent,
+ name,
+ indent,
+ name,
+ indent
+ )
+ )
+ elif type[:4] == 'set(' and type[-1:] == ')':
+ subtype = type[4:-1]
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = (
+{2:s} set([element.deserialize_{3:s}(i) for i in {4:s}.split()])
+{5:s} if isinstance({6:s}, str) else
+{7:s} {8:s}
+{9:s} )
+'''.format(
+ indent,
+ name,
+ indent,
+ subtype,
+ name,
+ indent,
+ name,
+ indent,
+ name,
+ indent
+ )
+ )
+ else:
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = (
+{2:s} element.deserialize_{3:s}({4:s})
+{5:s} if isinstance({6:s}, str) else
+{7:s} {8:s}
+{9:s} )
+'''.format(
+ indent,
+ name,
+ indent,
+ type,
+ name,
+ indent,
+ name,
+ indent,
+ name,
+ indent
+ )
+ )
+ if len(fields):
+ sys.stdout.write(
+ '''{0:s}def serialize(self, ref_list):
+{1:s} {2:s}.serialize(self, ref_list)
+'''.format(indent, indent, full_base_class)
+ )
+ for type, name in fields:
+ if type[:5] == 'list(' and type[-1:] == ')':
+ subtype = type[5:-1]
+ sys.stdout.write(
+ '''{0:s} self.set(
+{1:s} '{2:s}',
+{3:s} ' '.join([element.serialize_{4:s}(i{5:s}) for i in self.{6:s}])
+{7:s} )
+'''.format(
+ indent,
+ indent,
+ name,
+ indent,
+ subtype,
+ ', ref_list' if subtype == 'ref' else '',
+ name,
+ indent
+ )
+ )
+ elif type[:4] == 'set(' and type[-1:] == ')':
+ subtype = type[4:-1]
+ sys.stdout.write(
+ '''{0:s} self.set(
+{1:s} '{2:s}',
+{3:s} ' '.join([element.serialize_{4:s}(i{5:s}) for i in sorted(self.{6:s})])
+{7:s} )
+'''.format(
+ indent,
+ indent,
+ name,
+ indent,
+ subtype,
+ ', ref_list' if subtype == 'ref' else '',
+ name,
+ indent
+ )
+ )
+ else:
+ sys.stdout.write(
+ '''{0:s} self.set('{1:s}', element.serialize_{2:s}(self.{3:s}{4:s}))
+'''.format(
+ indent,
+ name,
+ type,
+ name,
+ ', ref_list' if type == 'ref' else ''
+ )
+ )
+ sys.stdout.write(
+ '''{0:s}def deserialize(self, ref_list):
+{1:s} {2:s}.deserialize(self, ref_list)
+'''.format(indent, indent, full_base_class)
+ )
+ for type, name in fields:
+ if type[:5] == 'list(' and type[-1:] == ')':
+ subtype = type[5:-1]
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = [
+{2:s} element.deserialize_{3:s}(i{4:s})
+{5:s} for i in self.get('{6:s}', '').split()
+{7:s} ]
+'''.format(
+ indent,
+ name,
+ indent,
+ subtype,
+ ', ref_list' if subtype == 'ref' else '',
+ indent,
+ name,
+ indent
+ )
+ )
+ elif type[:4] == 'set(' and type[-1:] == ')':
+ subtype = type[4:-1]
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = set(
+{2:s} [
+{3:s} element.deserialize_{4:s}(i{5:s})
+{6:s} for i in self.get('{7:s}', '').split()
+{8:s} ]
+{9:s} )
+'''.format(
+ indent,
+ name,
+ indent,
+ indent,
+ subtype,
+ ', ref_list' if subtype == 'ref' else '',
+ indent,
+ name,
+ indent,
+ indent
+ )
+ )
+ else:
+ sys.stdout.write(
+ '''{0:s} self.{1:s} = element.deserialize_{2:s}(self.get('{3:s}', '{4:s}'){5:s})
+'''.format(
+ indent,
+ name,
+ type,
+ name,
+ default_value_str[type],
+ ', ref_list' if type == 'ref' else ''
+ )
+ )
+ sys.stdout.write(
+ '''{0:s}def copy(self, factory = None):
+{1:s} result = {2:s}.copy(
+{3:s} self,
+{4:s} {5:s} if factory is None else factory
+{6:s} ){7:s}
+{8:s} return result
+'''.format(
+ indent,
+ indent,
+ full_base_class,
+ indent,
+ indent,
+ class_name,
+ indent,
+ ''.join(
+ [
+ '\n{0:s} result.{1:s} = self.{2:s}'.format(
+ indent,
+ name,
+ name
+ )
+ for _, name in fields
+ ]
+ ),
+ indent
+ )
+ )
+ if len(fields):
+ sys.stdout.write(
+ '''{0:s}def repr_serialize(self, params):
+{1:s} {2:s}.repr_serialize(self, params)
+'''.format(
+ indent,
+ indent,
+ full_base_class
+ )
+ )
+ for type, name in fields:
+ if type[:5] == 'list(' and type[-1:] == ')':
+ subtype = type[5:-1]
+ sys.stdout.write(
+ '''{0:s} if len(self.{1:s}):
+{2:s} params.append(
+{3:s} '{4:s} = [{{0:s}}]'.format(
+{5:s} ', '.join([repr(i) for i in self.{6:s}])
+{7:s} )
+{8:s} )
+'''.format(
+ indent,
+ name,
+ indent,
+ indent,
+ name,
+ indent,
+ name,
+ indent,
+ indent
+ )
+ )
+ elif type[:4] == 'set(' and type[-1:] == ')':
+ subtype = type[4:-1]
+ sys.stdout.write(
+ '''{0:s} if len(self.{1:s}):
+{2:s} params.append(
+{3:s} '{4:s} = set([{{0:s}}])'.format(
+{5:s} ', '.join([repr(i) for i in sorted(self.{6:s})])
+{7:s} )
+{8:s} )
+'''.format(
+ indent,
+ name,
+ indent,
+ indent,
+ name,
+ indent,
+ name,
+ indent,
+ indent
+ )
+ )
+ else:
+ sys.stdout.write(
+ '''{0:s} if self.{1:s} != {2:s}:
+{3:s} params.append(
+{4:s} '{5:s} = {{0:s}}'.format(repr(self.{6:s}))
+{7:s} )
+'''.format(
+ indent,
+ name,
+ default_value[type],
+ indent,
+ indent,
+ name,
+ name,
+ indent
+ )
+ )
+ sys.stdout.write(
+ '''{0:s}def __repr__(self):
+{1:s} params = []
+{2:s} self.repr_serialize(params)
+{3:s} return '{4:s}{5:s}({{0:s}})'.format(', '.join(params))
+{6:s}# GENERATE END
+'''.format(
+ indent,
+ indent,
+ indent,
+ indent,
+ package_name,
+ '.'.join([i for _, i, _, _ in stack]),
+ indent
+ )
+ )
+ if begin is not None:
+ line = sys.stdin.readline()
+ while len(line):
+ if line.strip() == '# GENERATE END':
+ break
+ line = sys.stdin.readline()
+ else:
+ assert False
+ else:
+ match = re_factory.match(line)
+ if match is not None:
+ indent = match.group(1)
+ param = match.group(2)
+ begin = match.group(3)
+
+ sys.stdout.write(
+ '''{0:s}# GENERATE FACTORY({1:s}) BEGIN
+{2:s}tag_to_class = {{{3:s}
+{4:s}}}
+{5:s}def factory(tag, attrib = {{}}, *args, **kwargs):
+{6:s} return tag_to_class.get(tag, {7:s})(tag, attrib, *args, **kwargs)
+{8:s}# GENERATE END
+'''.format(
+ indent,
+ param,
+ indent,
+ ','.join(
+ [
+ '\n{0:s} \'{1:s}\': {2:s}'.format(
+ indent,
+ i.replace('.', '_'),
+ i
+ )
+ for i in classes
+ ]
+ ),
+ indent,
+ indent,
+ indent,
+ param,
+ indent
+ )
+ )
+
+ if begin is not None:
+ line = sys.stdin.readline()
+ while len(line):
+ if line.strip() == '# GENERATE END':
+ break
+ line = sys.stdin.readline()
+ else:
+ assert False
+ else:
+ sys.stdout.write(line)
+ line = sys.stdin.readline()
--- /dev/null
+import bisect
+import bisect_set
+import element
+import lr1
+import sys
+
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+class Grammar(element.Element):
+ class Production(element.Element):
+ class Item(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar_Production_Item',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Item if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar.Production.Item({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, name_to_character_sets, group_index):
+ raise NotImplementedException
+ def add_to_groups(self, groups):
+ raise NotImplementedException
+ def add_to_lr1_symbols(self, symbols, group_bounds):
+ raise NotImplementedException
+
+ class Group(Item):
+ class Attribute(element.Element):
+ # GENERATE ELEMENT(str name, str value) BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar_Production_Group_Attribute',
+ attrib = {},
+ text = '',
+ children = [],
+ name = '',
+ value = ''
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.name = name
+ self.value = value
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('name', element.serialize_str(self.name))
+ self.set('value', element.serialize_str(self.value))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.name = element.deserialize_str(self.get('name', ''))
+ self.value = element.deserialize_str(self.get('value', ''))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Attribute if factory is None else factory
+ )
+ result.name = self.name
+ result.value = self.value
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.name != '':
+ params.append(
+ 'name = {0:s}'.format(repr(self.name))
+ )
+ if self.value != '':
+ params.append(
+ 'value = {0:s}'.format(repr(self.value))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar.Production.Group.Attribute({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+ # GENERATE ELEMENT(int index, str name, list(ref) attributes) BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar_Production_Group',
+ attrib = {},
+ text = '',
+ children = [],
+ index = -1,
+ name = '',
+ attributes = []
+ ):
+ Grammar.Production.Item.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.index = (
+ element.deserialize_int(index)
+ if isinstance(index, str) else
+ index
+ )
+ self.name = name
+ self.attributes = attributes
+ def serialize(self, ref_list):
+ Grammar.Production.Item.serialize(self, ref_list)
+ self.set('index', element.serialize_int(self.index))
+ self.set('name', element.serialize_str(self.name))
+ self.set(
+ 'attributes',
+ ' '.join([element.serialize_ref(i, ref_list) for i in self.attributes])
+ )
+ def deserialize(self, ref_list):
+ Grammar.Production.Item.deserialize(self, ref_list)
+ self.index = element.deserialize_int(self.get('index', '-1'))
+ self.name = element.deserialize_str(self.get('name', ''))
+ self.attributes = [
+ element.deserialize_ref(i, ref_list)
+ for i in self.get('attributes', '').split()
+ ]
+ def copy(self, factory = None):
+ result = Grammar.Production.Item.copy(
+ self,
+ Group if factory is None else factory
+ )
+ result.index = self.index
+ result.name = self.name
+ result.attributes = self.attributes
+ return result
+ def repr_serialize(self, params):
+ Grammar.Production.Item.repr_serialize(self, params)
+ if self.index != -1:
+ params.append(
+ 'index = {0:s}'.format(repr(self.index))
+ )
+ if self.name != '':
+ params.append(
+ 'name = {0:s}'.format(repr(self.name))
+ )
+ if len(self.attributes):
+ params.append(
+ 'attributes = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self.attributes])
+ )
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar.Production.Group({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, name_to_character_sets, group_index):
+ self.index = group_index
+ group_index += 1
+ for i in self:
+ group_index = i.post_process(name_to_character_sets, group_index)
+ return group_index
+ def add_to_groups(self, groups):
+ assert len(groups) == self.index
+ groups.append(
+ (self.name, {i.name: i.value for i in self.attributes})
+ )
+ for i in self:
+ i.add_to_groups(groups)
+ def add_to_lr1_symbols(self, symbols, group_bounds):
+ group_start = len(symbols)
+ assert len(group_bounds) == self.index
+ group_bounds.append(None)
+ group_count = 0
+ for i in self:
+ group_count += (
+ i.add_to_lr1_symbols(symbols, group_bounds)
+ )
+ group_bounds[self.index] = (
+ group_start,
+ group_count,
+ self.name,
+ {i.name: i.value for i in self.attributes}
+ )
+ return 1 # count of groups or ungrouped characters
+
+ class Symbol(element.Element):
+ # GENERATE ELEMENT(list(int) terminal_set, list(int) nonterminal_set) BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar_Production_Symbol',
+ attrib = {},
+ text = '',
+ children = [],
+ terminal_set = [],
+ nonterminal_set = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.terminal_set = (
+ [element.deserialize_int(i) for i in terminal_set.split()]
+ if isinstance(terminal_set, str) else
+ terminal_set
+ )
+ self.nonterminal_set = (
+ [element.deserialize_int(i) for i in nonterminal_set.split()]
+ if isinstance(nonterminal_set, str) else
+ nonterminal_set
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set(
+ 'terminal_set',
+ ' '.join([element.serialize_int(i) for i in self.terminal_set])
+ )
+ self.set(
+ 'nonterminal_set',
+ ' '.join([element.serialize_int(i) for i in self.nonterminal_set])
+ )
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.terminal_set = [
+ element.deserialize_int(i)
+ for i in self.get('terminal_set', '').split()
+ ]
+ self.nonterminal_set = [
+ element.deserialize_int(i)
+ for i in self.get('nonterminal_set', '').split()
+ ]
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Symbol if factory is None else factory
+ )
+ result.terminal_set = self.terminal_set
+ result.nonterminal_set = self.nonterminal_set
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if len(self.terminal_set):
+ params.append(
+ 'terminal_set = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self.terminal_set])
+ )
+ )
+ if len(self.nonterminal_set):
+ params.append(
+ 'nonterminal_set = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self.nonterminal_set])
+ )
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar.Production.Symbol({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, name_to_character_sets, group_index):
+ return group_index
+ def add_to_groups(self, groups):
+ pass
+ def add_to_lr1_symbols(self, symbols, group_bounds):
+ symbols.append((self.terminal_set, self.nonterminal_set))
+ return 1 # count of groups or ungrouped characters
+
+ class NamedSymbol(Symbol):
+ # GENERATE ELEMENT(str name) BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar_Production_NamedSymbol',
+ attrib = {},
+ text = '',
+ children = [],
+ terminal_set = [],
+ nonterminal_set = [],
+ name = ''
+ ):
+ Grammar.Production.Symbol.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children,
+ terminal_set,
+ nonterminal_set
+ )
+ self.name = name
+ def serialize(self, ref_list):
+ Grammar.Production.Symbol.serialize(self, ref_list)
+ self.set('name', element.serialize_str(self.name))
+ def deserialize(self, ref_list):
+ Grammar.Production.Symbol.deserialize(self, ref_list)
+ self.name = element.deserialize_str(self.get('name', ''))
+ def copy(self, factory = None):
+ result = Grammar.Production.Symbol.copy(
+ self,
+ NamedSymbol if factory is None else factory
+ )
+ result.name = self.name
+ return result
+ def repr_serialize(self, params):
+ Grammar.Production.Symbol.repr_serialize(self, params)
+ if self.name != '':
+ params.append(
+ 'name = {0:s}'.format(repr(self.name))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar.Production.NamedSymbol({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, name_to_character_sets, group_index):
+ self.terminal_set, self.nonterminal_set = (
+ name_to_character_sets[self.name]
+ )
+ return group_index
+
+ # GENERATE ELEMENT(int lhs_nonterminal, int precedence) BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar_Production',
+ attrib = {},
+ text = '',
+ children = [],
+ lhs_nonterminal = -1,
+ precedence = -1
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.lhs_nonterminal = (
+ element.deserialize_int(lhs_nonterminal)
+ if isinstance(lhs_nonterminal, str) else
+ lhs_nonterminal
+ )
+ self.precedence = (
+ element.deserialize_int(precedence)
+ if isinstance(precedence, str) else
+ precedence
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('lhs_nonterminal', element.serialize_int(self.lhs_nonterminal))
+ self.set('precedence', element.serialize_int(self.precedence))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.lhs_nonterminal = element.deserialize_int(self.get('lhs_nonterminal', '-1'))
+ self.precedence = element.deserialize_int(self.get('precedence', '-1'))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Production if factory is None else factory
+ )
+ result.lhs_nonterminal = self.lhs_nonterminal
+ result.precedence = self.precedence
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.lhs_nonterminal != -1:
+ params.append(
+ 'lhs_nonterminal = {0:s}'.format(repr(self.lhs_nonterminal))
+ )
+ if self.precedence != -1:
+ params.append(
+ 'precedence = {0:s}'.format(repr(self.precedence))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar.Production({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, lhs_nonterminal, name_to_character_sets):
+ self.lhs_nonterminal = lhs_nonterminal
+ group_index = 0
+ for i in self:
+ group_index = i.post_process(name_to_character_sets, group_index)
+ def add_to_lr1(self, _lr1):
+ symbols = []
+ group_bounds = []
+ for i in self:
+ i.add_to_lr1_symbols(symbols, group_bounds)
+ _lr1.productions.append(
+ (
+ # symbols
+ symbols,
+ # lookaheads (list of initial_set, can_be_empty)
+ [([], False) for i in range(len(symbols))] + [([], True)],
+ # group_bounds
+ group_bounds
+ )
+ )
+
+ # GENERATE ELEMENT(list(int) associativities, int n_terminals, int eof_terminal) BEGIN
+ def __init__(
+ self,
+ tag = 'Grammar',
+ attrib = {},
+ text = '',
+ children = [],
+ associativities = [],
+ n_terminals = -1,
+ eof_terminal = -1
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.associativities = (
+ [element.deserialize_int(i) for i in associativities.split()]
+ if isinstance(associativities, str) else
+ associativities
+ )
+ self.n_terminals = (
+ element.deserialize_int(n_terminals)
+ if isinstance(n_terminals, str) else
+ n_terminals
+ )
+ self.eof_terminal = (
+ element.deserialize_int(eof_terminal)
+ if isinstance(eof_terminal, str) else
+ eof_terminal
+ )
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set(
+ 'associativities',
+ ' '.join([element.serialize_int(i) for i in self.associativities])
+ )
+ self.set('n_terminals', element.serialize_int(self.n_terminals))
+ self.set('eof_terminal', element.serialize_int(self.eof_terminal))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.associativities = [
+ element.deserialize_int(i)
+ for i in self.get('associativities', '').split()
+ ]
+ self.n_terminals = element.deserialize_int(self.get('n_terminals', '-1'))
+ self.eof_terminal = element.deserialize_int(self.get('eof_terminal', '-1'))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Grammar if factory is None else factory
+ )
+ result.associativities = self.associativities
+ result.n_terminals = self.n_terminals
+ result.eof_terminal = self.eof_terminal
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if len(self.associativities):
+ params.append(
+ 'associativities = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self.associativities])
+ )
+ )
+ if self.n_terminals != -1:
+ params.append(
+ 'n_terminals = {0:s}'.format(repr(self.n_terminals))
+ )
+ if self.eof_terminal != -1:
+ params.append(
+ 'eof_terminal = {0:s}'.format(repr(self.eof_terminal))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'grammar.Grammar({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, name_to_character_sets):
+ for i in range(len(self)):
+ self[i].post_process(i, name_to_character_sets)
+ def to_lr1(self):
+ _lr1 = lr1.LR1(
+ # productions
+ [],
+ # precedences
+ ([self.n_terminals], [-1], [1 + len(self)], [-1]),
+ # associativities
+ self.associativities,
+ # n_terminals
+ self.n_terminals,
+ # eof_terminal
+ self.eof_terminal)
+
+ # compute productions and (eventually) nonterminals precedence table
+ for i in self:
+ i.add_to_lr1(_lr1)
+
+ # propagate lookaheads
+ modified = True
+ while modified:
+ modified = False
+ for symbols, lookaheads, _ in _lr1.productions:
+ for i in range(len(symbols) - 1, -1, -1):
+ initial_set, nonterminal_set = symbols[i]
+ can_be_empty = False
+ for j in range(0, len(nonterminal_set), 2):
+ for k in range(nonterminal_set[j], nonterminal_set[j + 1]):
+ child_initial_set, child_can_be_empty = _lr1.productions[k][1][0]
+ initial_set = bisect_set.bisect_set_or(
+ initial_set,
+ child_initial_set
+ )
+ can_be_empty = can_be_empty or child_can_be_empty
+ # at this point can_be_empty refers to current symbol only
+ if can_be_empty:
+ next_initial_set, can_be_empty = lookaheads[i + 1]
+ initial_set = bisect_set.bisect_set_or(
+ initial_set,
+ next_initial_set
+ )
+ # at this point can_be_empty refers to all remaining symbols
+ if (initial_set, can_be_empty) != lookaheads[i]:
+ lookaheads[i] = (initial_set, can_be_empty)
+ modified = True
+
+ return _lr1
+
+# GENERATE FACTORY(element.Element) BEGIN
+tag_to_class = {
+ 'Grammar': Grammar,
+ 'Grammar_Production': Grammar.Production,
+ 'Grammar_Production_Item': Grammar.Production.Item,
+ 'Grammar_Production_Group': Grammar.Production.Group,
+ 'Grammar_Production_Group_Attribute': Grammar.Production.Group.Attribute,
+ 'Grammar_Production_Symbol': Grammar.Production.Symbol,
+ 'Grammar_Production_NamedSymbol': Grammar.Production.NamedSymbol
+}
+def factory(tag, attrib = {}, *args, **kwargs):
+ return tag_to_class.get(tag, element.Element)(tag, attrib, *args, **kwargs)
+# GENERATE END
--- /dev/null
+#!/bin/sh
+if ./generate.py grammar <grammar.py >grammar.py.new && ! diff -q grammar.py grammar.py.new
+then
+ mv grammar.py.new grammar.py
+else
+ rm -f grammar.py.new
+fi
--- /dev/null
+#!/usr/bin/env python3
+
+import c_to_python
+import element
+import os
+import sys
+import xml.etree.ElementTree
+
+root = xml.etree.ElementTree.parse(
+ sys.stdin,
+ xml.etree.ElementTree.XMLParser(
+ target = xml.etree.ElementTree.TreeBuilder(element.Element),
+ encoding = 'unicode'
+ )
+).getroot()
+def transform(i):
+ if (
+ i.tag == 'PLex_CodeBlock' or
+ (i.tag == 'PLex_Section2_Rule_Action' and len(i) != 0)
+ ):
+ assert i[0].tag == 'PLex_Text'
+ text = c_to_python.extract(i[0])
+
+ with open('a.c', 'w') as fout:
+ fout.write(text)
+ os.system('gcc -E a.c >a.i')
+
+ lines = []
+ with open('a.i') as fin:
+ line = fin.readline()
+ while len(line):
+ if (
+ line[0] != '#' and
+ not (line == '\n' and (len(lines) == 0 or lines[-1] == '\n'))
+ ):
+ lines.append(line)
+ line = fin.readline()
+ if len(lines) and lines[-1] == '\n':
+ lines.pop()
+ text = ''.join(lines)
+
+ text = c_to_python.c_to_python(text)
+ if text[-1:] != '\n':
+ text = text + '\n' # force at least one line
+
+ i[0] = element.Element(
+ 'PLex_Text',
+ text = text
+ )
+ else:
+ for j in i:
+ transform(j)
+transform(root)
+xml.etree.ElementTree.ElementTree(root).write(
+ sys.stdout,
+ encoding = 'unicode' # strangely does not seem to default to this
+)
--- /dev/null
+
+#line 2 "lex.yy.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 4
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
+#endif /* ! C99 */
+
+#endif /* ! FLEXINT_H */
+
+/* begin standard C++ headers. */
+
+/* TODO: this is always defined, so inline it */
+#define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
+#else
+#define yynoreturn
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an
+ * integer in range [0..255] for use as an array index.
+ */
+#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
+#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern int yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+ #define YY_LINENO_REWIND_TO(ptr)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ int yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = NULL;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart ( FILE *input_file );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
+void yy_delete_buffer ( YY_BUFFER_STATE b );
+void yy_flush_buffer ( YY_BUFFER_STATE b );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state ( void );
+
+static void yyensure_buffer_stack ( void );
+static void yy_load_buffer_state ( void );
+static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
+
+void *yyalloc ( yy_size_t );
+void *yyrealloc ( void *, yy_size_t );
+void yyfree ( void * );
+
+#define yy_new_buffer yy_create_buffer
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+typedef flex_uint8_t YY_CHAR;
+
+FILE *yyin = NULL, *yyout = NULL;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+int yylineno = 1;
+
+extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state ( void );
+static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
+static int yy_get_next_buffer ( void );
+static void yynoreturn yy_fatal_error ( const char* msg );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (int) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+#define YY_NUM_RULES 253
+#define YY_END_OF_BUFFER 254
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static const flex_int16_t yy_accept[1114] =
+ { 0,
+ 0, 0, 0, 0, 0, 0, 246, 246, 40, 40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 21,
+ 239, 239, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 21, 21,
+ 250, 250, 239, 239, 254, 252, 9, 20, 252, 18,
+ 1, 19, 252, 252, 252, 252, 17, 163, 148, 149,
+ 163, 141, 163, 160, 161, 162, 162, 163, 163, 163,
+ 162, 147, 137, 163, 163, 139, 140, 135, 136, 135,
+ 134, 133, 134, 246, 247, 247, 40, 42, 40, 41,
+
+ 40, 40, 41, 41, 41, 50, 49, 51, 252, 169,
+ 169, 164, 169, 165, 166, 168, 170, 218, 219, 218,
+ 216, 215, 217, 171, 173, 171, 172, 171, 185, 185,
+ 185, 185, 187, 189, 187, 187, 187, 187, 188, 228,
+ 233, 228, 232, 231, 234, 229, 229, 229, 234, 234,
+ 226, 227, 252, 130, 252, 21, 23, 21, 22, 22,
+ 22, 235, 241, 235, 236, 242, 242, 242, 224, 224,
+ 225, 224, 224, 224, 224, 224, 224, 224, 129, 53,
+ 52, 129, 129, 129, 129, 54, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+
+ 129, 129, 129, 129, 129, 129, 129, 36, 33, 36,
+ 34, 48, 45, 252, 48, 48, 44, 43, 175, 174,
+ 176, 177, 178, 179, 180, 181, 182, 31, 32, 31,
+ 30, 28, 29, 28, 27, 22, 250, 251, 251, 237,
+ 237, 238, 9, 20, 0, 18, 1, 19, 0, 0,
+ 0, 16, 10, 0, 0, 0, 0, 4, 16, 5,
+ 0, 2, 17, 148, 149, 0, 0, 0, 143, 0,
+ 159, 157, 0, 153, 153, 0, 243, 243, 243, 0,
+ 0, 142, 0, 147, 137, 0, 0, 0, 139, 140,
+ 152, 138, 0, 136, 134, 133, 131, 132, 246, 244,
+
+ 245, 40, 42, 40, 40, 37, 38, 0, 50, 49,
+ 51, 0, 164, 0, 164, 167, 168, 219, 215, 173,
+ 0, 183, 184, 189, 186, 228, 233, 0, 0, 221,
+ 229, 229, 229, 0, 130, 0, 21, 23, 24, 235,
+ 241, 240, 239, 240, 0, 0, 225, 220, 0, 0,
+ 53, 52, 0, 128, 0, 0, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 55, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 0, 35,
+ 34, 48, 45, 46, 47, 31, 32, 29, 26, 25,
+
+ 250, 248, 249, 237, 0, 16, 10, 0, 14, 0,
+ 0, 0, 0, 0, 4, 16, 5, 0, 6, 0,
+ 144, 0, 145, 0, 158, 0, 153, 153, 0, 153,
+ 153, 153, 243, 243, 155, 154, 0, 156, 138, 146,
+ 0, 152, 0, 131, 132, 40, 40, 0, 39, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 230, 229, 229, 0, 0, 220, 0, 0,
+ 0, 0, 129, 129, 129, 129, 129, 129, 65, 129,
+ 129, 129, 70, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 0, 0,
+ 0, 0, 14, 0, 0, 0, 0, 0, 0, 4,
+ 8, 5, 0, 153, 153, 153, 153, 153, 153, 153,
+ 243, 156, 0, 0, 40, 40, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 229, 229,
+ 0, 0, 56, 57, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 71, 72, 129, 129, 129, 129,
+ 77, 78, 129, 129, 129, 129, 129, 129, 129, 83,
+
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 92,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 0,
+ 0, 0, 0, 15, 0, 0, 0, 0, 0, 8,
+ 8, 8, 0, 153, 153, 153, 153, 153, 153, 153,
+ 0, 0, 40, 40, 214, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 229, 229,
+ 0, 0, 58, 129, 60, 129, 62, 129, 129, 129,
+ 129, 68, 129, 129, 129, 73, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 86, 129, 129,
+
+ 129, 129, 90, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 0, 0, 0, 0, 3, 0, 0,
+ 0, 8, 7, 8, 0, 153, 153, 153, 0, 0,
+ 40, 40, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 222, 223, 222, 223,
+ 129, 61, 129, 129, 129, 129, 129, 129, 129, 125,
+ 129, 129, 129, 129, 129, 129, 129, 129, 123, 129,
+ 85, 129, 88, 129, 89, 129, 129, 129, 104, 0,
+ 129, 94, 129, 0, 95, 0, 0, 0, 0, 0,
+
+ 12, 0, 13, 0, 151, 0, 150, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 129, 129, 129, 129, 129, 66, 129, 69, 129,
+ 129, 129, 129, 129, 129, 122, 129, 82, 129, 129,
+ 87, 129, 91, 102, 124, 0, 0, 0, 0, 0,
+ 0, 129, 129, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 150, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 129, 129,
+
+ 129, 129, 129, 67, 129, 129, 129, 129, 79, 129,
+ 129, 129, 129, 129, 129, 0, 0, 113, 0, 0,
+ 0, 0, 0, 0, 93, 129, 0, 0, 114, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 11, 0,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 84, 129, 129, 0,
+ 0, 0, 0, 0, 0, 115, 0, 103, 0, 0,
+ 0, 0, 0, 116, 0, 0, 0, 0, 0, 201,
+
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 0, 129, 129, 129, 129, 129, 121, 129, 129,
+ 75, 129, 129, 129, 129, 129, 0, 0, 109, 0,
+ 119, 117, 110, 0, 0, 0, 120, 118, 0, 0,
+ 0, 0, 0, 0, 213, 129, 129, 129, 129, 129,
+ 125, 74, 129, 81, 129, 126, 129, 105, 107, 0,
+ 106, 108, 0, 0, 0, 0, 0, 0, 0, 129,
+ 63, 129, 129, 129, 129, 76, 129, 111, 112, 97,
+ 0, 0, 0, 0, 98, 129, 129, 129, 129, 129,
+ 127, 96, 0, 100, 0, 129, 129, 129, 66, 129,
+
+ 99, 101, 129, 64, 129, 129, 129, 67, 129, 129,
+ 80, 59, 0
+ } ;
+
+static const YY_CHAR yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 4, 4, 5, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 6, 7, 8, 9, 1, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 19, 19,
+ 19, 19, 19, 19, 20, 21, 22, 23, 1, 24,
+ 25, 26, 27, 1, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 44,
+ 53, 54, 55, 56, 57, 1, 58, 59, 60, 61,
+
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 44, 74, 75, 76, 77, 78, 79, 80,
+ 81, 44, 82, 83, 84, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static const YY_CHAR yy_meta[85] =
+ { 0,
+ 1, 1, 2, 1, 3, 4, 1, 1, 5, 6,
+ 1, 7, 8, 9, 1, 10, 1, 11, 12, 12,
+ 12, 12, 13, 1, 1, 1, 1, 14, 14, 14,
+ 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 16, 17, 18, 1, 19, 14, 14, 14,
+ 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 20, 1, 21
+ } ;
+
+static const flex_int16_t yy_base[1221] =
+ { 0,
+ 0, 84, 167, 250, 171, 184, 135, 142, 220, 231,
+ 196, 200, 334, 0, 3627, 3625, 211, 416, 203, 212,
+ 189, 225, 266, 417, 500, 0, 207, 208, 234, 421,
+ 424, 436, 583, 588, 669, 0, 294, 304, 584, 751,
+ 579, 580, 417, 576, 287, 306, 241, 441, 595, 608,
+ 169, 238, 440, 754, 3680, 4511, 325, 4511, 3676, 0,
+ 446, 4511, 3673, 430, 827, 3661, 0, 4511, 758, 4511,
+ 3650, 4511, 453, 3621, 4511, 4511, 3619, 3584, 129, 746,
+ 445, 766, 4511, 3604, 198, 3582, 4511, 4511, 4511, 3600,
+ 0, 3599, 214, 0, 3506, 3483, 0, 4511, 3532, 4511,
+
+ 420, 119, 3481, 3478, 3446, 0, 3526, 4511, 3520, 4511,
+ 482, 3520, 3518, 4511, 3455, 0, 4511, 4511, 4511, 3504,
+ 4511, 598, 4511, 4511, 4511, 3499, 4511, 754, 4511, 3477,
+ 759, 180, 4511, 4511, 3467, 0, 3442, 762, 4511, 0,
+ 4511, 3459, 4511, 3406, 3434, 0, 562, 167, 3393, 3370,
+ 4511, 4511, 326, 4511, 420, 0, 4511, 3418, 3402, 3366,
+ 3342, 0, 4511, 3368, 4511, 3317, 444, 3314, 4511, 471,
+ 4511, 3354, 3271, 3337, 572, 189, 3295, 3285, 4511, 3332,
+ 4511, 3307, 3303, 585, 594, 4511, 746, 734, 744, 754,
+ 763, 770, 0, 755, 748, 763, 818, 789, 240, 822,
+
+ 762, 381, 802, 791, 813, 824, 577, 4511, 4511, 3302,
+ 871, 0, 4511, 3302, 3250, 3231, 4511, 4511, 4511, 4511,
+ 4511, 4511, 4511, 4511, 4511, 4511, 4511, 0, 4511, 3279,
+ 4511, 4511, 4511, 3276, 3260, 3259, 0, 3221, 3214, 0,
+ 3264, 4511, 835, 4511, 3262, 0, 903, 4511, 3257, 842,
+ 817, 0, 0, 910, 914, 918, 922, 0, 814, 0,
+ 457, 4511, 0, 943, 4511, 3241, 3141, 483, 4511, 3217,
+ 3212, 4511, 826, 556, 903, 930, 4511, 757, 0, 3134,
+ 3131, 4511, 3129, 964, 4511, 3190, 3110, 3174, 3161, 4511,
+ 0, 4511, 896, 4511, 0, 3172, 0, 0, 0, 4511,
+
+ 4511, 0, 4511, 910, 913, 4511, 4511, 602, 0, 3169,
+ 4511, 957, 3164, 3161, 3127, 4511, 0, 4511, 976, 4511,
+ 1020, 4511, 4511, 4511, 4511, 0, 4511, 3116, 0, 4511,
+ 0, 926, 930, 644, 4511, 662, 0, 4511, 4511, 0,
+ 4511, 4511, 3071, 3121, 794, 3037, 4511, 0, 934, 932,
+ 3117, 4511, 3091, 4511, 938, 939, 0, 940, 738, 956,
+ 802, 3059, 876, 978, 933, 933, 939, 948, 964, 1030,
+ 938, 958, 976, 968, 0, 996, 4511, 999, 1057, 1068,
+ 981, 1079, 1077, 1080, 1074, 1068, 1070, 1120, 3062, 4511,
+ 1014, 0, 4511, 4511, 4511, 0, 4511, 4511, 4511, 4511,
+
+ 0, 4511, 4511, 0, 1078, 0, 0, 1153, 4511, 3063,
+ 1166, 1077, 1076, 1091, 0, 1089, 0, 1018, 4511, 1022,
+ 4511, 1025, 4511, 1035, 4511, 1091, 1067, 1138, 1162, 1242,
+ 1177, 1308, 1105, 0, 4511, 4511, 2954, 1198, 4511, 4511,
+ 1144, 0, 1137, 0, 0, 1161, 1156, 1123, 4511, 1202,
+ 1308, 1309, 1310, 1319, 3013, 1312, 1311, 1327, 1320, 1321,
+ 1323, 1382, 4511, 1172, 1166, 2589, 2537, 0, 1178, 1169,
+ 1169, 1298, 1315, 1324, 1330, 1321, 1330, 1323, 0, 1341,
+ 1332, 1348, 0, 1346, 1350, 1348, 1361, 1350, 1367, 2573,
+ 1370, 1366, 1380, 1382, 1382, 1385, 1378, 1387, 1391, 1400,
+
+ 1393, 1403, 1406, 1414, 1400, 1401, 1404, 1429, 1419, 1424,
+ 1428, 1425, 1436, 1435, 1430, 1441, 1442, 1432, 1432, 1450,
+ 1209, 1508, 4511, 1215, 1512, 1219, 1461, 1455, 1451, 0,
+ 1143, 0, 1461, 1534, 1600, 1636, 204, 2525, 1606, 1681,
+ 4511, 4511, 1453, 1463, 1591, 1442, 2524, 1599, 1604, 1600,
+ 1607, 1605, 1611, 1608, 1650, 1620, 1606, 1614, 1613, 1654,
+ 1663, 1652, 1661, 1666, 1682, 1664, 1693, 1694, 1655, 1674,
+ 1662, 1675, 4511, 4511, 1683, 1676, 1677, 1683, 1697, 1692,
+ 1731, 1711, 1702, 1718, 0, 0, 1719, 1706, 1716, 1735,
+ 0, 0, 2553, 1722, 1732, 2540, 1725, 1722, 1733, 0,
+
+ 1727, 1747, 1740, 1739, 1735, 1752, 1739, 1740, 1746, 0,
+ 1750, 1763, 1760, 1750, 1752, 1759, 1777, 1762, 1778, 1769,
+ 1783, 1778, 2514, 4511, 1224, 1230, 1772, 1783, 1780, 0,
+ 1507, 1234, 2364, 732, 2273, 1809, 1845, 1430, 1076, 1585,
+ 1797, 2286, 1785, 1807, 4511, 1811, 1814, 1829, 1835, 1821,
+ 1808, 1822, 1845, 1859, 1860, 1862, 1868, 1869, 1870, 1825,
+ 1888, 1890, 1876, 1891, 1874, 1902, 1894, 1898, 1795, 1891,
+ 1882, 1899, 0, 1887, 0, 1892, 0, 2260, 1900, 1891,
+ 1909, 0, 1904, 2253, 1902, 0, 1916, 1907, 1918, 2227,
+ 1912, 1909, 1924, 2201, 1908, 1918, 1922, 0, 1934, 1925,
+
+ 1931, 1947, 0, 1936, 1942, 1941, 1953, 2103, 1957, 1958,
+ 1952, 2085, 1950, 1951, 1950, 1969, 1956, 2133, 1515, 1961,
+ 1971, 2002, 4511, 2117, 2038, 1981, 1592, 1842, 2025, 1983,
+ 0, 0, 1972, 1990, 1999, 1987, 1994, 2008, 2005, 2007,
+ 2015, 2023, 2016, 2021, 2017, 2024, 2022, 2026, 2030, 2029,
+ 2037, 2035, 2045, 2051, 2054, 2061, 0, 0, 4511, 4511,
+ 1922, 0, 2049, 2039, 2050, 2053, 2051, 2051, 2054, 1831,
+ 2073, 2064, 2077, 2073, 2081, 2082, 2072, 2085, 0, 2091,
+ 0, 2074, 0, 1824, 0, 2091, 2094, 2082, 0, 2116,
+ 2088, 0, 2092, 2133, 0, 1728, 2097, 2095, 1714, 1678,
+
+ 4511, 2135, 4511, 2096, 4511, 1726, 4511, 1703, 1612, 1601,
+ 1514, 1500, 1477, 1377, 1373, 1333, 1274, 1203, 2133, 2128,
+ 2148, 2151, 2144, 2150, 2156, 2158, 2161, 2163, 2184, 2167,
+ 2164, 2157, 2151, 2159, 2158, 2173, 0, 2165, 0, 2166,
+ 2182, 2173, 2179, 2178, 2186, 0, 2185, 0, 2187, 2193,
+ 0, 2202, 0, 0, 0, 2204, 2187, 2201, 2224, 2200,
+ 2222, 2213, 2219, 2230, 2199, 2227, 2239, 2222, 2225, 1162,
+ 1158, 2228, 2278, 4511, 1112, 1109, 1081, 1063, 1057, 984,
+ 976, 969, 923, 913, 910, 931, 895, 891, 887, 881,
+ 874, 856, 848, 843, 840, 804, 788, 2259, 2248, 2258,
+
+ 2265, 2264, 2241, 0, 2254, 2265, 2268, 2279, 0, 2262,
+ 2268, 2271, 2266, 2278, 2283, 2289, 2273, 4511, 2280, 2281,
+ 2281, 2300, 2283, 2281, 0, 2303, 2307, 2292, 4511, 2302,
+ 2304, 2319, 2303, 2307, 2309, 2328, 2309, 2357, 4511, 2362,
+ 4511, 4511, 4511, 4511, 4511, 4511, 4511, 4511, 4511, 4511,
+ 4511, 746, 725, 597, 577, 441, 426, 420, 267, 253,
+ 247, 230, 183, 181, 2317, 2338, 2342, 2330, 2336, 2343,
+ 2339, 2331, 2334, 2350, 2341, 2345, 0, 2350, 2346, 2344,
+ 2349, 2361, 2364, 2367, 2359, 4511, 2357, 0, 2358, 2362,
+ 2379, 2383, 2375, 4511, 2388, 2375, 2382, 2377, 2389, 4511,
+
+ 4511, 4511, 4511, 4511, 4511, 4511, 4511, 4511, 4511, 4511,
+ 4511, 122, 2399, 2398, 2382, 2391, 2391, 0, 2407, 2408,
+ 0, 2397, 2398, 2420, 2417, 2414, 2418, 2426, 4511, 2414,
+ 4511, 4511, 4511, 2422, 2429, 2419, 4511, 4511, 2417, 2437,
+ 2435, 2425, 2428, 2428, 4511, 2431, 2445, 2445, 2447, 2452,
+ 0, 0, 2461, 0, 2444, 0, 2459, 4511, 4511, 2452,
+ 4511, 4511, 2454, 2465, 2452, 2467, 2471, 2470, 2476, 2481,
+ 0, 2468, 2465, 2465, 2485, 0, 2465, 4511, 4511, 4511,
+ 2489, 2491, 2479, 2488, 4511, 2501, 2491, 2498, 2503, 2490,
+ 0, 4511, 2497, 4511, 2510, 2500, 2502, 2500, 0, 2514,
+
+ 4511, 4511, 2516, 0, 2523, 2508, 2509, 0, 2528, 2531,
+ 0, 0, 4511, 2593, 2614, 2635, 2656, 2677, 2698, 2719,
+ 2740, 2761, 2782, 2803, 2824, 2845, 2866, 2887, 2908, 2929,
+ 2950, 2971, 2992, 3013, 3025, 3044, 3055, 3074, 3095, 3108,
+ 3127, 3148, 3169, 3190, 3202, 3221, 3242, 3263, 3280, 3292,
+ 3311, 3332, 3353, 3374, 3395, 3408, 2553, 3423, 3444, 3463,
+ 3484, 3505, 3517, 3536, 3557, 2569, 3057, 3578, 3590, 3609,
+ 3630, 3651, 2558, 3663, 3684, 3705, 3726, 3747, 3768, 3789,
+ 3810, 3831, 3843, 3862, 3879, 3891, 3910, 3931, 3952, 3973,
+ 3994, 4007, 4022, 4043, 4062, 4083, 4104, 4125, 4146, 4167,
+
+ 4179, 4189, 4208, 4229, 4250, 2561, 4262, 4283, 4304, 4325,
+ 4346, 4367, 3028, 4379, 4398, 4419, 4432, 4447, 4468, 4489
+ } ;
+
+static const flex_int16_t yy_def[1221] =
+ { 0,
+ 1113, 1113, 1114, 1114, 1115, 1116, 1117, 1117, 1118, 1118,
+ 1119, 1119, 1113, 13, 1120, 1120, 1121, 1121, 1122, 1122,
+ 1123, 1123, 1124, 1124, 1113, 25, 1125, 1125, 1126, 1126,
+ 1127, 1127, 1128, 1128, 1113, 35, 1129, 1129, 1130, 1130,
+ 1120, 1120, 1120, 1120, 1131, 1131, 1132, 1132, 1126, 1126,
+ 1133, 1133, 1134, 1134, 1113, 1113, 1113, 1113, 1113, 1135,
+ 1113, 1113, 1113, 1113, 1136, 1113, 1137, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1138, 1139,
+ 1140, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1141, 1113, 1141, 1142, 1113, 1113, 1143, 1113, 1143, 1113,
+
+ 1143, 1143, 1113, 1113, 1113, 1144, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1145, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1139, 1113, 1113,
+ 1139, 1146, 1113, 1113, 1113, 1147, 1113, 1139, 1113, 1148,
+ 1113, 1148, 1113, 1149, 1113, 1150, 1150, 1150, 1113, 1113,
+ 1113, 1113, 1151, 1113, 1151, 1152, 1113, 1152, 1113, 1113,
+ 1113, 1153, 1113, 1153, 1113, 1113, 1154, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1155, 1113, 1113, 1113, 1156, 1156, 1156, 1156,
+ 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1157, 1156, 1156,
+
+ 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1113, 1113, 1158,
+ 1113, 1159, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1160, 1113, 1160,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1161, 1113, 1113, 1162,
+ 1162, 1113, 1113, 1113, 1113, 1163, 1113, 1113, 1113, 1113,
+ 1113, 1164, 1165, 1113, 1113, 1113, 1113, 1166, 1164, 1167,
+ 1168, 1113, 1169, 1113, 1113, 1113, 1113, 1170, 1113, 1113,
+ 1113, 1113, 1113, 1171, 1171, 1172, 1113, 1113, 1173, 1113,
+ 1113, 1113, 1174, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1175, 1113, 1113, 1113, 1176, 1113, 1177, 1178, 1179, 1113,
+
+ 1113, 1180, 1113, 1180, 1180, 1113, 1113, 1181, 1182, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1183, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1184, 1113, 1113, 1185, 1113,
+ 1186, 1186, 1186, 1187, 1113, 1187, 1188, 1113, 1113, 1189,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1190, 1113, 1113,
+ 1113, 1113, 1191, 1113, 1113, 1113, 1192, 1192, 1192, 1192,
+ 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
+ 1192, 1192, 1192, 1192, 1192, 1192, 1113, 1192, 1192, 1192,
+ 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1193, 1113,
+ 1113, 1194, 1113, 1113, 1113, 1195, 1113, 1113, 1113, 1113,
+
+ 1196, 1113, 1113, 1197, 1113, 1198, 1199, 1200, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1201, 1198, 1202, 1203, 1113, 1203,
+ 1113, 1204, 1113, 1204, 1113, 1113, 1205, 1205, 1205, 1113,
+ 1205, 1205, 1113, 1206, 1113, 1113, 1207, 1113, 1113, 1113,
+ 1113, 1208, 1113, 1209, 1210, 1211, 1211, 1212, 1113, 1212,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1113, 1214, 1214, 1113, 1215, 1216, 1113, 1113,
+ 1113, 1113, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1113, 1113,
+ 1200, 1200, 1113, 1200, 1200, 1113, 1113, 1113, 1113, 1201,
+ 1218, 1202, 1113, 1113, 1205, 432, 430, 430, 1205, 432,
+ 1113, 1113, 1113, 1113, 1211, 1211, 1113, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1214, 1214,
+ 1113, 1113, 1113, 1113, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1113,
+ 1113, 1113, 1113, 1113, 1200, 1200, 1113, 1113, 1113, 1218,
+ 1218, 1218, 1113, 534, 534, 1205, 432, 1205, 1205, 1205,
+ 1113, 1113, 1211, 1211, 1113, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1214, 1214,
+ 1113, 1113, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1113, 1113, 1113, 1113, 1113, 1219, 1113,
+ 1113, 1218, 1113, 1218, 1113, 1205, 1205, 1205, 1113, 1113,
+ 1211, 1211, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1214, 1214, 1113, 1113,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1113,
+ 1217, 1217, 1217, 1113, 1217, 1113, 1113, 1113, 1113, 1219,
+
+ 1113, 1219, 1113, 1113, 1113, 1113, 1113, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1217, 1217, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1220, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1213, 1213, 1213, 1213, 1213,
+ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1217, 1217,
+
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1217, 1217, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1220, 1113, 1220,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1213, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1217, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1217,
+ 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1113, 1113, 1113, 1113, 1217, 1217, 1217, 1217, 1217,
+
+ 1113, 1113, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+ 1217, 1217, 0, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113
+ } ;
+
+static const flex_int16_t yy_nxt[4596] =
+ { 0,
+ 56, 57, 58, 56, 59, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 56, 56, 56, 56, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 56, 56, 56, 56, 61, 62, 56, 63, 56,
+ 64, 56, 65, 56, 56, 56, 56, 56, 56, 56,
+
+ 56, 66, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 56, 56, 56, 56,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 56, 56, 56, 69, 70,
+ 305, 71, 72, 89, 73, 90, 1045, 74, 75, 76,
+ 76, 275, 276, 76, 77, 92, 89, 95, 90, 96,
+ 78, 56, 93, 76, 95, 323, 96, 107, 108, 305,
+
+ 109, 107, 108, 1012, 109, 125, 291, 126, 127, 154,
+ 154, 155, 155, 119, 125, 120, 126, 127, 333, 79,
+ 80, 238, 98, 239, 99, 121, 638, 56, 100, 122,
+ 122, 122, 122, 98, 323, 99, 157, 1011, 158, 105,
+ 350, 130, 131, 233, 132, 234, 159, 333, 81, 76,
+ 76, 82, 83, 235, 84, 72, 128, 73, 85, 427,
+ 74, 75, 76, 76, 101, 128, 76, 77, 134, 350,
+ 135, 102, 103, 86, 104, 101, 76, 130, 131, 292,
+ 132, 136, 102, 103, 1010, 104, 160, 378, 161, 229,
+ 238, 230, 239, 101, 123, 297, 209, 298, 231, 210,
+
+ 102, 1009, 79, 80, 101, 87, 209, 1008, 229, 210,
+ 230, 102, 211, 211, 211, 211, 378, 231, 137, 138,
+ 139, 1007, 211, 211, 211, 211, 243, 244, 335, 245,
+ 336, 81, 76, 76, 110, 111, 112, 110, 113, 110,
+ 110, 110, 110, 110, 110, 110, 114, 110, 114, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 115,
+ 110, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 116, 110, 110, 110, 110,
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+
+ 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116, 110, 110, 110, 119, 134,
+ 120, 135, 335, 157, 336, 158, 163, 383, 164, 165,
+ 121, 250, 136, 159, 122, 122, 122, 122, 163, 224,
+ 164, 165, 163, 233, 241, 234, 343, 247, 248, 242,
+ 249, 304, 225, 235, 269, 269, 383, 270, 280, 419,
+ 281, 420, 226, 282, 282, 282, 282, 227, 251, 137,
+ 138, 139, 345, 160, 1006, 161, 166, 167, 168, 346,
+ 1005, 304, 225, 312, 313, 423, 314, 424, 166, 167,
+ 168, 226, 166, 167, 168, 1004, 227, 344, 251, 123,
+
+ 140, 140, 141, 140, 142, 143, 140, 140, 140, 144,
+ 140, 140, 140, 140, 140, 140, 140, 145, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 147, 146, 146, 146, 146, 146,
+ 146, 148, 149, 140, 150, 140, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 147, 146, 146, 146, 146, 146, 146,
+ 148, 151, 140, 152, 170, 171, 213, 172, 214, 170,
+ 171, 173, 172, 332, 219, 219, 173, 157, 224, 158,
+
+ 174, 220, 220, 349, 449, 174, 450, 236, 428, 429,
+ 157, 225, 158, 355, 221, 221, 319, 319, 319, 319,
+ 236, 226, 356, 332, 222, 222, 227, 175, 388, 223,
+ 223, 1003, 175, 349, 176, 177, 215, 178, 216, 176,
+ 177, 225, 178, 355, 221, 221, 335, 160, 336, 161,
+ 226, 1002, 356, 222, 222, 227, 175, 388, 223, 223,
+ 160, 175, 161, 176, 335, 217, 336, 218, 176, 179,
+ 180, 181, 179, 182, 183, 179, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 184, 185,
+ 179, 179, 179, 186, 179, 179, 187, 188, 189, 190,
+
+ 191, 192, 193, 194, 195, 193, 193, 196, 197, 198,
+ 199, 200, 193, 201, 202, 203, 204, 205, 206, 193,
+ 207, 179, 179, 179, 179, 179, 187, 188, 189, 190,
+ 191, 192, 193, 194, 195, 193, 193, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205, 206, 193, 207,
+ 179, 179, 179, 213, 726, 214, 163, 362, 241, 264,
+ 265, 360, 266, 242, 278, 278, 267, 284, 285, 361,
+ 286, 363, 278, 278, 287, 433, 433, 278, 278, 1001,
+ 278, 278, 475, 288, 358, 364, 369, 427, 370, 289,
+ 359, 360, 365, 382, 371, 345, 279, 367, 372, 361,
+
+ 1000, 363, 346, 215, 279, 216, 166, 167, 168, 279,
+ 963, 475, 279, 366, 358, 364, 369, 368, 370, 359,
+ 376, 290, 365, 382, 371, 279, 962, 367, 372, 384,
+ 377, 385, 217, 279, 218, 253, 243, 244, 279, 245,
+ 268, 279, 366, 250, 386, 373, 368, 478, 268, 374,
+ 376, 387, 405, 379, 254, 416, 255, 426, 255, 384,
+ 377, 385, 961, 380, 255, 960, 381, 255, 256, 257,
+ 959, 255, 258, 259, 386, 373, 478, 260, 958, 374,
+ 251, 387, 405, 379, 254, 416, 255, 426, 255, 391,
+ 391, 391, 391, 380, 255, 381, 957, 255, 256, 257,
+
+ 255, 258, 259, 956, 247, 248, 260, 249, 261, 955,
+ 251, 408, 409, 954, 410, 408, 409, 953, 410, 408,
+ 409, 480, 410, 408, 409, 430, 410, 443, 411, 411,
+ 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
+ 411, 411, 411, 411, 264, 265, 446, 266, 431, 431,
+ 480, 267, 447, 952, 412, 428, 429, 443, 312, 313,
+ 413, 314, 464, 414, 951, 284, 285, 950, 286, 465,
+ 469, 470, 287, 471, 472, 473, 446, 949, 483, 484,
+ 432, 288, 447, 412, 485, 476, 486, 289, 490, 474,
+ 413, 487, 464, 414, 319, 319, 319, 319, 491, 465,
+
+ 469, 470, 477, 471, 472, 473, 481, 483, 484, 432,
+ 482, 492, 499, 485, 493, 476, 486, 490, 474, 290,
+ 419, 487, 420, 948, 419, 268, 420, 423, 491, 424,
+ 947, 477, 391, 391, 391, 391, 481, 423, 946, 424,
+ 482, 492, 499, 493, 494, 495, 268, 451, 452, 453,
+ 454, 455, 455, 456, 455, 455, 455, 455, 457, 455,
+ 455, 455, 458, 455, 455, 459, 455, 460, 455, 455,
+ 461, 455, 488, 494, 495, 462, 489, 451, 452, 453,
+ 454, 455, 455, 456, 455, 455, 455, 455, 457, 455,
+ 455, 455, 458, 455, 459, 455, 460, 455, 455, 461,
+
+ 455, 496, 488, 497, 503, 489, 500, 504, 505, 506,
+ 501, 945, 508, 498, 509, 502, 507, 944, 520, 428,
+ 429, 527, 528, 277, 277, 449, 529, 450, 428, 429,
+ 496, 531, 533, 497, 503, 943, 500, 504, 505, 506,
+ 501, 508, 498, 509, 631, 502, 507, 510, 520, 511,
+ 527, 528, 512, 513, 522, 523, 529, 524, 514, 515,
+ 534, 531, 533, 942, 516, 517, 941, 526, 409, 518,
+ 410, 525, 525, 525, 525, 543, 519, 510, 544, 511,
+ 535, 535, 512, 513, 411, 411, 411, 411, 514, 515,
+ 428, 429, 545, 516, 517, 539, 539, 546, 518, 542,
+
+ 542, 542, 542, 569, 449, 543, 450, 570, 544, 571,
+ 572, 624, 536, 625, 936, 573, 427, 523, 935, 625,
+ 526, 409, 545, 410, 632, 885, 624, 546, 625, 428,
+ 429, 626, 523, 569, 524, 722, 723, 570, 724, 571,
+ 572, 536, 427, 427, 573, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427, 427, 537,
+ 537, 537, 537, 537, 537, 537, 537, 537, 537, 537,
+ 537, 537, 537, 537, 537, 537, 537, 537, 537, 537,
+ 537, 537, 537, 537, 428, 429, 884, 538, 427, 537,
+
+ 537, 537, 537, 537, 537, 537, 537, 537, 537, 537,
+ 537, 537, 537, 537, 537, 537, 537, 537, 537, 537,
+ 537, 537, 537, 427, 427, 427, 540, 540, 540, 540,
+ 547, 547, 547, 547, 547, 540, 540, 540, 540, 540,
+ 540, 547, 547, 547, 574, 547, 548, 549, 575, 547,
+ 550, 576, 553, 558, 551, 883, 552, 577, 578, 579,
+ 428, 429, 556, 557, 580, 540, 540, 540, 540, 540,
+ 540, 554, 581, 574, 555, 583, 548, 549, 575, 582,
+ 550, 576, 553, 558, 551, 552, 586, 577, 578, 579,
+ 584, 587, 556, 557, 580, 882, 585, 588, 589, 881,
+
+ 554, 591, 581, 555, 1113, 583, 592, 593, 582, 559,
+ 560, 561, 562, 594, 595, 563, 586, 596, 597, 584,
+ 564, 587, 598, 599, 565, 585, 588, 566, 589, 567,
+ 600, 591, 568, 601, 602, 603, 592, 593, 606, 559,
+ 560, 561, 562, 594, 595, 563, 607, 596, 597, 604,
+ 564, 608, 598, 599, 565, 605, 566, 609, 567, 610,
+ 600, 568, 611, 601, 602, 603, 612, 614, 606, 613,
+ 615, 616, 617, 618, 620, 607, 619, 621, 622, 604,
+ 608, 623, 428, 429, 274, 605, 644, 609, 627, 610,
+ 628, 629, 611, 633, 641, 642, 612, 614, 613, 880,
+
+ 615, 616, 617, 618, 620, 619, 621, 622, 631, 522,
+ 523, 623, 524, 626, 523, 644, 524, 801, 627, 802,
+ 628, 629, 879, 633, 641, 642, 525, 525, 525, 525,
+ 525, 525, 525, 525, 427, 427, 878, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 634, 634, 634, 634, 634, 634, 634, 634, 634,
+ 634, 634, 634, 634, 634, 634, 634, 634, 634, 634,
+ 634, 634, 634, 634, 634, 634, 428, 429, 632, 635,
+ 427, 634, 634, 634, 634, 634, 634, 634, 634, 634,
+
+ 634, 634, 634, 634, 634, 634, 634, 634, 634, 634,
+ 634, 634, 634, 634, 634, 427, 427, 427, 636, 636,
+ 643, 547, 547, 877, 639, 639, 547, 547, 547, 547,
+ 547, 648, 651, 547, 876, 547, 547, 428, 429, 646,
+ 650, 647, 547, 653, 428, 429, 649, 655, 656, 657,
+ 643, 658, 428, 429, 637, 637, 637, 637, 428, 429,
+ 652, 648, 651, 637, 637, 637, 637, 637, 637, 646,
+ 650, 647, 547, 653, 547, 649, 547, 655, 656, 657,
+ 801, 658, 802, 547, 669, 547, 547, 661, 547, 652,
+ 654, 671, 659, 637, 637, 637, 637, 637, 637, 640,
+
+ 640, 640, 640, 660, 547, 662, 666, 663, 640, 640,
+ 640, 640, 640, 640, 669, 547, 547, 661, 670, 672,
+ 654, 671, 659, 673, 668, 875, 664, 674, 675, 665,
+ 676, 677, 678, 660, 662, 667, 666, 663, 640, 640,
+ 640, 640, 640, 640, 682, 684, 679, 670, 672, 683,
+ 685, 874, 686, 673, 668, 664, 674, 675, 665, 676,
+ 687, 677, 678, 680, 688, 667, 690, 691, 695, 681,
+ 872, 693, 694, 696, 682, 684, 697, 698, 683, 699,
+ 685, 686, 700, 701, 869, 702, 703, 704, 705, 687,
+ 706, 707, 709, 680, 688, 690, 708, 691, 695, 681,
+
+ 693, 694, 696, 710, 711, 713, 697, 698, 712, 699,
+ 714, 700, 716, 701, 702, 703, 715, 704, 705, 717,
+ 706, 707, 709, 719, 720, 708, 721, 727, 727, 729,
+ 547, 731, 710, 547, 711, 713, 547, 712, 732, 852,
+ 714, 757, 716, 547, 547, 715, 841, 547, 734, 717,
+ 738, 547, 719, 739, 720, 721, 737, 547, 733, 729,
+ 731, 428, 429, 728, 728, 728, 728, 547, 732, 735,
+ 757, 748, 728, 728, 728, 728, 728, 728, 734, 736,
+ 738, 547, 547, 739, 547, 740, 737, 733, 741, 742,
+ 547, 547, 547, 743, 428, 429, 547, 747, 547, 735,
+
+ 748, 744, 728, 728, 728, 728, 728, 728, 736, 745,
+ 547, 746, 547, 547, 753, 740, 547, 750, 741, 742,
+ 547, 749, 758, 743, 547, 751, 752, 747, 759, 754,
+ 760, 744, 761, 756, 762, 764, 755, 832, 766, 745,
+ 767, 746, 768, 771, 753, 765, 770, 750, 772, 773,
+ 775, 749, 758, 776, 751, 777, 752, 759, 779, 754,
+ 760, 761, 780, 756, 762, 764, 755, 766, 781, 782,
+ 767, 783, 768, 771, 765, 770, 784, 785, 772, 773,
+ 775, 786, 776, 787, 789, 777, 788, 779, 791, 792,
+ 793, 780, 795, 796, 547, 797, 798, 781, 799, 782,
+
+ 783, 803, 804, 722, 723, 784, 724, 785, 807, 547,
+ 786, 808, 547, 787, 789, 788, 547, 809, 791, 792,
+ 793, 547, 795, 796, 797, 811, 798, 547, 799, 547,
+ 547, 803, 804, 428, 429, 427, 810, 547, 547, 547,
+ 812, 808, 813, 547, 547, 547, 547, 809, 547, 814,
+ 806, 547, 547, 815, 817, 811, 819, 547, 821, 547,
+ 818, 816, 822, 805, 820, 824, 810, 547, 826, 812,
+ 823, 825, 813, 547, 828, 827, 547, 833, 814, 835,
+ 829, 836, 815, 547, 817, 830, 819, 834, 821, 818,
+ 816, 837, 822, 820, 831, 824, 838, 839, 826, 823,
+
+ 840, 825, 842, 843, 828, 827, 844, 833, 845, 835,
+ 829, 836, 846, 847, 849, 830, 848, 834, 850, 723,
+ 851, 837, 853, 854, 831, 838, 839, 855, 862, 840,
+ 863, 870, 842, 843, 718, 871, 844, 801, 845, 802,
+ 873, 794, 846, 847, 849, 848, 856, 857, 850, 851,
+ 547, 858, 853, 854, 859, 547, 855, 860, 862, 790,
+ 863, 870, 861, 864, 865, 871, 547, 887, 866, 873,
+ 547, 867, 547, 547, 868, 888, 856, 857, 547, 886,
+ 547, 858, 890, 547, 859, 547, 547, 860, 889, 547,
+ 892, 861, 899, 864, 865, 900, 891, 887, 866, 898,
+
+ 901, 867, 893, 902, 868, 888, 547, 894, 886, 895,
+ 904, 897, 890, 903, 906, 896, 778, 905, 889, 907,
+ 892, 908, 899, 909, 900, 891, 910, 911, 912, 898,
+ 901, 893, 902, 913, 914, 916, 894, 917, 895, 904,
+ 897, 918, 774, 903, 906, 896, 905, 923, 907, 928,
+ 915, 908, 909, 924, 925, 919, 910, 911, 912, 920,
+ 926, 927, 921, 913, 914, 916, 917, 929, 769, 933,
+ 934, 918, 922, 937, 930, 763, 923, 931, 928, 915,
+ 939, 547, 940, 924, 925, 919, 969, 932, 965, 920,
+ 926, 927, 921, 966, 967, 968, 970, 929, 933, 934,
+
+ 971, 922, 937, 972, 930, 964, 973, 931, 974, 975,
+ 976, 730, 977, 978, 979, 969, 932, 980, 965, 981,
+ 982, 983, 984, 966, 967, 968, 970, 985, 427, 986,
+ 971, 987, 988, 972, 964, 989, 973, 974, 990, 975,
+ 976, 977, 991, 978, 979, 992, 993, 980, 981, 994,
+ 982, 983, 984, 995, 996, 999, 997, 985, 986, 939,
+ 987, 940, 988, 1013, 939, 989, 940, 990, 1014, 1015,
+ 1016, 1017, 991, 998, 1018, 992, 993, 1019, 994, 1020,
+ 1021, 1022, 995, 996, 999, 1023, 997, 1024, 1025, 725,
+ 1026, 1027, 1013, 1028, 1029, 1030, 1031, 1032, 1014, 1015,
+
+ 1016, 1017, 998, 1033, 1018, 1034, 1035, 1019, 1020, 1021,
+ 1036, 1022, 1037, 1038, 1023, 1039, 1044, 1024, 1025, 1026,
+ 1027, 1040, 1028, 1043, 1029, 1030, 1031, 1032, 1048, 1041,
+ 1046, 1047, 1033, 1042, 1034, 1035, 1049, 1050, 1051, 1052,
+ 1036, 1053, 1037, 1038, 1054, 1039, 1044, 1055, 1056, 1057,
+ 1040, 1058, 1043, 1059, 1060, 1061, 1062, 1048, 1041, 1063,
+ 1046, 1047, 1042, 1064, 1065, 1049, 1050, 1066, 1051, 1052,
+ 1053, 1067, 1068, 1054, 1069, 1070, 1071, 1055, 1056, 1057,
+ 1072, 1058, 1073, 1059, 1060, 1061, 1062, 1074, 1075, 1063,
+ 1076, 1077, 1064, 1078, 1065, 1079, 1080, 1066, 1081, 1082,
+
+ 1067, 1068, 1083, 1069, 1070, 1084, 1071, 1085, 1086, 1087,
+ 1072, 1088, 1073, 1089, 1090, 718, 1091, 1074, 1075, 1076,
+ 1092, 1077, 1093, 1078, 1094, 1079, 1080, 1081, 1095, 1082,
+ 1096, 1097, 1083, 1098, 1099, 1084, 1100, 1085, 1086, 1087,
+ 1088, 1101, 1089, 1102, 1090, 1091, 1103, 1104, 1105, 1106,
+ 1092, 1107, 1093, 1094, 1108, 692, 1109, 1110, 1095, 1111,
+ 1096, 1097, 1112, 1098, 1099, 1100, 375, 375, 689, 434,
+ 1101, 434, 541, 1102, 541, 1103, 1104, 1105, 645, 1106,
+ 427, 1107, 415, 415, 1108, 1109, 1110, 415, 590, 1111,
+ 344, 343, 1112, 68, 68, 68, 68, 68, 68, 68,
+
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 94, 94, 94, 94, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 106, 106,
+
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 124, 124, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+
+ 129, 129, 129, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
+ 153, 153, 153, 153, 153, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 156, 156, 156, 156, 156, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 169, 169, 169,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
+
+ 169, 169, 169, 169, 169, 169, 169, 169, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ 232, 232, 237, 237, 237, 237, 237, 237, 237, 237,
+
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 246, 547, 246, 438, 246, 246,
+ 455, 455, 455, 246, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ 252, 252, 252, 252, 263, 409, 263, 390, 263, 263,
+ 417, 417, 479, 263, 274, 417, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 277, 354, 277, 277, 277,
+
+ 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 283, 283, 351, 283,
+ 348, 283, 283, 467, 466, 463, 283, 295, 315, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 299, 299,
+ 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 299, 299, 299, 313, 299, 315, 299, 299, 299, 302,
+ 310, 302, 302, 296, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 441, 302, 440, 302, 302, 302,
+ 309, 439, 285, 309, 309, 309, 309, 309, 309, 309,
+
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
+ 309, 317, 438, 317, 436, 317, 317, 435, 425, 269,
+ 317, 322, 421, 322, 322, 322, 322, 322, 322, 322,
+ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322,
+ 322, 322, 325, 265, 325, 325, 325, 325, 325, 325,
+ 325, 325, 325, 325, 325, 325, 325, 325, 325, 248,
+ 325, 325, 325, 326, 244, 326, 341, 326, 403, 326,
+ 326, 326, 326, 402, 326, 326, 400, 399, 398, 326,
+ 328, 397, 328, 328, 328, 395, 328, 328, 328, 328,
+ 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
+
+ 328, 331, 394, 331, 393, 331, 331, 390, 354, 352,
+ 331, 334, 334, 334, 334, 334, 334, 334, 334, 334,
+ 334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
+ 334, 334, 337, 351, 337, 337, 337, 337, 337, 307,
+ 337, 337, 337, 337, 337, 337, 337, 306, 337, 330,
+ 337, 337, 337, 340, 348, 340, 347, 340, 340, 340,
+ 340, 340, 340, 340, 340, 340, 340, 340, 307, 306,
+ 341, 340, 340, 340, 342, 342, 342, 342, 342, 342,
+ 342, 342, 342, 342, 342, 342, 342, 342, 342, 342,
+ 342, 342, 342, 342, 342, 353, 307, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 357, 357, 306, 339,
+ 338, 357, 357, 389, 307, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 392, 306, 330, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 329,
+ 392, 327, 392, 396, 321, 396, 396, 396, 396, 324,
+ 396, 396, 396, 396, 396, 396, 396, 396, 396, 396,
+ 396, 396, 396, 396, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401, 401, 321,
+
+ 401, 320, 401, 401, 401, 404, 318, 404, 404, 404,
+ 316, 404, 404, 404, 404, 404, 404, 404, 404, 404,
+ 313, 315, 311, 404, 404, 404, 246, 310, 246, 308,
+ 246, 246, 307, 306, 303, 246, 406, 301, 406, 406,
+ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
+ 406, 406, 406, 406, 406, 406, 406, 407, 300, 407,
+ 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
+ 407, 407, 407, 407, 407, 407, 407, 407, 418, 418,
+ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
+ 418, 418, 418, 418, 418, 418, 418, 418, 418, 263,
+
+ 296, 263, 294, 263, 263, 293, 285, 273, 263, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
+ 427, 272, 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 271, 427, 427,
+ 427, 274, 265, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 437, 262, 437, 248, 437, 437, 244, 1113,
+ 117, 437, 117, 437, 442, 1113, 442, 442, 442, 442,
+ 442, 442, 442, 442, 442, 442, 442, 442, 442, 442,
+
+ 442, 442, 442, 442, 442, 295, 1113, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 444, 1113, 444, 444,
+ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
+ 444, 444, 444, 444, 444, 444, 444, 445, 1113, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 299, 299,
+ 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
+ 299, 299, 299, 1113, 299, 1113, 299, 299, 299, 302,
+ 1113, 302, 302, 1113, 302, 302, 302, 302, 302, 302,
+
+ 302, 302, 302, 302, 1113, 302, 1113, 302, 302, 302,
+ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
+ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
+ 448, 309, 1113, 1113, 309, 309, 309, 309, 309, 309,
+ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
+ 309, 309, 317, 1113, 317, 1113, 317, 317, 1113, 1113,
+ 1113, 317, 326, 1113, 326, 1113, 326, 1113, 326, 326,
+ 326, 326, 1113, 326, 326, 1113, 1113, 1113, 326, 328,
+ 1113, 328, 328, 328, 328, 328, 328, 328, 328, 328,
+ 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
+
+ 331, 1113, 331, 1113, 331, 331, 1113, 1113, 1113, 331,
+ 334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
+ 334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
+ 334, 337, 1113, 337, 337, 337, 337, 337, 1113, 337,
+ 337, 337, 337, 337, 337, 337, 1113, 337, 1113, 337,
+ 337, 337, 340, 1113, 340, 1113, 340, 340, 340, 340,
+ 340, 340, 340, 340, 340, 340, 340, 1113, 1113, 1113,
+ 340, 340, 340, 468, 1113, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 353, 1113, 353, 353, 353, 353,
+
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 357, 357, 1113, 1113, 1113,
+ 357, 357, 389, 1113, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 392, 1113, 1113, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 1113, 392,
+ 1113, 392, 396, 1113, 396, 396, 396, 396, 1113, 396,
+ 396, 396, 396, 396, 396, 396, 396, 396, 396, 396,
+ 396, 396, 396, 401, 401, 401, 401, 401, 401, 401,
+ 401, 401, 401, 401, 401, 401, 401, 401, 1113, 401,
+
+ 1113, 401, 401, 401, 404, 1113, 404, 404, 404, 1113,
+ 404, 404, 404, 404, 404, 404, 404, 404, 404, 1113,
+ 1113, 1113, 404, 404, 404, 406, 1113, 406, 406, 406,
+ 406, 406, 406, 406, 406, 406, 406, 406, 406, 406,
+ 406, 406, 406, 406, 406, 406, 407, 1113, 407, 407,
+ 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
+ 407, 407, 407, 407, 407, 407, 407, 521, 521, 521,
+ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,
+ 521, 521, 521, 521, 521, 521, 521, 521, 530, 1113,
+ 530, 1113, 530, 530, 1113, 1113, 1113, 530, 532, 1113,
+
+ 532, 1113, 532, 532, 1113, 1113, 1113, 532, 418, 418,
+ 418, 418, 418, 418, 418, 418, 418, 418, 418, 418,
+ 418, 418, 418, 418, 418, 418, 418, 418, 418, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422, 422, 422,
+ 427, 1113, 427, 427, 427, 427, 427, 427, 427, 427,
+ 427, 427, 427, 427, 427, 427, 427, 1113, 427, 427,
+ 427, 437, 1113, 437, 1113, 437, 437, 1113, 1113, 1113,
+ 437, 1113, 437, 442, 1113, 442, 442, 442, 442, 442,
+ 442, 442, 442, 442, 442, 442, 442, 442, 442, 442,
+
+ 442, 442, 442, 442, 444, 1113, 444, 444, 444, 444,
+ 444, 444, 444, 444, 444, 444, 444, 444, 444, 444,
+ 444, 444, 444, 444, 444, 445, 1113, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
+ 445, 445, 445, 445, 445, 445, 302, 1113, 302, 302,
+ 1113, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 1113, 302, 1113, 302, 302, 302, 448, 448, 448,
+ 448, 448, 448, 448, 448, 448, 448, 448, 448, 448,
+ 448, 448, 448, 448, 448, 448, 448, 448, 331, 1113,
+ 331, 1113, 331, 331, 1113, 1113, 1113, 331, 342, 1113,
+
+ 342, 342, 342, 342, 342, 342, 342, 342, 342, 342,
+ 342, 342, 342, 342, 342, 342, 342, 342, 342, 468,
+ 1113, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 357, 357, 1113, 1113, 1113, 357, 357, 630, 1113, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630, 800, 800,
+ 800, 800, 800, 800, 800, 800, 800, 800, 800, 800,
+ 800, 800, 800, 800, 800, 800, 800, 800, 800, 938,
+ 938, 938, 938, 938, 938, 938, 938, 938, 938, 938,
+
+ 938, 938, 938, 938, 938, 938, 938, 938, 938, 938,
+ 55, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113
+
+ } ;
+
+static const flex_int16_t yy_chk[4596] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
+ 102, 3, 3, 5, 3, 5, 1012, 3, 3, 3,
+ 3, 79, 79, 3, 3, 6, 6, 7, 6, 7,
+ 3, 21, 6, 3, 8, 132, 8, 11, 11, 102,
+
+ 11, 12, 12, 964, 12, 19, 85, 19, 19, 27,
+ 28, 27, 28, 17, 20, 17, 20, 20, 148, 3,
+ 3, 51, 9, 51, 9, 17, 537, 22, 9, 17,
+ 17, 17, 17, 10, 132, 10, 29, 963, 29, 10,
+ 176, 21, 21, 47, 21, 47, 29, 148, 3, 3,
+ 3, 4, 4, 47, 4, 4, 19, 4, 4, 537,
+ 4, 4, 4, 4, 9, 20, 4, 4, 23, 176,
+ 23, 9, 9, 4, 9, 10, 4, 22, 22, 85,
+ 22, 23, 10, 10, 962, 10, 29, 199, 29, 45,
+ 52, 45, 52, 9, 17, 93, 37, 93, 45, 37,
+
+ 9, 961, 4, 4, 10, 4, 38, 960, 46, 38,
+ 46, 10, 37, 37, 37, 37, 199, 46, 23, 23,
+ 23, 959, 38, 38, 38, 38, 57, 57, 153, 57,
+ 153, 4, 4, 4, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 18, 24,
+ 18, 24, 155, 30, 155, 30, 31, 202, 31, 31,
+ 18, 64, 24, 30, 18, 18, 18, 18, 32, 43,
+ 32, 32, 53, 48, 53, 48, 167, 61, 61, 53,
+ 61, 101, 43, 48, 73, 73, 202, 73, 81, 261,
+ 81, 261, 43, 81, 81, 81, 81, 43, 64, 24,
+ 24, 24, 170, 30, 958, 30, 31, 31, 31, 170,
+ 957, 101, 43, 111, 111, 268, 111, 268, 32, 32,
+ 32, 43, 53, 53, 53, 956, 43, 167, 64, 18,
+
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 33, 33, 39, 33, 39, 34,
+ 34, 33, 34, 147, 41, 42, 34, 49, 44, 49,
+
+ 33, 41, 42, 175, 308, 34, 308, 49, 274, 274,
+ 50, 44, 50, 184, 41, 42, 122, 122, 122, 122,
+ 50, 44, 185, 147, 41, 42, 44, 33, 207, 41,
+ 42, 955, 34, 175, 33, 33, 39, 33, 39, 34,
+ 34, 44, 34, 184, 41, 42, 334, 49, 334, 49,
+ 44, 954, 185, 41, 42, 44, 33, 207, 41, 42,
+ 50, 34, 50, 33, 336, 39, 336, 39, 34, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 40, 634, 40, 54, 189, 54, 69,
+ 69, 188, 69, 54, 80, 80, 69, 82, 82, 188,
+ 82, 189, 128, 128, 82, 278, 278, 131, 131, 953,
+ 138, 138, 359, 82, 187, 190, 194, 634, 195, 82,
+ 187, 188, 191, 201, 196, 345, 80, 192, 196, 188,
+
+ 952, 189, 345, 40, 128, 40, 54, 54, 54, 131,
+ 897, 359, 138, 191, 187, 190, 194, 192, 195, 187,
+ 198, 82, 191, 201, 196, 80, 896, 192, 196, 203,
+ 198, 204, 40, 128, 40, 65, 243, 243, 131, 243,
+ 69, 138, 191, 250, 205, 197, 192, 361, 82, 197,
+ 198, 206, 251, 200, 65, 259, 65, 273, 65, 203,
+ 198, 204, 895, 200, 65, 894, 200, 65, 65, 65,
+ 893, 65, 65, 65, 205, 197, 361, 65, 892, 197,
+ 250, 206, 251, 200, 65, 259, 65, 273, 65, 211,
+ 211, 211, 211, 200, 65, 200, 891, 65, 65, 65,
+
+ 65, 65, 65, 890, 247, 247, 65, 247, 65, 889,
+ 250, 254, 254, 888, 254, 255, 255, 887, 255, 256,
+ 256, 363, 256, 257, 257, 275, 257, 293, 254, 254,
+ 254, 254, 255, 255, 255, 255, 256, 256, 256, 256,
+ 257, 257, 257, 257, 264, 264, 304, 264, 276, 276,
+ 363, 264, 305, 886, 254, 275, 275, 293, 312, 312,
+ 256, 312, 332, 257, 885, 284, 284, 884, 284, 333,
+ 349, 350, 284, 355, 356, 358, 304, 883, 365, 366,
+ 276, 284, 305, 254, 367, 360, 368, 284, 371, 358,
+ 256, 369, 332, 257, 319, 319, 319, 319, 372, 333,
+
+ 349, 350, 360, 355, 356, 358, 364, 365, 366, 276,
+ 364, 373, 381, 367, 374, 360, 368, 371, 358, 284,
+ 418, 369, 418, 882, 420, 264, 420, 422, 372, 422,
+ 881, 360, 391, 391, 391, 391, 364, 424, 880, 424,
+ 364, 373, 381, 374, 376, 378, 284, 321, 321, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
+ 321, 321, 370, 376, 378, 321, 370, 321, 321, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
+ 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
+
+ 321, 379, 370, 380, 383, 370, 382, 383, 384, 385,
+ 382, 879, 386, 380, 387, 382, 385, 878, 405, 427,
+ 427, 412, 413, 433, 433, 448, 414, 448, 639, 639,
+ 379, 416, 426, 380, 383, 877, 382, 383, 384, 385,
+ 382, 386, 380, 387, 531, 382, 385, 388, 405, 388,
+ 412, 413, 388, 388, 408, 408, 414, 408, 388, 388,
+ 428, 416, 426, 876, 388, 388, 875, 411, 411, 388,
+ 411, 408, 408, 408, 408, 441, 388, 388, 443, 388,
+ 429, 429, 388, 388, 411, 411, 411, 411, 388, 388,
+ 428, 428, 446, 388, 388, 431, 431, 447, 388, 438,
+
+ 438, 438, 438, 464, 450, 441, 450, 465, 443, 469,
+ 470, 521, 429, 521, 871, 471, 429, 524, 870, 524,
+ 526, 526, 446, 526, 531, 818, 625, 447, 625, 431,
+ 431, 626, 626, 464, 626, 632, 632, 465, 632, 469,
+ 470, 429, 430, 430, 471, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 817, 430, 430, 430,
+
+ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 430, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 432, 432, 432, 432,
+ 451, 452, 453, 457, 456, 432, 432, 432, 432, 432,
+ 432, 454, 459, 460, 472, 461, 451, 452, 473, 458,
+ 453, 474, 457, 461, 454, 816, 456, 475, 476, 477,
+ 432, 432, 459, 460, 478, 432, 432, 432, 432, 432,
+ 432, 458, 480, 472, 458, 482, 451, 452, 473, 481,
+ 453, 474, 457, 461, 454, 456, 486, 475, 476, 477,
+ 484, 487, 459, 460, 478, 815, 485, 488, 489, 814,
+
+ 458, 491, 480, 458, 462, 482, 492, 493, 481, 462,
+ 462, 462, 462, 494, 495, 462, 486, 496, 497, 484,
+ 462, 487, 498, 499, 462, 485, 488, 462, 489, 462,
+ 500, 491, 462, 501, 502, 503, 492, 493, 505, 462,
+ 462, 462, 462, 494, 495, 462, 506, 496, 497, 504,
+ 462, 507, 498, 499, 462, 504, 462, 508, 462, 509,
+ 500, 462, 510, 501, 502, 503, 511, 513, 505, 512,
+ 514, 515, 516, 517, 519, 506, 518, 519, 519, 504,
+ 507, 520, 638, 638, 638, 504, 546, 508, 527, 509,
+ 528, 529, 510, 533, 543, 544, 511, 513, 512, 813,
+
+ 514, 515, 516, 517, 519, 518, 519, 519, 631, 522,
+ 522, 520, 522, 525, 525, 546, 525, 719, 527, 719,
+ 528, 529, 812, 533, 543, 544, 522, 522, 522, 522,
+ 525, 525, 525, 525, 534, 534, 811, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 631, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 535, 535,
+ 545, 548, 550, 810, 539, 539, 549, 552, 557, 551,
+ 554, 549, 552, 553, 809, 559, 558, 640, 640, 548,
+ 551, 548, 556, 554, 727, 727, 550, 556, 557, 558,
+ 545, 559, 535, 535, 536, 536, 536, 536, 539, 539,
+ 553, 549, 552, 536, 536, 536, 536, 536, 536, 548,
+ 551, 548, 555, 554, 562, 550, 560, 556, 557, 558,
+ 800, 559, 800, 563, 569, 561, 566, 562, 564, 553,
+ 555, 571, 560, 536, 536, 536, 536, 536, 536, 540,
+
+ 540, 540, 540, 561, 565, 563, 566, 564, 540, 540,
+ 540, 540, 540, 540, 569, 567, 568, 562, 570, 572,
+ 555, 571, 560, 575, 568, 808, 565, 576, 577, 565,
+ 578, 579, 580, 561, 563, 567, 566, 564, 540, 540,
+ 540, 540, 540, 540, 582, 584, 581, 570, 572, 583,
+ 587, 806, 588, 575, 568, 565, 576, 577, 565, 578,
+ 589, 579, 580, 581, 590, 567, 594, 595, 599, 581,
+ 799, 597, 598, 601, 582, 584, 602, 603, 583, 604,
+ 587, 588, 605, 606, 796, 607, 608, 609, 611, 589,
+ 612, 613, 615, 581, 590, 594, 614, 595, 599, 581,
+
+ 597, 598, 601, 616, 617, 619, 602, 603, 618, 604,
+ 620, 605, 621, 606, 607, 608, 620, 609, 611, 622,
+ 612, 613, 615, 627, 628, 614, 629, 636, 636, 641,
+ 651, 643, 616, 646, 617, 619, 647, 618, 644, 784,
+ 620, 669, 621, 650, 652, 620, 770, 660, 647, 622,
+ 651, 648, 627, 652, 628, 629, 650, 649, 646, 641,
+ 643, 636, 636, 637, 637, 637, 637, 653, 644, 648,
+ 669, 660, 637, 637, 637, 637, 637, 637, 647, 649,
+ 651, 654, 655, 652, 656, 653, 650, 646, 654, 655,
+ 657, 658, 659, 656, 728, 728, 665, 659, 663, 648,
+
+ 660, 657, 637, 637, 637, 637, 637, 637, 649, 658,
+ 661, 658, 662, 664, 665, 653, 667, 662, 654, 655,
+ 668, 661, 670, 656, 666, 663, 664, 659, 671, 666,
+ 672, 657, 674, 668, 676, 679, 667, 761, 680, 658,
+ 681, 658, 683, 687, 665, 679, 685, 662, 688, 689,
+ 691, 661, 670, 692, 663, 693, 664, 671, 695, 666,
+ 672, 674, 696, 668, 676, 679, 667, 680, 697, 699,
+ 681, 700, 683, 687, 679, 685, 701, 702, 688, 689,
+ 691, 704, 692, 705, 707, 693, 706, 695, 709, 710,
+ 711, 696, 713, 714, 733, 715, 716, 697, 717, 699,
+
+ 700, 720, 721, 722, 722, 701, 722, 702, 730, 736,
+ 704, 733, 734, 705, 707, 706, 737, 734, 709, 710,
+ 711, 735, 713, 714, 715, 736, 716, 739, 717, 740,
+ 738, 720, 721, 726, 726, 726, 735, 741, 743, 745,
+ 737, 733, 738, 744, 747, 742, 746, 734, 748, 739,
+ 729, 750, 749, 740, 742, 736, 744, 752, 746, 751,
+ 743, 741, 747, 725, 745, 749, 735, 753, 751, 737,
+ 748, 750, 738, 754, 753, 752, 755, 763, 739, 764,
+ 754, 765, 740, 756, 742, 755, 744, 763, 746, 743,
+ 741, 766, 747, 745, 756, 749, 767, 768, 751, 748,
+
+ 769, 750, 771, 772, 753, 752, 773, 763, 774, 764,
+ 754, 765, 775, 776, 778, 755, 777, 763, 780, 724,
+ 782, 766, 786, 787, 756, 767, 768, 788, 791, 769,
+ 793, 797, 771, 772, 718, 798, 773, 802, 774, 802,
+ 804, 712, 775, 776, 778, 777, 790, 790, 780, 782,
+ 820, 790, 786, 787, 790, 819, 788, 790, 791, 708,
+ 793, 797, 790, 794, 794, 798, 823, 820, 794, 804,
+ 821, 794, 824, 822, 794, 821, 790, 790, 825, 819,
+ 826, 790, 823, 827, 790, 828, 831, 790, 822, 830,
+ 825, 790, 832, 794, 794, 833, 824, 820, 794, 831,
+
+ 834, 794, 826, 835, 794, 821, 829, 827, 819, 828,
+ 838, 830, 823, 836, 841, 829, 694, 840, 822, 842,
+ 825, 843, 832, 844, 833, 824, 845, 847, 849, 831,
+ 834, 826, 835, 850, 852, 856, 827, 857, 828, 838,
+ 830, 858, 690, 836, 841, 829, 840, 860, 842, 865,
+ 852, 843, 844, 861, 862, 859, 845, 847, 849, 859,
+ 863, 864, 859, 850, 852, 856, 857, 866, 684, 868,
+ 869, 858, 859, 872, 867, 678, 860, 867, 865, 852,
+ 873, 898, 873, 861, 862, 859, 903, 867, 899, 859,
+ 863, 864, 859, 900, 901, 902, 905, 866, 868, 869,
+
+ 906, 859, 872, 907, 867, 898, 908, 867, 910, 911,
+ 912, 642, 913, 914, 915, 903, 867, 916, 899, 917,
+ 919, 920, 921, 900, 901, 902, 905, 922, 635, 923,
+ 906, 924, 926, 907, 898, 927, 908, 910, 928, 911,
+ 912, 913, 930, 914, 915, 931, 932, 916, 917, 933,
+ 919, 920, 921, 934, 935, 937, 936, 922, 923, 938,
+ 924, 938, 926, 965, 940, 927, 940, 928, 966, 967,
+ 968, 969, 930, 936, 970, 931, 932, 971, 933, 972,
+ 973, 974, 934, 935, 937, 975, 936, 976, 978, 633,
+ 979, 980, 965, 981, 982, 983, 984, 985, 966, 967,
+
+ 968, 969, 936, 987, 970, 989, 990, 971, 972, 973,
+ 991, 974, 992, 993, 975, 995, 999, 976, 978, 979,
+ 980, 996, 981, 998, 982, 983, 984, 985, 1015, 997,
+ 1013, 1014, 987, 997, 989, 990, 1016, 1017, 1019, 1020,
+ 991, 1022, 992, 993, 1023, 995, 999, 1024, 1025, 1026,
+ 996, 1027, 998, 1028, 1030, 1034, 1035, 1015, 997, 1036,
+ 1013, 1014, 997, 1039, 1040, 1016, 1017, 1041, 1019, 1020,
+ 1022, 1042, 1043, 1023, 1044, 1046, 1047, 1024, 1025, 1026,
+ 1048, 1027, 1049, 1028, 1030, 1034, 1035, 1050, 1053, 1036,
+ 1055, 1057, 1039, 1060, 1040, 1063, 1064, 1041, 1065, 1066,
+
+ 1042, 1043, 1067, 1044, 1046, 1068, 1047, 1069, 1070, 1072,
+ 1048, 1073, 1049, 1074, 1075, 623, 1077, 1050, 1053, 1055,
+ 1081, 1057, 1082, 1060, 1083, 1063, 1064, 1065, 1084, 1066,
+ 1086, 1087, 1067, 1088, 1089, 1068, 1090, 1069, 1070, 1072,
+ 1073, 1093, 1074, 1095, 1075, 1077, 1096, 1097, 1098, 1100,
+ 1081, 1103, 1082, 1083, 1105, 596, 1106, 1107, 1084, 1109,
+ 1086, 1087, 1110, 1088, 1089, 1090, 1157, 1157, 593, 1173,
+ 1093, 1173, 1206, 1095, 1206, 1096, 1097, 1098, 547, 1100,
+ 538, 1103, 1166, 1166, 1105, 1106, 1107, 1166, 490, 1109,
+ 467, 466, 1110, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+
+ 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
+ 1114, 1114, 1114, 1114, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1116, 1116, 1116, 1116, 1116,
+ 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+ 1116, 1116, 1116, 1116, 1116, 1116, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1118, 1118, 1118,
+ 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
+ 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1119, 1119,
+
+ 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
+ 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
+ 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
+ 1121, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+ 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+ 1122, 1122, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+ 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+
+ 1123, 1123, 1123, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+ 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124,
+ 1124, 1124, 1124, 1124, 1125, 1125, 1125, 1125, 1125, 1125,
+ 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
+ 1125, 1125, 1125, 1125, 1125, 1126, 1126, 1126, 1126, 1126,
+ 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
+ 1126, 1126, 1126, 1126, 1126, 1126, 1127, 1127, 1127, 1127,
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+ 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1128, 1128, 1128,
+ 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
+
+ 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1129, 1129,
+ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1130,
+ 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+ 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
+ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
+ 1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
+
+ 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
+ 1133, 1133, 1133, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134,
+ 1134, 1134, 1134, 1134, 1135, 455, 1135, 437, 1135, 1135,
+ 1213, 1213, 1213, 1135, 1136, 1136, 1136, 1136, 1136, 1136,
+ 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+ 1136, 1136, 1136, 1136, 1137, 410, 1137, 389, 1137, 1137,
+ 1167, 1167, 362, 1137, 1138, 1167, 1138, 1138, 1138, 1138,
+ 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+ 1138, 1138, 1138, 1138, 1138, 1139, 353, 1139, 1139, 1139,
+
+ 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
+ 1139, 1139, 1139, 1139, 1139, 1139, 1140, 1140, 351, 1140,
+ 346, 1140, 1140, 344, 343, 328, 1140, 1141, 315, 1141,
+ 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
+ 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1142, 1142,
+ 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+ 1142, 1142, 1142, 314, 1142, 313, 1142, 1142, 1142, 1143,
+ 310, 1143, 1143, 296, 1143, 1143, 1143, 1143, 1143, 1143,
+ 1143, 1143, 1143, 1143, 289, 1143, 288, 1143, 1143, 1143,
+ 1144, 287, 286, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+
+ 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
+ 1144, 1145, 283, 1145, 281, 1145, 1145, 280, 271, 270,
+ 1145, 1146, 267, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+ 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
+ 1146, 1146, 1147, 266, 1147, 1147, 1147, 1147, 1147, 1147,
+ 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 249,
+ 1147, 1147, 1147, 1148, 245, 1148, 241, 1148, 239, 1148,
+ 1148, 1148, 1148, 238, 1148, 1148, 236, 235, 234, 1148,
+ 1149, 230, 1149, 1149, 1149, 216, 1149, 1149, 1149, 1149,
+ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+
+ 1149, 1150, 215, 1150, 214, 1150, 1150, 210, 183, 182,
+ 1150, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+ 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+ 1151, 1151, 1152, 180, 1152, 1152, 1152, 1152, 1152, 178,
+ 1152, 1152, 1152, 1152, 1152, 1152, 1152, 177, 1152, 174,
+ 1152, 1152, 1152, 1153, 173, 1153, 172, 1153, 1153, 1153,
+ 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 168, 166,
+ 164, 1153, 1153, 1153, 1154, 1154, 1154, 1154, 1154, 1154,
+ 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+ 1154, 1154, 1154, 1154, 1154, 1155, 161, 1155, 1155, 1155,
+
+ 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
+ 1155, 1155, 1155, 1155, 1155, 1155, 1156, 1156, 160, 159,
+ 158, 1156, 1156, 1158, 150, 1158, 1158, 1158, 1158, 1158,
+ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+ 1158, 1158, 1158, 1158, 1159, 149, 145, 1159, 1159, 1159,
+ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 144,
+ 1159, 142, 1159, 1160, 137, 1160, 1160, 1160, 1160, 135,
+ 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160,
+ 1160, 1160, 1160, 1160, 1161, 1161, 1161, 1161, 1161, 1161,
+ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 130,
+
+ 1161, 126, 1161, 1161, 1161, 1162, 120, 1162, 1162, 1162,
+ 115, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+ 113, 112, 109, 1162, 1162, 1162, 1163, 107, 1163, 105,
+ 1163, 1163, 104, 103, 99, 1163, 1164, 96, 1164, 1164,
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1165, 95, 1165,
+ 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+ 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1168, 1168,
+ 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
+ 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1169,
+
+ 92, 1169, 90, 1169, 1169, 86, 84, 78, 1169, 1170,
+ 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
+ 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
+ 1171, 77, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+ 1171, 1171, 1171, 1171, 1171, 1171, 1171, 74, 1171, 1171,
+ 1171, 1172, 71, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+ 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
+ 1172, 1172, 1174, 66, 1174, 63, 1174, 1174, 59, 55,
+ 16, 1174, 15, 1174, 1175, 0, 1175, 1175, 1175, 1175,
+ 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
+
+ 1175, 1175, 1175, 1175, 1175, 1176, 0, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
+ 1176, 1176, 1176, 1176, 1176, 1176, 1177, 0, 1177, 1177,
+ 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+ 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178, 0, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179, 1179,
+ 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
+ 1179, 1179, 1179, 0, 1179, 0, 1179, 1179, 1179, 1180,
+ 0, 1180, 1180, 0, 1180, 1180, 1180, 1180, 1180, 1180,
+
+ 1180, 1180, 1180, 1180, 0, 1180, 0, 1180, 1180, 1180,
+ 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+ 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+ 1181, 1182, 0, 0, 1182, 1182, 1182, 1182, 1182, 1182,
+ 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
+ 1182, 1182, 1183, 0, 1183, 0, 1183, 1183, 0, 0,
+ 0, 1183, 1184, 0, 1184, 0, 1184, 0, 1184, 1184,
+ 1184, 1184, 0, 1184, 1184, 0, 0, 0, 1184, 1185,
+ 0, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
+ 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
+
+ 1186, 0, 1186, 0, 1186, 1186, 0, 0, 0, 1186,
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+ 1187, 1188, 0, 1188, 1188, 1188, 1188, 1188, 0, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 0, 1188, 0, 1188,
+ 1188, 1188, 1189, 0, 1189, 0, 1189, 1189, 1189, 1189,
+ 1189, 1189, 1189, 1189, 1189, 1189, 1189, 0, 0, 0,
+ 1189, 1189, 1189, 1190, 0, 1190, 1190, 1190, 1190, 1190,
+ 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
+ 1190, 1190, 1190, 1190, 1191, 0, 1191, 1191, 1191, 1191,
+
+ 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
+ 1191, 1191, 1191, 1191, 1191, 1192, 1192, 0, 0, 0,
+ 1192, 1192, 1193, 0, 1193, 1193, 1193, 1193, 1193, 1193,
+ 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193,
+ 1193, 1193, 1193, 1194, 0, 0, 1194, 1194, 1194, 1194,
+ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 0, 1194,
+ 0, 1194, 1195, 0, 1195, 1195, 1195, 1195, 0, 1195,
+ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ 1195, 1195, 1195, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+ 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 0, 1196,
+
+ 0, 1196, 1196, 1196, 1197, 0, 1197, 1197, 1197, 0,
+ 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 0,
+ 0, 0, 1197, 1197, 1197, 1198, 0, 1198, 1198, 1198,
+ 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ 1198, 1198, 1198, 1198, 1198, 1198, 1199, 0, 1199, 1199,
+ 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
+ 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1200, 1200, 1200,
+ 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+ 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201, 0,
+ 1201, 0, 1201, 1201, 0, 0, 0, 1201, 1202, 0,
+
+ 1202, 0, 1202, 1202, 0, 0, 0, 1202, 1203, 1203,
+ 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+ 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1204,
+ 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
+ 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
+ 1205, 0, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
+ 1205, 1205, 1205, 1205, 1205, 1205, 1205, 0, 1205, 1205,
+ 1205, 1207, 0, 1207, 0, 1207, 1207, 0, 0, 0,
+ 1207, 0, 1207, 1208, 0, 1208, 1208, 1208, 1208, 1208,
+ 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208,
+
+ 1208, 1208, 1208, 1208, 1209, 0, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
+ 1209, 1209, 1209, 1209, 1209, 1210, 0, 1210, 1210, 1210,
+ 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+ 1210, 1210, 1210, 1210, 1210, 1210, 1211, 0, 1211, 1211,
+ 0, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
+ 1211, 0, 1211, 0, 1211, 1211, 1211, 1212, 1212, 1212,
+ 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
+ 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1214, 0,
+ 1214, 0, 1214, 1214, 0, 0, 0, 1214, 1215, 0,
+
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
+ 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1216,
+ 0, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
+ 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
+ 1217, 1217, 0, 0, 0, 1217, 1217, 1218, 0, 1218,
+ 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
+ 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1219, 1219,
+ 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+ 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1220,
+ 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
+
+ 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1113
+
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "tests/scan.l"
+/* scan.l - scanner for flex input -*-C-*- */
+#line 4 "tests/scan.l"
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+#include "parse.h"
+extern bool tablesverify, tablesext;
+extern int trlcontxt; /* Set in parse.y for each rule. */
+extern const char *escaped_qstart, *escaped_qend;
+
+#define M4QSTART "[""["
+#define M4QEND "]""]"
+
+#define ESCAPED_QSTART "[" M4QEND M4QSTART "[" M4QEND M4QSTART
+#define ESCAPED_QEND M4QEND "]" M4QSTART M4QEND "]" M4QSTART
+
+#define ACTION_ECHO add_action( yytext )
+#define ACTION_IFDEF(def, should_define) \
+ { \
+ if ( should_define ) \
+ action_define( def, 1 ); \
+ }
+
+#define ACTION_ECHO_QSTART add_action (ESCAPED_QSTART)
+#define ACTION_ECHO_QEND add_action (ESCAPED_QEND)
+
+#define ACTION_M4_IFDEF(def, should_define) \
+ do{ \
+ if ( should_define ) \
+ buf_m4_define( &m4defs_buf, def, NULL);\
+ else \
+ buf_m4_undefine( &m4defs_buf, def);\
+ } while(0)
+
+#define MARK_END_OF_PROLOG mark_prolog();
+
+#if 1
+#define YY_DECL \
+ static int real_flexscan(void)
+#else
+#define YY_DECL \
+ int flexscan(void)
+#endif
+
+#define RETURNCHAR \
+ yylval = (unsigned char) yytext[0]; \
+ return CHAR;
+
+#define RETURNNAME \
+ if(yyleng < MAXLINE) \
+ { \
+ strncpy( nmstr, yytext, sizeof(nmstr) ); \
+ piece_pack(); \
+ piece_append("<PLex_Name>"); \
+ piece_escape(yytext, strlen(yytext)); \
+ piece_append("</PLex_Name>"); \
+ piece_pack(); \
+ return ~NAME; \
+ /* return NAME;*/ \
+ } \
+ else \
+ do { \
+ synerr(_("Input line too long\n")); \
+ FLEX_EXIT(EXIT_FAILURE); \
+ } while (0)
+
+#define PUT_BACK_STRING(str, start) \
+ { size_t i = strlen( str ); \
+ while ( i > start ) \
+ unput((str)[--i]); \
+ }
+
+#define CHECK_REJECT(str) \
+ if ( all_upper( str ) ) \
+ reject = true;
+
+#define CHECK_YYMORE(str) \
+ if ( all_lower( str ) ) \
+ yymore_used = true;
+
+#define YY_USER_INIT \
+ if ( getenv("POSIXLY_CORRECT") ) \
+ posix_compat = true;
+
+#define START_CODEBLOCK(x) do { \
+ /* Emit the needed line directive... */\
+ if (indented_code == false) { \
+ linenum++; \
+ line_directive_out(NULL, 1); \
+ } \
+ add_action(M4QSTART); \
+ yy_push_state(CODEBLOCK); \
+ if ((indented_code = x)) ACTION_ECHO; \
+ piece_append("<PLex_Section1Or2_CodeBlock>"); \
+} while(0)
+
+#define END_CODEBLOCK do { \
+ yy_pop_state();\
+ add_action(M4QEND); \
+ if (!indented_code) line_directive_out(NULL, 0);\
+ piece_append("</PLex_Section1Or2_CodeBlock>"); \
+} while (0)
+
+/* Nick */
+char piece_temp[100], *piece[10000];
+int piece0, piece1;
+
+void piece_append(const char *str);
+void piece_insert(int n, const char *str);
+void piece_escape(const char *p, size_t n);
+void piece_flush(size_t n);
+void piece_pack();
+
+static void markup_action(const char *text);
+static void markup_option(const char *name, int sense);
+
+#line 1991 "lex.yy.c"
+
+#line 1993 "lex.yy.c"
+
+#define INITIAL 0
+#define SECT2 1
+#define SECT2PROLOG 2
+#define SECT3 3
+#define CODEBLOCK 4
+#define PICKUPDEF 5
+#define SC 6
+#define CARETISBOL 7
+#define NUM 8
+#define QUOTE 9
+#define FIRSTCCL 10
+#define CCL 11
+#define ACTION 12
+#define RECOVER 13
+#define COMMENT 14
+#define ACTION_STRING 15
+#define PERCENT_BRACE_ACTION 16
+#define OPTION 17
+#define LINEDIR 18
+#define CODEBLOCK_MATCH_BRACE 19
+#define GROUP_WITH_PARAMS 20
+#define GROUP_MINUS_PARAMS 21
+#define EXTENDED_COMMENT 22
+#define COMMENT_DISCARD 23
+#define CODE_COMMENT 24
+#define SECT3_NOESCAPE 25
+#define CHARACTER_CONSTANT 26
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals ( void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy ( void );
+
+int yyget_debug ( void );
+
+void yyset_debug ( int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra ( void );
+
+void yyset_extra ( YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in ( void );
+
+void yyset_in ( FILE * _in_str );
+
+FILE *yyget_out ( void );
+
+void yyset_out ( FILE * _out_str );
+
+ int yyget_leng ( void );
+
+char *yyget_text ( void );
+
+int yyget_lineno ( void );
+
+void yyset_lineno ( int _line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap ( void );
+#else
+extern int yywrap ( void );
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+
+ static void yyunput ( int c, char *buf_ptr );
+
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy ( char *, const char *, int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen ( const char * );
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput ( void );
+#else
+static int input ( void );
+#endif
+
+#endif
+
+ static int yy_start_stack_ptr = 0;
+ static int yy_start_stack_depth = 0;
+ static int *yy_start_stack = NULL;
+
+ static void yy_push_state ( int _new_state );
+
+ static void yy_pop_state ( void );
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
+#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ int n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK /*LINTED*/break;
+#endif
+
+#define YY_RULE_SETUP \
+ if ( yyleng > 0 ) \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+ (yytext[yyleng - 1] == '\n'); \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ yy_state_type yy_current_state;
+ char *yy_cp, *yy_bp;
+ int yy_act;
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ {
+#line 184 "tests/scan.l"
+
+#line 186 "tests/scan.l"
+ static int bracelevel, didadef, indented_code;
+ static int doing_rule_action = false;
+ static int option_sense;
+
+ int doing_codeblock = false;
+ int brace_depth=0, brace_start_line=0;
+ char nmdef[MAXLINE];
+
+
+#line 2259 "lex.yy.c"
+
+ while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+yy_match:
+ do
+ {
+ int yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1114 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 4511 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 196 "tests/scan.l"
+START_CODEBLOCK(true); piece_append("<PLex_Text>");
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 197 "tests/scan.l"
+add_action("/*[""["); yy_push_state( COMMENT );
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 198 "tests/scan.l"
+yy_push_state( LINEDIR );
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 199 "tests/scan.l"
+return SCDECL;
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 200 "tests/scan.l"
+return XSCDECL;
+ YY_BREAK
+case 6:
+/* rule 6 can match eol */
+YY_RULE_SETUP
+#line 201 "tests/scan.l"
+START_CODEBLOCK(false); piece_flush(strlen(yytext)); piece_append("<PLex_Text>");
+ YY_BREAK
+case 7:
+/* rule 7 can match eol */
+YY_RULE_SETUP
+#line 202 "tests/scan.l"
+{
+ brace_start_line = linenum;
+ ++linenum;
+ buf_linedir( &top_buf, infilename?infilename:"<stdin>", linenum);
+ brace_depth = 1;
+ yy_push_state(CODEBLOCK_MATCH_BRACE);
+ }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 210 "tests/scan.l"
+synerr( _("malformed '%top' directive") );
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 212 "tests/scan.l"
+/* discard */
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 214 "tests/scan.l"
+{
+ sectnum = 2;
+ bracelevel = 0;
+ mark_defs1();
+ line_directive_out(NULL, 1);
+ BEGIN(SECT2PROLOG);
+#if 1
+ piece_append("</PLex_Section1>");
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_append("<PLex_Section2>");
+ piece_pack();
+ return ~SECTEND;
+#else
+ return SECTEND;
+#endif
+ }
+ YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+#line 232 "tests/scan.l"
+yytext_is_array = false; ++linenum; piece_append("<PLex_Section1_Options><PLex_Section1_Options_Array>"); piece_flush(strlen(yytext) - 1); piece_append("</PLex_Section1_Options_Array></PLex_Section1_Options>");
+ YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+#line 233 "tests/scan.l"
+yytext_is_array = true; ++linenum; piece_append("<PLex_Section1_Options><PLex_Section1_Options_Array value=\"true\">"); piece_flush(strlen(yytext) - 1); piece_append("</PLex_Section1_Options_Array></PLex_Section1_Options>");
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 235 "tests/scan.l"
+BEGIN(OPTION); return TOK_OPTION;
+ YY_BREAK
+case 14:
+/* rule 14 can match eol */
+YY_RULE_SETUP
+#line 237 "tests/scan.l"
+++linenum; /* ignore */
+ YY_BREAK
+case 15:
+/* rule 15 can match eol */
+YY_RULE_SETUP
+#line 238 "tests/scan.l"
+++linenum; /* ignore */
+ YY_BREAK
+/* xgettext: no-c-format */
+case 16:
+/* rule 16 can match eol */
+YY_RULE_SETUP
+#line 241 "tests/scan.l"
+synerr( _( "unrecognized '%' directive" ) );
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 243 "tests/scan.l"
+{
+ if(yyleng < MAXLINE)
+ {
+ strncpy( nmstr, yytext, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Definition name too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+
+ didadef = false;
+ BEGIN(PICKUPDEF);
+ }
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 258 "tests/scan.l"
+RETURNNAME;
+ YY_BREAK
+case 19:
+/* rule 19 can match eol */
+YY_RULE_SETUP
+#line 259 "tests/scan.l"
+++linenum; /* allows blank lines in section 1 */
+ YY_BREAK
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+#line 260 "tests/scan.l"
+ACTION_ECHO; ++linenum; /* maybe end of comment line */
+ YY_BREAK
+
+/* */
+case 21:
+YY_RULE_SETUP
+#line 265 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 266 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+#line 268 "tests/scan.l"
+++linenum; ACTION_ECHO;
+ YY_BREAK
+
+
+case 24:
+YY_RULE_SETUP
+#line 271 "tests/scan.l"
+add_action("*/]""]"); yy_pop_state();
+ YY_BREAK
+
+
+case 25:
+YY_RULE_SETUP
+#line 274 "tests/scan.l"
+ACTION_ECHO; yy_pop_state();
+ YY_BREAK
+
+
+/* This is the same as COMMENT, but is discarded rather than output. */
+case 26:
+YY_RULE_SETUP
+#line 279 "tests/scan.l"
+yy_pop_state();
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 280 "tests/scan.l"
+;
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 281 "tests/scan.l"
+;
+ YY_BREAK
+case 29:
+/* rule 29 can match eol */
+YY_RULE_SETUP
+#line 282 "tests/scan.l"
+++linenum;
+ YY_BREAK
+
+
+case 30:
+YY_RULE_SETUP
+#line 286 "tests/scan.l"
+yy_pop_state();
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 287 "tests/scan.l"
+;
+ YY_BREAK
+case 32:
+/* rule 32 can match eol */
+YY_RULE_SETUP
+#line 288 "tests/scan.l"
+++linenum;
+ YY_BREAK
+
+
+case 33:
+/* rule 33 can match eol */
+YY_RULE_SETUP
+#line 292 "tests/scan.l"
+yy_pop_state();
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 293 "tests/scan.l"
+linenum = myctoi( yytext );
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 295 "tests/scan.l"
+{
+ free(infilename);
+ infilename = xstrdup(yytext + 1);
+ infilename[strlen( infilename ) - 1] = '\0';
+ }
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 300 "tests/scan.l"
+/* ignore spurious characters */
+ YY_BREAK
+
+
+case 37:
+YY_RULE_SETUP
+#line 303 "tests/scan.l"
+ACTION_ECHO_QSTART;
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 304 "tests/scan.l"
+ACTION_ECHO_QEND;
+ YY_BREAK
+
+
+case 39:
+/* rule 39 can match eol */
+YY_RULE_SETUP
+#line 308 "tests/scan.l"
+++linenum; piece_append("</PLex_Text>"); piece_flush(strlen(yytext)); END_CODEBLOCK;
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 309 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 310 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 42:
+/* rule 42 can match eol */
+YY_RULE_SETUP
+#line 311 "tests/scan.l"
+{
+ ++linenum;
+ ACTION_ECHO;
+ if ( indented_code ) { piece_flush(strlen(yytext)); piece_append("</PLex_Text>"); END_CODEBLOCK; }
+ }
+ YY_BREAK
+
+
+case 43:
+YY_RULE_SETUP
+#line 319 "tests/scan.l"
+{
+ if( --brace_depth == 0){
+ /* TODO: Matched. */
+ yy_pop_state();
+ }else
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 327 "tests/scan.l"
+{
+ brace_depth++;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case 45:
+/* rule 45 can match eol */
+YY_RULE_SETUP
+#line 332 "tests/scan.l"
+{
+ ++linenum;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 337 "tests/scan.l"
+buf_strnappend(&top_buf, escaped_qstart, (int) strlen(escaped_qstart));
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 338 "tests/scan.l"
+buf_strnappend(&top_buf, escaped_qend, (int) strlen(escaped_qend));
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 339 "tests/scan.l"
+{
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+ YY_BREAK
+case YY_STATE_EOF(CODEBLOCK_MATCH_BRACE):
+#line 343 "tests/scan.l"
+{
+ linenum = brace_start_line;
+ synerr(_("Unmatched '{'"));
+ yyterminate();
+ }
+ YY_BREAK
+
+
+case 49:
+YY_RULE_SETUP
+#line 352 "tests/scan.l"
+/* separates name and definition */
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 354 "tests/scan.l"
+{
+ if(yyleng < MAXLINE)
+ {
+ strncpy( nmdef, yytext, sizeof(nmdef) );
+ }
+ else
+ {
+ format_synerr( _("Definition value for {%s} too long\n"), nmstr);
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+ /* Skip trailing whitespace. */
+ {
+ size_t i = strlen( nmdef );
+ while (i > 0 && (nmdef[i-1] == ' ' || nmdef[i-1] == '\t'))
+ --i;
+ nmdef[i] = '\0';
+ }
+
+ ndinstal( nmstr, nmdef );
+ didadef = true;
+ }
+ YY_BREAK
+case 51:
+/* rule 51 can match eol */
+YY_RULE_SETUP
+#line 376 "tests/scan.l"
+{
+ if ( ! didadef )
+ synerr( _( "incomplete name definition" ) );
+ BEGIN(INITIAL);
+ ++linenum;
+ }
+ YY_BREAK
+
+
+case 52:
+/* rule 52 can match eol */
+YY_RULE_SETUP
+#line 386 "tests/scan.l"
+++linenum; BEGIN(INITIAL);
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 387 "tests/scan.l"
+option_sense = true;
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 389 "tests/scan.l"
+return '=';
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 391 "tests/scan.l"
+option_sense = ! option_sense;
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 393 "tests/scan.l"
+csize = option_sense ? 128 : 256; markup_option("SevenBit", option_sense);
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 394 "tests/scan.l"
+csize = option_sense ? 256 : 128; markup_option("SevenBit", !option_sense);
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 396 "tests/scan.l"
+long_align = option_sense; markup_option("Align", option_sense);
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 397 "tests/scan.l"
+{
+ ACTION_M4_IFDEF( "M4""_YY_ALWAYS_INTERACTIVE", option_sense );
+ interactive = option_sense;
+ markup_option("AlwaysInteractive", option_sense);
+ }
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 402 "tests/scan.l"
+yytext_is_array = option_sense; markup_option("Array", option_sense);
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 403 "tests/scan.l"
+backing_up_report = option_sense; markup_option("Backup", option_sense);
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 404 "tests/scan.l"
+interactive = ! option_sense; markup_option("Interactive", !option_sense);
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 405 "tests/scan.l"
+bison_bridge_lval = option_sense; markup_option("BisonBridge", option_sense);
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 406 "tests/scan.l"
+{ if((bison_bridge_lloc = option_sense))
+ bison_bridge_lval = true;
+ markup_option("BisonLocations", option_sense);
+ }
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 410 "tests/scan.l"
+C_plus_plus = option_sense; markup_option("CPlusPlus", option_sense);
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 411 "tests/scan.l"
+sf_set_case_ins(!option_sense); markup_option("Caseless", !option_sense);
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 412 "tests/scan.l"
+sf_set_case_ins(option_sense); markup_option("Caseless", option_sense);
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 413 "tests/scan.l"
+ddebug = option_sense; markup_option("Debug", option_sense);
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 414 "tests/scan.l"
+spprdflt = ! option_sense; markup_option("Default", option_sense);
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 415 "tests/scan.l"
+useecs = option_sense; markup_option("ECS", option_sense);
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 416 "tests/scan.l"
+{
+ useecs = usemecs = false;
+ use_read = fullspd = true;
+ markup_option("Fast", option_sense);
+ }
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 421 "tests/scan.l"
+{
+ useecs = usemecs = false;
+ use_read = fulltbl = true;
+ markup_option("Full", option_sense);
+ }
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 426 "tests/scan.l"
+ACTION_IFDEF("YY_NO_INPUT", ! option_sense); markup_option("Input", option_sense);
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 427 "tests/scan.l"
+interactive = option_sense; markup_option("Interactive", option_sense);
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 428 "tests/scan.l"
+lex_compat = option_sense; markup_option("LexCompat", option_sense);
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 429 "tests/scan.l"
+posix_compat = option_sense; markup_option("PosixCompat", option_sense);
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 430 "tests/scan.l"
+gen_line_dirs = option_sense; markup_option("Line", option_sense);
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 431 "tests/scan.l"
+{
+ ACTION_M4_IFDEF( "M4""_YY_MAIN", option_sense);
+ /* Override yywrap */
+ if( option_sense == true )
+ do_yywrap = false;
+ markup_option("Main", option_sense);
+ }
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 438 "tests/scan.l"
+usemecs = option_sense; markup_option("MetaECS", option_sense);
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 439 "tests/scan.l"
+{
+ ACTION_M4_IFDEF( "M4""_YY_NEVER_INTERACTIVE", option_sense );
+ interactive = !option_sense;
+ markup_option("NeverInteractive", option_sense);
+ }
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 444 "tests/scan.l"
+performance_report += option_sense ? 1 : -1; markup_option("PerfReport", option_sense);
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 445 "tests/scan.l"
+yytext_is_array = ! option_sense; markup_option("Array", !option_sense);
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 446 "tests/scan.l"
+use_read = option_sense; markup_option("Read", option_sense);
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 447 "tests/scan.l"
+reentrant = option_sense; markup_option("Reentrant", option_sense);
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 448 "tests/scan.l"
+reject_really_used = option_sense; markup_option("Reject", option_sense);
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 449 "tests/scan.l"
+ACTION_M4_IFDEF( "M4""_YY_STACK_USED", option_sense ); markup_option("Stack", option_sense);
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 450 "tests/scan.l"
+do_stdinit = option_sense; markup_option("StdInit", option_sense);
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 451 "tests/scan.l"
+use_stdout = option_sense; markup_option("StdOut", option_sense);
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 452 "tests/scan.l"
+ACTION_IFDEF("YY_NO_UNISTD_H", ! option_sense); markup_option("UniStd", option_sense);
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 453 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_UNPUT", ! option_sense); markup_option("Unput", option_sense);
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 454 "tests/scan.l"
+printstats = option_sense; markup_option("Verbose", option_sense);
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 455 "tests/scan.l"
+nowarn = ! option_sense; markup_option("Warn", option_sense);
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 456 "tests/scan.l"
+do_yylineno = option_sense; ACTION_M4_IFDEF("M4""_YY_USE_LINENO", option_sense); markup_option("YYLineNo", option_sense);
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 457 "tests/scan.l"
+yymore_really_used = option_sense; markup_option("YYMore", option_sense);
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 458 "tests/scan.l"
+do_yywrap = option_sense; markup_option("YYWrap", option_sense);
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 460 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_PUSH_STATE", ! option_sense); markup_option("YYPushState", option_sense);
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 461 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_POP_STATE", ! option_sense); markup_option("YYPopState", option_sense);
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 462 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_TOP_STATE", ! option_sense); markup_option("YYTopState", option_sense);
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 464 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BUFFER", ! option_sense); markup_option("YYScanBuffer", option_sense);
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 465 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BYTES", ! option_sense); markup_option("YYScanBytes", option_sense);
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 466 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SCAN_STRING", ! option_sense); markup_option("YYScanString", option_sense);
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 468 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_FLEX_ALLOC", ! option_sense); markup_option("YYAlloc", option_sense);
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 469 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_FLEX_REALLOC", ! option_sense); markup_option("YYRealloc", option_sense);
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 470 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_FLEX_FREE", ! option_sense); markup_option("YYFree", option_sense);
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 472 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_DEBUG", ! option_sense); markup_option("YYGetDebug", option_sense);
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 473 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_DEBUG", ! option_sense); markup_option("YYSetDebug", option_sense);
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 474 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_EXTRA", ! option_sense); markup_option("YYGetExtra", option_sense);
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 475 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_EXTRA", ! option_sense); markup_option("YYSetExtra", option_sense);
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 476 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LENG", ! option_sense); markup_option("YYGetLeng", option_sense);
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 477 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_TEXT", ! option_sense); markup_option("YYGetText", option_sense);
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 478 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LINENO", ! option_sense); markup_option("YYGetLineNo", option_sense);
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 479 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_LINENO", ! option_sense); markup_option("YYSetLineNo", option_sense);
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 480 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_IN", ! option_sense); markup_option("YYGetIn", option_sense);
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 481 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_IN", ! option_sense); markup_option("YYSetIn", option_sense);
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 482 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_OUT", ! option_sense); markup_option("YYGetOut", option_sense);
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 483 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_OUT", ! option_sense); markup_option("YYSetOut", option_sense);
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 484 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LVAL", ! option_sense); markup_option("YYGetLVal", option_sense);
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 485 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_LVAL", ! option_sense); markup_option("YYSetLVal", option_sense);
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 486 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_GET_LLOC", ! option_sense); markup_option("YYGetLLoc", option_sense);
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 487 "tests/scan.l"
+ACTION_M4_IFDEF("M4""_YY_NO_SET_LLOC", ! option_sense); markup_option("YYSetLLoc", option_sense);
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 489 "tests/scan.l"
+return TOK_EXTRA_TYPE;
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 490 "tests/scan.l"
+return TOK_OUTFILE;
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 491 "tests/scan.l"
+return TOK_PREFIX;
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 492 "tests/scan.l"
+return TOK_YYCLASS;
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 493 "tests/scan.l"
+return TOK_HEADER_FILE;
+ YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 494 "tests/scan.l"
+return TOK_TABLES_FILE;
+ YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 495 "tests/scan.l"
+{
+ tablesverify = option_sense;
+ if(!tablesext && option_sense)
+ tablesext = true;
+ markup_option("TablesVerify", option_sense);
+ }
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 503 "tests/scan.l"
+{
+ if(yyleng-1 < MAXLINE)
+ {
+ strncpy( nmstr, yytext + 1, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Option line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+ nmstr[strlen( nmstr ) - 1] = '\0';
+#if 1
+ piece_pack();
+ piece_append("<PLex_String>\"<PLex_Text>");
+ piece_escape(yytext + 1, strlen(yytext + 1) - 1);
+ piece_append("</PLex_Text>\"</PLex_String>");
+ piece_pack();
+ return ~NAME; /* actually a misnomer */
+#else
+ return NAME;
+#endif
+ }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 526 "tests/scan.l"
+{
+ format_synerr( _( "unrecognized %%option: %s" ),
+ yytext );
+ BEGIN(RECOVER);
+ }
+ YY_BREAK
+
+case 130:
+/* rule 130 can match eol */
+YY_RULE_SETUP
+#line 533 "tests/scan.l"
+++linenum; BEGIN(INITIAL);
+ YY_BREAK
+
+case 131:
+YY_RULE_SETUP
+#line 537 "tests/scan.l"
+++bracelevel; yyless( 2 ); /* eat only %{ */
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 538 "tests/scan.l"
+--bracelevel; yyless( 2 ); /* eat only %} */
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 540 "tests/scan.l"
+START_CODEBLOCK(true); piece_append("<PLex_Text>"); /* indented code in prolog */
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 542 "tests/scan.l"
+{
+ /* non-indented code */
+ if ( bracelevel <= 0 ) {
+ /* not in %{ ... %} */
+ yyless( 0 ); /* put it all back */
+ yy_set_bol( 1 );
+ mark_prolog();
+ BEGIN(SECT2);
+ } else {
+ START_CODEBLOCK(true);
+ piece_append("<PLex_Text>");
+ }
+ }
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 556 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 136:
+/* rule 136 can match eol */
+YY_RULE_SETUP
+#line 557 "tests/scan.l"
+++linenum; ACTION_ECHO;
+ YY_BREAK
+case YY_STATE_EOF(SECT2PROLOG):
+#line 559 "tests/scan.l"
+{
+ mark_prolog();
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section2>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate(); /* to stop the parser */
+#endif
+ }
+ YY_BREAK
+
+
+case 137:
+/* rule 137 can match eol */
+YY_RULE_SETUP
+#line 574 "tests/scan.l"
+++linenum; /* allow blank lines in section 2 */
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 576 "tests/scan.l"
+{
+ indented_code = false;
+ doing_codeblock = true;
+ bracelevel = 1;
+ BEGIN(PERCENT_BRACE_ACTION);
+ piece_flush(strlen(yytext) - 2);
+ piece_append("<PLex_Section1Or2_CodeBlock>");
+ piece_flush(2);
+ piece_append("<PLex_Text>");
+ }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 587 "tests/scan.l"
+{
+ /* Allow "<" to appear in (?x) patterns. */
+ if (!sf_skip_ws())
+ BEGIN(SC);
+ return '<';
+ }
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 593 "tests/scan.l"
+return '^';
+ YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 594 "tests/scan.l"
+BEGIN(QUOTE); return '"';
+ YY_BREAK
+case 142:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 595 "tests/scan.l"
+{
+ BEGIN(NUM);
+ if ( lex_compat || posix_compat )
+ return BEGIN_REPEAT_POSIX;
+ else
+ return BEGIN_REPEAT_FLEX;
+ }
+ YY_BREAK
+case 143:
+/* rule 143 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+YY_LINENO_REWIND_TO(yy_bp + 1);
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 602 "tests/scan.l"
+return '$';
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 604 "tests/scan.l"
+{
+ bracelevel = 1;
+ BEGIN(PERCENT_BRACE_ACTION);
+ piece_flush(strlen(yytext) - 2);
+ piece_append("<PLex_Section2_Rule_Action>");
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+#if 1
+ piece_pack();
+ piece_escape(yytext, 2);
+ piece_pack();
+ piece_append("<PLex_Text>");
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+#if 1 /* don't think this can really happen */
+ abort();
+#else
+ piece_flush(strlen(yytext));
+ piece_append("<PLex_Text>");
+#endif
+ }
+ YY_BREAK
+case 145:
+/* rule 145 can match eol */
+YY_RULE_SETUP
+#line 631 "tests/scan.l"
+{
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ /* Push back everything starting at the "|" */
+ int amt = (int) (strchr (yytext, '|') - yytext);
+ yyless(amt);
+ }
+ else {
+ add_action("]""]");
+ continued_action = true;
+ ++linenum;
+#if 1
+ int i;
+ for (i = 0; yytext[i] == '\t' || yytext[i] == ' '; ++i)
+ ;
+ piece_flush(i);
+ piece_pack();
+ piece_append("<PLex_Section2_Rule_Action continued=\"true\">");
+ piece_escape(yytext, strlen(yytext));
+ piece_append("</PLex_Section2_Rule_Action>");
+ piece_pack();
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+ }
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 659 "tests/scan.l"
+{
+
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ yy_push_state(COMMENT_DISCARD);
+ }
+ else{
+ yyless( yyleng - 2 ); /* put back '/', '*' */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+ }
+ }
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 673 "tests/scan.l"
+/* allow indented rules */ ;
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 675 "tests/scan.l"
+{
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ }
+ else{
+ /* This rule is separate from the one below because
+ * otherwise we get variable trailing context, so
+ * we can't build the scanner using -{f,F}.
+ */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+#if 1
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ piece_append("<PLex_Section2_Rule_Action><PLex_Text>");
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+ }
+ }
+ YY_BREAK
+case 149:
+/* rule 149 can match eol */
+YY_RULE_SETUP
+#line 705 "tests/scan.l"
+{
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ ++linenum;
+ }
+ else{
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+#if 1
+ yyless(yyleng - 1);
+#else
+ unput( '\n' ); /* so <ACTION> sees it */
+#endif
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+#if 1
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ piece_append("<PLex_Section2_Rule_Action><PLex_Text>");
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+ }
+ }
+ YY_BREAK
+case 150:
+#line 738 "tests/scan.l"
+case 151:
+YY_RULE_SETUP
+#line 738 "tests/scan.l"
+return EOF_OP;
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 740 "tests/scan.l"
+{
+ sectnum = 3;
+ BEGIN(no_section3_escape ? SECT3_NOESCAPE : SECT3);
+ outn("/* Begin user sect3 */");
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section2>");
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ piece_append("<PLex_Section3>");
+ return ~YY_NULL;
+#else
+ yyterminate(); /* to stop the parser */
+#endif
+
+ }
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 757 "tests/scan.l"
+{
+ int cclval;
+
+ if(yyleng < MAXLINE)
+ {
+ strncpy( nmstr, yytext, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+
+ /* Check to see if we've already encountered this
+ * ccl.
+ */
+ if (0 /* <--- This "0" effectively disables the reuse of a
+ * character class (purely based on its source text).
+ * The reason it was disabled is so yacc/bison can parse
+ * ccl operations, such as ccl difference and union.
+ */
+ && (cclval = ccllookup( nmstr )) != 0 )
+ {
+ if ( input() != ']' )
+ synerr( _( "bad character class" ) );
+
+ yylval = cclval;
+ ++cclreuse;
+ return PREVCCL;
+ }
+ else
+ {
+ /* We fudge a bit. We know that this ccl will
+ * soon be numbered as lastccl + 1 by cclinit.
+ */
+ cclinstal( nmstr, lastccl + 1 );
+
+ /* Push back everything but the leading bracket
+ * so the ccl can be rescanned.
+ */
+ yyless( 1 );
+
+ BEGIN(FIRSTCCL);
+ return '[';
+ }
+ }
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 803 "tests/scan.l"
+return CCL_OP_DIFF;
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 804 "tests/scan.l"
+return CCL_OP_UNION;
+ YY_BREAK
+/* Check for :space: at the end of the rule so we don't
+ * wrap the expanded regex in '(' ')' -- breaking trailing
+ * context.
+ */
+case 156:
+/* rule 156 can match eol */
+YY_RULE_SETUP
+#line 811 "tests/scan.l"
+{
+ char *nmdefptr;
+ int end_is_ws, end_ch;
+
+ end_ch = yytext[yyleng-1];
+ end_is_ws = end_ch != '}' ? 1 : 0;
+
+ if(yyleng-1 < MAXLINE)
+ {
+ strncpy( nmstr, yytext + 1, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+nmstr[yyleng - 2 - end_is_ws] = '\0'; /* chop trailing brace */
+
+ if ( (nmdefptr = ndlookup( nmstr )) == 0 )
+ format_synerr(
+ _( "undefined definition {%s}" ),
+ nmstr );
+
+ else
+ { /* push back name surrounded by ()'s */
+ size_t len = strlen( nmdefptr );
+ if (end_is_ws)
+#if 1
+ yyless(yyleng - 1);
+#else
+ unput(end_ch);
+#endif
+
+ if ( lex_compat || nmdefptr[0] == '^' ||
+ (len > 0 && nmdefptr[len - 1] == '$')
+ || (end_is_ws && trlcontxt && !sf_skip_ws()))
+ { /* don't use ()'s after all */
+ PUT_BACK_STRING(nmdefptr, 0);
+
+ if ( nmdefptr[0] == '^' )
+ BEGIN(CARETISBOL);
+ }
+
+ else
+ {
+ unput(')');
+ PUT_BACK_STRING(nmdefptr, 0);
+ unput('(');
+ }
+ }
+ }
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 863 "tests/scan.l"
+{
+ if (sf_skip_ws())
+ yy_push_state(COMMENT_DISCARD);
+ else{
+ /* Push back the "*" and return "/" as usual. */
+ yyless(1);
+ return '/';
+ }
+ }
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 873 "tests/scan.l"
+{
+ if (lex_compat || posix_compat){
+ /* Push back the "?#" and treat it like a normal parens. */
+ yyless(1);
+ sf_push();
+ return '(';
+ }
+ else
+ yy_push_state(EXTENDED_COMMENT);
+ }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 883 "tests/scan.l"
+{
+ sf_push();
+ if (lex_compat || posix_compat)
+ /* Push back the "?" and treat it like a normal parens. */
+ yyless(1);
+ else
+ BEGIN(GROUP_WITH_PARAMS);
+ return '(';
+ }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 892 "tests/scan.l"
+sf_push(); return '(';
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 893 "tests/scan.l"
+{
+ if (_sf_top_ix > 0) {
+ sf_pop();
+ return ')';
+ } else
+ synerr(_("unbalanced parenthesis"));
+ }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 901 "tests/scan.l"
+return (unsigned char) yytext[0];
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 902 "tests/scan.l"
+RETURNCHAR;
+ YY_BREAK
+/* Nick added this rule for consistency with rest of scanner */
+case YY_STATE_EOF(SECT2):
+#line 905 "tests/scan.l"
+{
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section2>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate(); /* to stop the parser */
+#endif
+ }
+ YY_BREAK
+
+
+case 164:
+/* rule 164 can match eol */
+YY_RULE_SETUP
+#line 920 "tests/scan.l"
+++linenum; /* Allow blank lines & continuations */
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 921 "tests/scan.l"
+return (unsigned char) yytext[0];
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 922 "tests/scan.l"
+BEGIN(SECT2); return '>';
+ YY_BREAK
+case 167:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 923 "tests/scan.l"
+BEGIN(CARETISBOL); return '>';
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 924 "tests/scan.l"
+RETURNNAME;
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 925 "tests/scan.l"
+{
+ format_synerr( _( "bad <start condition>: %s" ),
+ yytext );
+ }
+ YY_BREAK
+
+case 170:
+YY_RULE_SETUP
+#line 931 "tests/scan.l"
+BEGIN(SECT2); return '^';
+ YY_BREAK
+
+case 171:
+YY_RULE_SETUP
+#line 935 "tests/scan.l"
+RETURNCHAR;
+ YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 936 "tests/scan.l"
+BEGIN(SECT2); return '"';
+ YY_BREAK
+case 173:
+/* rule 173 can match eol */
+YY_RULE_SETUP
+#line 938 "tests/scan.l"
+{
+ synerr( _( "missing quote" ) );
+ BEGIN(SECT2);
+ ++linenum;
+ return '"';
+ }
+ YY_BREAK
+
+
+case 174:
+YY_RULE_SETUP
+#line 947 "tests/scan.l"
+BEGIN(SECT2);
+ YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 948 "tests/scan.l"
+BEGIN(GROUP_MINUS_PARAMS);
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 949 "tests/scan.l"
+sf_set_case_ins(1);
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 950 "tests/scan.l"
+sf_set_dot_all(1);
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 951 "tests/scan.l"
+sf_set_skip_ws(1);
+ YY_BREAK
+
+
+case 179:
+YY_RULE_SETUP
+#line 954 "tests/scan.l"
+BEGIN(SECT2);
+ YY_BREAK
+case 180:
+YY_RULE_SETUP
+#line 955 "tests/scan.l"
+sf_set_case_ins(0);
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 956 "tests/scan.l"
+sf_set_dot_all(0);
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 957 "tests/scan.l"
+sf_set_skip_ws(0);
+ YY_BREAK
+
+
+case 183:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 961 "tests/scan.l"
+BEGIN(CCL); return '^';
+ YY_BREAK
+case 184:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 962 "tests/scan.l"
+return '^';
+ YY_BREAK
+case 185:
+YY_RULE_SETUP
+#line 963 "tests/scan.l"
+BEGIN(CCL); RETURNCHAR;
+ YY_BREAK
+
+
+case 186:
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp = yy_bp + 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 967 "tests/scan.l"
+return '-';
+ YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 968 "tests/scan.l"
+RETURNCHAR;
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 969 "tests/scan.l"
+BEGIN(SECT2); return ']';
+ YY_BREAK
+case 189:
+/* rule 189 can match eol */
+YY_RULE_SETUP
+#line 970 "tests/scan.l"
+{
+ synerr( _( "bad character class" ) );
+ BEGIN(SECT2);
+ return ']';
+ }
+ YY_BREAK
+
+
+case 190:
+YY_RULE_SETUP
+#line 978 "tests/scan.l"
+BEGIN(CCL); return CCE_ALNUM;
+ YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 979 "tests/scan.l"
+BEGIN(CCL); return CCE_ALPHA;
+ YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 980 "tests/scan.l"
+BEGIN(CCL); return CCE_BLANK;
+ YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 981 "tests/scan.l"
+BEGIN(CCL); return CCE_CNTRL;
+ YY_BREAK
+case 194:
+YY_RULE_SETUP
+#line 982 "tests/scan.l"
+BEGIN(CCL); return CCE_DIGIT;
+ YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 983 "tests/scan.l"
+BEGIN(CCL); return CCE_GRAPH;
+ YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 984 "tests/scan.l"
+BEGIN(CCL); return CCE_LOWER;
+ YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 985 "tests/scan.l"
+BEGIN(CCL); return CCE_PRINT;
+ YY_BREAK
+case 198:
+YY_RULE_SETUP
+#line 986 "tests/scan.l"
+BEGIN(CCL); return CCE_PUNCT;
+ YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 987 "tests/scan.l"
+BEGIN(CCL); return CCE_SPACE;
+ YY_BREAK
+case 200:
+YY_RULE_SETUP
+#line 988 "tests/scan.l"
+BEGIN(CCL); return CCE_UPPER;
+ YY_BREAK
+case 201:
+YY_RULE_SETUP
+#line 989 "tests/scan.l"
+BEGIN(CCL); return CCE_XDIGIT;
+ YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 991 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_ALNUM;
+ YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 992 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_ALPHA;
+ YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 993 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_BLANK;
+ YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 994 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_CNTRL;
+ YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 995 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_DIGIT;
+ YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 996 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_GRAPH;
+ YY_BREAK
+case 208:
+YY_RULE_SETUP
+#line 997 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_LOWER;
+ YY_BREAK
+case 209:
+YY_RULE_SETUP
+#line 998 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_PRINT;
+ YY_BREAK
+case 210:
+YY_RULE_SETUP
+#line 999 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_PUNCT;
+ YY_BREAK
+case 211:
+YY_RULE_SETUP
+#line 1000 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_SPACE;
+ YY_BREAK
+case 212:
+YY_RULE_SETUP
+#line 1001 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_UPPER;
+ YY_BREAK
+case 213:
+YY_RULE_SETUP
+#line 1002 "tests/scan.l"
+BEGIN(CCL); return CCE_NEG_XDIGIT;
+ YY_BREAK
+case 214:
+YY_RULE_SETUP
+#line 1003 "tests/scan.l"
+{
+ format_synerr(
+ _( "bad character class expression: %s" ),
+ yytext );
+ BEGIN(CCL); return CCE_ALNUM;
+ }
+ YY_BREAK
+
+
+case 215:
+YY_RULE_SETUP
+#line 1012 "tests/scan.l"
+{
+ yylval = myctoi( yytext );
+ return NUMBER;
+ }
+ YY_BREAK
+case 216:
+YY_RULE_SETUP
+#line 1017 "tests/scan.l"
+return ',';
+ YY_BREAK
+case 217:
+YY_RULE_SETUP
+#line 1018 "tests/scan.l"
+{
+ BEGIN(SECT2);
+ if ( lex_compat || posix_compat )
+ return END_REPEAT_POSIX;
+ else
+ return END_REPEAT_FLEX;
+ }
+ YY_BREAK
+case 218:
+YY_RULE_SETUP
+#line 1026 "tests/scan.l"
+{
+ synerr( _( "bad character inside {}'s" ) );
+ BEGIN(SECT2);
+ return '}';
+ }
+ YY_BREAK
+case 219:
+/* rule 219 can match eol */
+YY_RULE_SETUP
+#line 1032 "tests/scan.l"
+{
+ synerr( _( "missing }" ) );
+ BEGIN(SECT2);
+ ++linenum;
+ return '}';
+ }
+ YY_BREAK
+
+
+case 220:
+YY_RULE_SETUP
+#line 1042 "tests/scan.l"
+bracelevel = 0; piece_append("</PLex_Text>");
+ YY_BREAK
+case 221:
+YY_RULE_SETUP
+#line 1044 "tests/scan.l"
+ACTION_ECHO; yy_push_state( CODE_COMMENT );
+ YY_BREAK
+
+case 222:
+YY_RULE_SETUP
+#line 1047 "tests/scan.l"
+{
+ ACTION_ECHO;
+ CHECK_REJECT(yytext);
+ }
+ YY_BREAK
+case 223:
+YY_RULE_SETUP
+#line 1051 "tests/scan.l"
+{
+ ACTION_ECHO;
+ CHECK_YYMORE(yytext);
+ }
+ YY_BREAK
+
+case 224:
+YY_RULE_SETUP
+#line 1057 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 225:
+/* rule 225 can match eol */
+YY_RULE_SETUP
+#line 1058 "tests/scan.l"
+{
+ ++linenum;
+ ACTION_ECHO;
+ if (bracelevel <= 0 || (doing_codeblock && indented_code)) {
+ if ( doing_rule_action )
+ add_action( "\tYY_BREAK]""]\n" );
+
+ piece_flush(strlen(yytext));
+ if (doing_codeblock)
+ piece_append("</PLex_Section1Or2_CodeBlock>");
+ else
+ markup_action("</PLex_Section2_Rule_Action>");
+ doing_rule_action = doing_codeblock = false;
+ BEGIN(SECT2);
+ }
+ }
+ YY_BREAK
+
+/* Reject and YYmore() are checked for above, in PERCENT_BRACE_ACTION */
+
+case 226:
+YY_RULE_SETUP
+#line 1079 "tests/scan.l"
+ACTION_ECHO; ++bracelevel;
+ YY_BREAK
+case 227:
+YY_RULE_SETUP
+#line 1080 "tests/scan.l"
+ACTION_ECHO; --bracelevel;
+ YY_BREAK
+case 228:
+YY_RULE_SETUP
+#line 1081 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 229:
+YY_RULE_SETUP
+#line 1082 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 230:
+YY_RULE_SETUP
+#line 1083 "tests/scan.l"
+ACTION_ECHO; /* character constant */
+ YY_BREAK
+case 231:
+YY_RULE_SETUP
+#line 1084 "tests/scan.l"
+ACTION_ECHO; BEGIN(CHARACTER_CONSTANT);
+ YY_BREAK
+case 232:
+YY_RULE_SETUP
+#line 1085 "tests/scan.l"
+ACTION_ECHO; BEGIN(ACTION_STRING);
+ YY_BREAK
+case 233:
+/* rule 233 can match eol */
+YY_RULE_SETUP
+#line 1086 "tests/scan.l"
+{
+ ++linenum;
+ ACTION_ECHO;
+ if (bracelevel <= 0) {
+ if ( doing_rule_action )
+ {
+ add_action( "\tYY_BREAK]""]\n" );
+ piece_flush(strlen(yytext));
+ markup_action("</PLex_Text></PLex_Section2_Rule_Action>");
+ }
+
+ doing_rule_action = false;
+ BEGIN(SECT2);
+ }
+ }
+ YY_BREAK
+case 234:
+YY_RULE_SETUP
+#line 1101 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+
+
+case 235:
+YY_RULE_SETUP
+#line 1105 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 236:
+YY_RULE_SETUP
+#line 1106 "tests/scan.l"
+ACTION_ECHO; BEGIN(ACTION);
+ YY_BREAK
+
+
+case 237:
+YY_RULE_SETUP
+#line 1109 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 238:
+YY_RULE_SETUP
+#line 1110 "tests/scan.l"
+ACTION_ECHO; BEGIN(ACTION);
+ YY_BREAK
+
+
+case 239:
+/* rule 239 can match eol */
+YY_RULE_SETUP
+#line 1113 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 240:
+/* rule 240 can match eol */
+YY_RULE_SETUP
+#line 1114 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+case 241:
+/* rule 241 can match eol */
+YY_RULE_SETUP
+#line 1115 "tests/scan.l"
+++linenum; ACTION_ECHO; if (bracelevel <= 0) { BEGIN(SECT2); piece_flush(strlen(yytext)); if (doing_rule_action) markup_action("</PLex_Text></PLex_Section2_Rule_Action>"); } else { BEGIN(ACTION); }
+ YY_BREAK
+case 242:
+YY_RULE_SETUP
+#line 1116 "tests/scan.l"
+ACTION_ECHO;
+ YY_BREAK
+
+case YY_STATE_EOF(COMMENT):
+case YY_STATE_EOF(CODE_COMMENT):
+case YY_STATE_EOF(COMMENT_DISCARD):
+case YY_STATE_EOF(ACTION):
+case YY_STATE_EOF(ACTION_STRING):
+case YY_STATE_EOF(CHARACTER_CONSTANT):
+#line 1119 "tests/scan.l"
+{
+ synerr( _( "EOF encountered inside an action" ) );
+ yyterminate();
+ }
+ YY_BREAK
+case YY_STATE_EOF(EXTENDED_COMMENT):
+case YY_STATE_EOF(GROUP_WITH_PARAMS):
+case YY_STATE_EOF(GROUP_MINUS_PARAMS):
+#line 1124 "tests/scan.l"
+{
+ synerr( _( "EOF encountered inside pattern" ) );
+ yyterminate();
+ }
+ YY_BREAK
+case 243:
+YY_RULE_SETUP
+#line 1129 "tests/scan.l"
+{
+ yylval = myesc( (unsigned char *) yytext );
+
+ if ( YY_START == FIRSTCCL )
+ BEGIN(CCL);
+
+ return CHAR;
+ }
+ YY_BREAK
+
+case 244:
+YY_RULE_SETUP
+#line 1139 "tests/scan.l"
+fputs(escaped_qstart, yyout);
+ YY_BREAK
+case 245:
+YY_RULE_SETUP
+#line 1140 "tests/scan.l"
+fputs(escaped_qend, yyout);
+ YY_BREAK
+case 246:
+/* rule 246 can match eol */
+YY_RULE_SETUP
+#line 1141 "tests/scan.l"
+ECHO;
+ YY_BREAK
+case 247:
+YY_RULE_SETUP
+#line 1142 "tests/scan.l"
+ECHO;
+ YY_BREAK
+case YY_STATE_EOF(SECT3):
+#line 1143 "tests/scan.l"
+{
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section3>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate();
+#endif
+ }
+ YY_BREAK
+
+
+case 248:
+YY_RULE_SETUP
+#line 1156 "tests/scan.l"
+fprintf(yyout, "[""[%s]""]", escaped_qstart);
+ YY_BREAK
+case 249:
+YY_RULE_SETUP
+#line 1157 "tests/scan.l"
+fprintf(yyout, "[""[%s]""]", escaped_qend);
+ YY_BREAK
+case 250:
+/* rule 250 can match eol */
+YY_RULE_SETUP
+#line 1158 "tests/scan.l"
+ECHO;
+ YY_BREAK
+case 251:
+YY_RULE_SETUP
+#line 1159 "tests/scan.l"
+ECHO;
+ YY_BREAK
+case YY_STATE_EOF(SECT3_NOESCAPE):
+#line 1160 "tests/scan.l"
+{
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section3>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate();
+#endif
+ }
+ YY_BREAK
+
+case 252:
+/* rule 252 can match eol */
+YY_RULE_SETUP
+#line 1172 "tests/scan.l"
+format_synerr( _( "bad character: %s" ), yytext );
+ YY_BREAK
+case 253:
+YY_RULE_SETUP
+#line 1174 "tests/scan.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+ YY_BREAK
+#line 4297 "lex.yy.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(CODEBLOCK):
+case YY_STATE_EOF(PICKUPDEF):
+case YY_STATE_EOF(SC):
+case YY_STATE_EOF(CARETISBOL):
+case YY_STATE_EOF(NUM):
+case YY_STATE_EOF(QUOTE):
+case YY_STATE_EOF(FIRSTCCL):
+case YY_STATE_EOF(CCL):
+case YY_STATE_EOF(RECOVER):
+case YY_STATE_EOF(PERCENT_BRACE_ACTION):
+case YY_STATE_EOF(OPTION):
+case YY_STATE_EOF(LINEDIR):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+ } /* end of user's declarations */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ char *source = (yytext_ptr);
+ int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ int num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc( (void *) b->yy_ch_buf,
+ (yy_size_t) (b->yy_buf_size + 2) );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = NULL;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart( yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
+ (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ /* "- 2" to take care of EOB's */
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ yy_state_type yy_current_state;
+ char *yy_cp;
+
+ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ int yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1114 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ int yy_is_jam;
+ char *yy_cp = (yy_c_buf_p);
+
+ int yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1114 )
+ yy_c = yy_meta[yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+ yy_is_jam = (yy_current_state == 1113);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+#ifndef YY_NO_UNPUT
+
+ static void yyunput (int c, char * yy_bp )
+{
+ char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ int number_to_move = (yy_n_chars) + 2;
+ char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return 0;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+ }
+
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer( b, file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree( (void *) b->yy_ch_buf );
+
+ yyfree( (void *) b );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ yy_size_t grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return NULL;
+
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = NULL;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer( b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (const char * yystr )
+{
+
+ return yy_scan_bytes( yystr, (int) strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = (yy_size_t) (_yybytes_len + 2);
+ buf = (char *) yyalloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer( buf, n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+ static void yy_push_state (int _new_state )
+{
+ if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
+ {
+ yy_size_t new_size;
+
+ (yy_start_stack_depth) += YY_START_STACK_INCR;
+ new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int );
+
+ if ( ! (yy_start_stack) )
+ (yy_start_stack) = (int *) yyalloc( new_size );
+
+ else
+ (yy_start_stack) = (int *) yyrealloc(
+ (void *) (yy_start_stack), new_size );
+
+ if ( ! (yy_start_stack) )
+ YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+ }
+
+ (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
+
+ BEGIN(_new_state);
+}
+
+ static void yy_pop_state (void)
+{
+ if ( --(yy_start_stack_ptr) < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yynoreturn yy_fatal_error (const char* msg )
+{
+ fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+int yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param _line_number line number
+ *
+ */
+void yyset_lineno (int _line_number )
+{
+
+ yylineno = _line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param _in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * _in_str )
+{
+ yyin = _in_str ;
+}
+
+void yyset_out (FILE * _out_str )
+{
+ yyout = _out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int _bdebug )
+{
+ yy_flex_debug = _bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = NULL;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = NULL;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+ (yy_start_stack_ptr) = 0;
+ (yy_start_stack_depth) = 0;
+ (yy_start_stack) = NULL;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = NULL;
+ yyout = NULL;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer( YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Destroy the start condition stack. */
+ yyfree( (yy_start_stack) );
+ (yy_start_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, const char * s2, int n )
+{
+
+ int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (const char * s )
+{
+ int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return malloc(size);
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return realloc(ptr, size);
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 1174 "tests/scan.l"
+
+
+
+int yywrap(void)
+ {
+ if ( --num_input_files > 0 )
+ {
+ set_input_file( *++input_files );
+ return 0;
+ }
+
+ else
+ return 1;
+ }
+
+
+/* set_input_file - open the given file (if NULL, stdin) for scanning */
+
+void set_input_file( char *file )
+ {
+ if ( file && strcmp( file, "-" ) )
+ {
+ infilename = xstrdup(file);
+ yyin = fopen( infilename, "r" );
+
+ if ( yyin == NULL )
+ lerr( _( "can't open %s" ), file );
+ }
+
+ else
+ {
+ yyin = stdin;
+ infilename = xstrdup("<stdin>");
+ }
+
+ linenum = 1;
+ }
+
+/* Nick */
+void piece_append(const char *str) {
+ piece[piece1++] = strdup(str);
+}
+
+void piece_insert(int n, const char *str) {
+ memmove(piece + n + 1, piece + n, (piece1 - n) * sizeof(char *));
+ piece[n] = strdup(str);
+ ++piece1;
+}
+
+void piece_escape(const char *p, size_t n) {
+ size_t i, j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ case '>':
+ j += 4;
+ break;
+ case '&':
+ j += 5;
+ break;
+ default:
+ ++j;
+ break;
+ }
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ memcpy(q + j, "<", 4);
+ j += 4;
+ break;
+ case '>':
+ memcpy(q + j, ">", 4);
+ j += 4;
+ break;
+ case '&':
+ memcpy(q + j, "&", 5);
+ j += 5;
+ break;
+ default:
+ q[j++] = p[i];
+ break;
+ }
+ q[j] = 0;
+ piece[piece1++] = q;
+}
+
+void piece_flush(size_t n) {
+ piece_escape(yytext, n);
+ yytext += n;
+}
+
+void piece_pack() {
+ int i;
+ size_t j = 0;
+ for (i = piece0; i < piece1; ++i)
+ j += strlen(piece[i]);
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = piece0; i < piece1; ++i) {
+ int k = strlen(piece[i]);
+ memcpy(q + j, piece[i], k);
+ free(piece[i]);
+ j += k;
+ }
+ q[j] = 0;
+ piece[piece0++] = q;
+ piece1 = piece0;
+}
+
+int flexscan(void) {
+ int result = real_flexscan();
+ if (result < 0)
+ return ~result;
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ return result;
+}
+
+static void markup_action(const char *text) {
+ /* append to last token text so it appears inside <PLex_Section2_Rule>..</PLex_Section2_Rule> */
+ /* a problem here is that Rule has already been reduced (marked up), */
+ /* because we returned a '\n' token when we detected start of action, */
+ /* hence we need to move the closing </PLex_Section2_Rule> tag over to our right */
+ int i = strlen(piece[--piece0]);
+ if (i < 21 || strcmp(piece[piece0] + i - 21, "</PLex_Section2_Rule>") != 0)
+ abort();
+ piece[piece0][i - 21] = 0;
+ piece_append(text);
+ piece_append("</PLex_Section2_Rule>");
+ piece_pack();
+}
+
+static void markup_option(const char *name, int sense) {
+ /* a problem here is that we couldn't apply markup when scanning the "no" */
+ /* prefix because we didn't know what option it was, back up to include it */
+ int i = piece1;
+ while (--i >= piece0 && strcmp(piece[i], "no") == 0)
+ ;
+ sprintf(piece_temp, "<PLex_Section1_Options_%s%s>", name, sense ? " value=\"true\"" : "");
+ piece_insert(i + 1, piece_temp);
+ piece_flush(strlen(yytext));
+ sprintf(piece_temp, "</PLex_Section1_Options_%s>", name);
+ piece_append(piece_temp);
+ /* append to last token text so it appears inside <PLex_Section1_Options>..</PLex_Section1_Options> */
+ --piece0;
+ piece_pack();
+}
+
--- /dev/null
+import bisect
+import bisect_set
+import element
+import lr1dfa
+#import work
+import sys
+
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+class LR1:
+ ASSOCIATIVITY_RIGHT = 0
+ ASSOCIATIVITY_LEFT = 1
+ ASSOCIATIVITY_NON = 2
+
+ def __init__(
+ self,
+ productions = [],
+ precedences = ([], [], [], []),
+ associativities = [],
+ n_terminals = n_characters + 1,
+ eof_terminal = n_characters
+ ):
+ # productions: list of production
+ # production: (
+ # symbols,
+ # lookaheads,
+ # ref_data
+ # )
+ # symbols: list of symbol_desc
+ # symbol_desc: (terminal_set, nonterminal_set)
+ # terminal_set: similar to character_set, even length list of pairs of breaks
+ # nonterminal_set: as above but has n_terminals subtracted from breaks
+ # lookaheads: list of lookahead_desc, len(lookaheads) = len(symbols) + 1
+ # lookahead_desc: (initial_set, can_be_empty)
+ # initial_set: what terminals can occur at this position in symbols array,
+ # computed such that lookaheads[i][0] is symbols[i][0], plus initial set of
+ # each nonterminal from symbols[i][1], plus lookaheads[i + 1][0] if any
+ # nonterminal of symbols[i][1] can be empty (may pull in i + 2, i + 3 etc)
+ # can_be_empty: whether all symbols from this position to end can be empty
+ # note: last lookahead_desc is a sentinel consisting of ([], True), so that
+ # initial_set is empty (will be augmented by context) and can_be_empty is
+ # True (because all symbols from the end to the end can obviously be empty)
+ # ref_data: can be anything for caller's use, usually list of group_bound
+ # group_bound: (start_index, end_index, tag, kwargs)
+ # where start_index, end_index are indices into list of character_set,
+ # and tag, kwargs will be passed to apply_markup() hence factory(),
+ # noting that markup has to be applied in reverse order of the list
+ # precedences: (terminal_breaks, terminal_precs, nonterminal_breaks,
+ # nonterminal_precs) encoded similarly to the action and goto tables
+ # associativities: indexed by value from (non)terminal_precs, contains
+ # -1 for not specified (equal precedence is a compile time error) or an
+ # ASSOCIATIVITY_* value (NON means equal precedence is run time error)
+ # n_terminals: offset to apply to productions[] index to get symbol
+ # (character set code), also symbol for productions[0] = start production
+ # eof_terminal: usually == n_terminals - 1 (must be valid terminal value)
+ self.productions = productions
+ self.precedences = precedences
+ self.associativities = associativities
+ self.n_terminals = n_terminals
+ self.eof_terminal = eof_terminal
+
+ def lookahead_item_set_closure(self, items, item_to_index):
+ in_queue = [True for i in range(len(items))]
+ queue = list(range(len(items)))
+
+ qhead = 0
+ while qhead < len(queue):
+ i = queue[qhead]
+ in_queue[i] = False
+ j, k, lookahead_set = items[i]
+ symbols, lookaheads, _ = self.productions[j]
+ if k < len(symbols):
+ _, nonterminal_set = symbols[k]
+ if len(nonterminal_set):
+ next_lookahead_set, next_can_be_empty = lookaheads[k + 1]
+ if next_can_be_empty:
+ next_lookahead_set = bisect_set.bisect_set_or(
+ next_lookahead_set,
+ lookahead_set
+ )
+ for l in range(0, len(nonterminal_set), 2):
+ for m in range(nonterminal_set[l], nonterminal_set[l + 1]):
+ key = (m, 0)
+ if key in item_to_index:
+ n = item_to_index[key]
+ child_lookahead_set = bisect_set.bisect_set_or(
+ items[n][2],
+ next_lookahead_set
+ )
+ if child_lookahead_set != items[n][2]:
+ items[n] = (m, 0, child_lookahead_set)
+ if not in_queue[n]:
+ # optimization: do not re-queue unless it is transparent
+ # to changes in the lookahead set wrt. further propagation
+ child_symbols, child_lookaheads, _ = self.productions[m]
+ if len(child_symbols) and child_lookaheads[1][1]:
+ in_queue[n] = True
+ queue.append(n)
+ else:
+ n = len(items)
+ items.append((m, 0, next_lookahead_set))
+ item_to_index[key] = n
+ in_queue.append(True)
+ queue.append(n)
+ qhead += 1
+
+ def lookahead_item_set_action(self, items, terminal):
+ next_items = []
+ next_item_to_index = {}
+ reductions = set()
+ terminal0 = 0
+ terminal1 = self.n_terminals
+ for i, j, lookahead_set in items:
+ symbols, _, _ = self.productions[i]
+ if j < len(symbols):
+ terminal_set, _ = symbols[j]
+ k = bisect.bisect_right(terminal_set, terminal)
+ if k > 0 and terminal0 < terminal_set[k - 1]:
+ terminal0 = terminal_set[k - 1]
+ if k < len(terminal_set) and terminal1 > terminal_set[k]:
+ terminal1 = terminal_set[k]
+ if (k & 1) == 1:
+ next_item_to_index[(i, j + 1)] = len(next_items)
+ next_items.append((i, j + 1, lookahead_set))
+ else:
+ k = bisect.bisect_right(lookahead_set, terminal)
+ if k > 0 and terminal0 < lookahead_set[k - 1]:
+ terminal0 = lookahead_set[k - 1]
+ if k < len(lookahead_set) and terminal1 > lookahead_set[k]:
+ terminal1 = lookahead_set[k]
+ if (k & 1) == 1:
+ reductions.add(i)
+ return next_items, next_item_to_index, reductions, terminal0, terminal1
+
+ def lookahead_item_set_goto(self, items, nonterminal):
+ next_items = []
+ next_item_to_index = {}
+ reductions = set()
+ nonterminal0 = 0
+ nonterminal1 = len(self.productions)
+ for i, j, lookahead_set in items:
+ symbols, _, _ = self.productions[i]
+ if j < len(symbols):
+ _, nonterminal_set = symbols[j]
+ k = bisect.bisect_right(nonterminal_set, nonterminal)
+ if k > 0 and nonterminal0 < nonterminal_set[k - 1]:
+ nonterminal0 = nonterminal_set[k - 1]
+ if k < len(nonterminal_set) and nonterminal1 > nonterminal_set[k]:
+ nonterminal1 = nonterminal_set[k]
+ if (k & 1) == 1:
+ next_item_to_index[(i, j + 1)] = len(next_items)
+ next_items.append((i, j + 1, lookahead_set))
+ return next_items, next_item_to_index, nonterminal0, nonterminal1
+
+ #def parse_text(self, text, i):
+ # items = [(0, 0, [self.eof_terminal, self.eof_terminal + 1])]
+ # item_to_index = {(0, 0): 0}
+ # value_stack = []
+ # state_stack = []
+ # lookahead_character = ord(text[i]) if i < len(text) else self.eof_terminal
+ # while True:
+ # self.lookahead_item_set_closure(items, item_to_index)
+ # value_stack.append(i)
+ # state_stack.append(items)
+ # items, item_to_index, reductions, _, _ = (
+ # self.lookahead_item_set_action(items, lookahead_character)
+ # )
+ # if len(items) != 0:
+ # if len(reductions) != 0:
+ # sys.stderr.write(
+ # 'shift/reduce conflict: {0:s} vs {1:s}\n'.format(
+ # ','.join([str(i) for i, _, _ in next_items]),
+ # ','.join([str(i) for i in reductions])
+ # )
+ # )
+ # i += 1
+ # lookahead_character = ord(text[i]) if i < len(text) else self.eof_terminal
+ # elif len(reductions) != 0:
+ # if len(reductions) != 1:
+ # sys.stderr.write(
+ # 'reduce/reduce conflict: {0:s}\n'.format(
+ # ','.join([str(i) for i in reductions])
+ # )
+ # )
+ # reduce = min(reductions)
+ # symbols, _, ref_data = self.productions[reduce]
+ # base = len(value_stack) - len(symbols) - 1
+ # for j in range(len(ref_data) - 1, -1, -1):
+ # k, l, tag, _ = ref_data[j]
+ # k += base
+ # if l != 1:
+ # value_stack[k + 1:k + l + 1] = [value_stack[k + l]]
+ # sys.stderr.write(
+ # 'text \'{0:s}\' tag \'{1:s}\'\n'.format(
+ # text[value_stack[k]:value_stack[k + 1]],
+ # tag
+ # )
+ # )
+ # del value_stack[base + 1:]
+ # del state_stack[base + 1:]
+ # if reduce == 0:
+ # assert base == 0
+ # return
+ # items, item_to_index, _, _ = (
+ # self.lookahead_item_set_goto(state_stack[-1], reduce)
+ # )
+ # assert len(items) != 0
+ # else:
+ # raise Exception(
+ # 'syntax error at {0:d}: {1:s}'.format(i, text[i:])
+ # )
+
+ #def parse_yychunk(self, root, pos, off, factory, yychunk_iter):
+ # if pos < 0:
+ # pos, off = element.to_start_relative(root, pos, off)
+
+ # items = [(0, 0, [self.eof_terminal, self.eof_terminal + 1])]
+ # item_to_index = {(0, 0): 0}
+ # value_stack = []
+ # state_stack = []
+ # text = element.get_text(root, pos)
+ # while off >= len(text):
+ # if pos < len(root):
+ # pos += 1
+ # off = 0
+ # else:
+ # try:
+ # next(yychunk_iter)
+ # except StopIteration:
+ # lookahead_character = self.eof_terminal
+ # break
+ # text = element.get_text(root, pos)
+ # else:
+ # lookahead_character = ord(text[off])
+ # while True:
+ # self.lookahead_item_set_closure(items, item_to_index)
+ # value_stack.append((pos, off))
+ # state_stack.append(items)
+ # items, item_to_index, reductions, _, _ = (
+ # self.lookahead_item_set_action(items, lookahead_character)
+ # )
+ # if len(items) != 0:
+ # if len(reductions) != 0:
+ # sys.stderr.write(
+ # 'shift/reduce conflict: {0:s} vs {1:s}\n'.format(
+ # ','.join([str(i) for i, _ in next_lookahead_item_set.keys()]),
+ # ','.join([str(i) for i in reductions])
+ # )
+ # )
+ # off += 1
+ # while off >= len(text):
+ # if pos < len(root):
+ # pos += 1
+ # off = 0
+ # else:
+ # try:
+ # next(yychunk_iter)
+ # except StopIteration:
+ # lookahead_character = self.eof_terminal
+ # break
+ # text = element.get_text(root, pos)
+ # else:
+ # lookahead_character = ord(text[off])
+ # elif len(reductions) != 0:
+ # if len(reductions) != 1:
+ # sys.stderr.write(
+ # 'reduce/reduce conflict: {0:s}\n'.format(
+ # ','.join([str(i) for i in reductions])
+ # )
+ # )
+ # reduce = min(reductions)
+ # symbols, _, ref_data = self.productions[reduce]
+ # base = len(value_stack) - len(symbols) - 1
+ # end_relative = len(value_stack)
+ # for j in range(len(ref_data) - 1, -1, -1):
+ # k, l, tag, kwargs = ref_data[j]
+ # k += base
+ # assert k < end_relative
+ # if l != 1:
+ # value_stack[k + 1:k + l + 1] = [value_stack[k + l]]
+ # end_relative = max(k + 1, end_relative + 1 - l)
+ # while end_relative > k + 1:
+ # end_relative -= 1
+ # pos1, off1 = value_stack[end_relative]
+ # value_stack[end_relative] = (
+ # element.to_end_relative(root, pos1, off1)
+ # )
+ # pos0, off0 = value_stack[k]
+ # pos1, off1 = value_stack[k + 1]
+ # work.apply_markup(
+ # root,
+ # pos0,
+ # off0,
+ # pos1,
+ # off1,
+ # factory,
+ # tag,
+ # **kwargs
+ # )
+ # if end_relative < len(value_stack):
+ # pos, off = value_stack[-1]
+ # pos, off = element.to_start_relative(root, pos, off)
+ # text = element.get_text(root, pos)
+ # del value_stack[base + 1:]
+ # del state_stack[base + 1:]
+ # if reduce == 0:
+ # assert base == 0
+ # return
+ # items, item_to_index, _, _ = (
+ # self.lookahead_item_set_goto(state_stack[-1], reduce)
+ # )
+ # assert len(items) != 0
+ # else:
+ # raise Exception(
+ # 'syntax error at {0:d},{1:d}: {2:s}'.format(pos, off, text[off:])
+ # )
+
+ def to_clr1(self):
+ _lr1dfa = lr1dfa.LR1DFA(
+ [],
+ [
+ (len(symbols), ref_data)
+ for symbols, _, ref_data in self.productions
+ ],
+ self.n_terminals,
+ self.eof_terminal
+ )
+
+ items = [(0, 0, [self.eof_terminal, self.eof_terminal + 1])]
+ item_to_index = {(0, 0): 0}
+ self.lookahead_item_set_closure(items, item_to_index)
+
+ items = sorted(items)
+ key = tuple((i, j, tuple(k)) for i, j, k in items)
+ state_to_items = [items]
+ items_to_state = {key: 0}
+
+ while len(_lr1dfa.states) < len(state_to_items):
+ items = state_to_items[len(_lr1dfa.states)]
+ state_desc = ([], [], [], [])
+
+ def add_state(next_items, next_item_to_index):
+ self.lookahead_item_set_closure(next_items, next_item_to_index)
+ new_items = sorted(next_items)
+ key = tuple((i, j, tuple(k)) for i, j, k in new_items)
+ if key in items_to_state:
+ state = items_to_state[key]
+ else:
+ state = len(state_to_items)
+ state_to_items.append(new_items)
+ items_to_state[key] = state
+ return state
+
+ terminal = 0
+ while terminal < self.n_terminals:
+ next_items, next_item_to_index, reductions, terminal0, terminal1 = (
+ self.lookahead_item_set_action(items, terminal)
+ )
+ assert terminal0 == terminal and terminal1 > terminal
+ if len(reductions) != 0:
+ if len(reductions) != 1:
+ sys.stderr.write(
+ 'state {0:d} reduce/reduce conflict: {1:s}\n'.format(
+ len(_lr1dfa.states),
+ ', '.join([str(i) for i in sorted(reductions)])
+ )
+ )
+ reduction = min(reductions)
+ if len(next_items) != 0:
+ j = bisect.bisect_right(self.precedences[0], terminal)
+ if j > 0 and terminal0 < self.precedences[0][j - 1]:
+ terminal0 = self.precedences[0][j - 1]
+ assert j < len(self.precedences[0])
+ if terminal1 > self.precedences[0][j]:
+ terminal1 = self.precedences[0][j]
+ shift_precedence = self.precedences[1][j]
+ reduce_precedence = self.precedences[3][
+ bisect.bisect_right(self.precedences[2], reduction)
+ ]
+ if shift_precedence == -1 or reduce_precedence == -1:
+ sys.stderr.write(
+ 'state {0:d} shift/reduce conflict: {1:d} vs {2:d}\n'.format(
+ len(_lr1dfa.states),
+ terminal,
+ reduction
+ )
+ )
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ elif shift_precedence > reduce_precedence:
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ elif shift_precedence < reduce_precedence:
+ action = reduction * 2 + 1 # reduce
+ else:
+ associativity = self.associativities[shift_precedence]
+ if associativity == LR1.ASSOCIATIVITY_RIGHT:
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ elif associativity == LR1.ASSOCIATIVITY_LEFT:
+ action = reduction * 2 + 1 # reduce
+ elif associativity == LR1.ASSOCIATIVITY_NON: # run time error
+ action = -1
+ else:
+ assert False # not specified (compile time error)
+ else:
+ action = reduction * 2 + 1 # reduce
+ elif len(next_items) != 0:
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ else:
+ action = -1
+ state_desc[0].append(terminal1)
+ state_desc[1].append(action)
+ terminal = terminal1
+
+ nonterminal = 0
+ while nonterminal < len(self.productions):
+ next_items, next_item_to_index, nonterminal0, nonterminal1 = (
+ self.lookahead_item_set_goto(items, nonterminal)
+ )
+ assert nonterminal0 == nonterminal and nonterminal1 > nonterminal
+ if len(next_items) != 0:
+ goto = add_state(next_items, next_item_to_index)
+ else:
+ goto = -1
+ state_desc[2].append(nonterminal1)
+ state_desc[3].append(goto)
+ nonterminal = nonterminal1
+
+ _lr1dfa.states.append(state_desc)
+ return _lr1dfa
+
+ def to_lalr1(self):
+ _lr1dfa = lr1dfa.LR1DFA(
+ [],
+ [
+ (len(symbols), ref_data)
+ for symbols, _, ref_data in self.productions
+ ],
+ self.n_terminals,
+ self.eof_terminal
+ )
+
+ items = [(0, 0, [self.eof_terminal, self.eof_terminal + 1])]
+ item_to_index = {(0, 0): 0}
+ self.lookahead_item_set_closure(items, item_to_index)
+
+ items = sorted(items)
+ key = tuple((i, j) for i, j, _ in items) # ignore lookahead
+ state_to_items = [items]
+ items_to_state = {key: 0}
+
+ in_queue = [True]
+ queue = [0]
+
+ qhead = 0
+ while qhead < len(queue):
+ i = queue[qhead]
+ in_queue[i] = False
+ items = state_to_items[i]
+ state_desc = ([], [], [], [])
+
+ def add_state(next_items, next_item_to_index):
+ self.lookahead_item_set_closure(next_items, next_item_to_index)
+ new_items = sorted(next_items)
+ key = tuple((i, j) for i, j, _ in new_items) # ignore lookahead
+ if key in items_to_state:
+ state = items_to_state[key]
+ state_items = state_to_items[state]
+ for i in range(len(new_items)):
+ j, k, lookahead_set = new_items[i]
+ lookahead_set = bisect_set.bisect_set_or(lookahead_set, state_items[i][2])
+ if lookahead_set != state_items[i][2]:
+ state_items[i] = (j, k, lookahead_set)
+ if not in_queue[state]:
+ in_queue[state] = True
+ queue.append(state)
+ else:
+ state = len(state_to_items)
+ state_to_items.append(new_items)
+ items_to_state[key] = state
+ in_queue.append(True)
+ queue.append(state)
+ return state
+
+ terminal = 0
+ while terminal < self.n_terminals:
+ next_items, next_item_to_index, reductions, terminal0, terminal1 = (
+ self.lookahead_item_set_action(items, terminal)
+ )
+ assert terminal0 == terminal and terminal1 > terminal
+ if len(reductions) != 0:
+ if len(reductions) != 1:
+ sys.stderr.write(
+ 'state {0:d} reduce/reduce conflict: {1:s}\n'.format(
+ len(_lr1dfa.states),
+ ', '.join([str(i) for i in sorted(reductions)])
+ )
+ )
+ reduction = min(reductions)
+ if len(next_items) != 0:
+ j = bisect.bisect_right(self.precedences[0], terminal)
+ if j > 0 and terminal0 < self.precedences[0][j - 1]:
+ terminal0 = self.precedences[0][j - 1]
+ assert j < len(self.precedences[0])
+ if terminal1 > self.precedences[0][j]:
+ terminal1 = self.precedences[0][j]
+ shift_precedence = self.precedences[1][j]
+ reduce_precedence = self.precedences[3][
+ bisect.bisect_right(self.precedences[2], reduction)
+ ]
+ if shift_precedence == -1 or reduce_precedence == -1:
+ sys.stderr.write(
+ 'state {0:d} shift/reduce conflict: {1:d} vs {2:d}\n'.format(
+ i,
+ terminal,
+ reduction
+ )
+ )
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ elif shift_precedence > reduce_precedence:
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ elif shift_precedence < reduce_precedence:
+ action = reduction * 2 + 1 # reduce
+ else:
+ associativity = self.associativities[shift_precedence]
+ if associativity == LR1.ASSOCIATIVITY_RIGHT:
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ elif associativity == LR1.ASSOCIATIVITY_LEFT:
+ action = reduction * 2 + 1 # reduce
+ elif associativity == LR1.ASSOCIATIVITY_NON: # run time error
+ action = -1
+ else:
+ assert False # not specified (compile time error)
+ else:
+ action = reduction * 2 + 1 # reduce
+ elif len(next_items) != 0:
+ action = add_state(next_items, next_item_to_index) * 2 # shift
+ else:
+ action = -1
+ state_desc[0].append(terminal1)
+ state_desc[1].append(action)
+ terminal = terminal1
+
+ nonterminal = 0
+ while nonterminal < len(self.productions):
+ next_items, next_item_to_index, nonterminal0, nonterminal1 = (
+ self.lookahead_item_set_goto(items, nonterminal)
+ )
+ assert nonterminal0 == nonterminal and nonterminal1 > nonterminal
+ if len(next_items) != 0:
+ goto = add_state(next_items, next_item_to_index)
+ else:
+ goto = -1
+ state_desc[2].append(nonterminal1)
+ state_desc[3].append(goto)
+ nonterminal = nonterminal1
+
+ if i < len(_lr1dfa.states):
+ _lr1dfa.states[i] = state_desc
+ else:
+ _lr1dfa.states.append(state_desc)
+ qhead += 1
+ return _lr1dfa
+
+ def __repr__(self):
+ return 'lr1.LR1({0:s}, {1:s}, {2:s}, {3:d}, {4:d})'.format(
+ repr(self.productions),
+ repr(self.precedences),
+ repr(self.associativities),
+ self.n_terminals,
+ self.eof_terminal
+ )
+
+
--- /dev/null
+import bisect
+import element
+import work
+import sys
+
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+class LR1DFA:
+ def __init__(
+ self,
+ states = [],
+ productions = [],
+ n_terminals = n_characters + 1,
+ eof_terminal = n_characters
+ ):
+ # states: list of state_desc
+ # state_desc: (terminal breaks, actions, nonterminal breaks, gotos)
+ # action: shift = new state * 2, reduce = production * 2 + 1, error = -1
+ # goto: reduce = production, error = -1 (but error can't really happen)
+ # productions: list of production
+ # production: (len(symbols), ref_data)
+ # len(symbols): how many states to pop stack to reduce this production
+ # ref_data: can be anything for caller's use, usually list of group_bound
+ # group_bound: (start_index, end_index, tag, kwargs)
+ # where start_index, end_index are indices into list of character_set,
+ # and tag, kwargs will be passed to apply_markup() hence factory(),
+ # noting that markup has to be applied in reverse order of the list
+ # n_terminals: offset to apply to productions[] index to get symbol
+ # (character set code), also symbol for productions[0] = start production
+ # eof_terminal: usually == n_terminals - 1 (must be valid terminal value)
+ self.states = states
+ self.productions = productions
+ self.n_terminals = n_terminals
+ self.eof_terminal = eof_terminal
+
+ def parse_text(self, text, i):
+ state = 0
+ value_stack = []
+ state_stack = []
+ lookahead_character = ord(text[i]) if i < len(text) else self.eof_terminal
+ while True:
+ value_stack.append(i)
+ state_stack.append(state)
+ action = self.states[state][1][
+ bisect.bisect_right(self.states[state][0], lookahead_character)
+ ]
+ if action == -1:
+ raise Exception(
+ 'syntax error at {0:d}: {1:s}'.format(i, text[i:])
+ )
+ if (action & 1) == 0:
+ state = action >> 1
+ i += 1
+ lookahead_character = ord(text[i]) if i < len(text) else self.eof_terminal
+ else:
+ reduce = action >> 1
+ len_symbols, ref_data = self.productions[reduce]
+ base = len(value_stack) - len_symbols - 1
+ for j in range(len(ref_data) - 1, -1, -1):
+ k, l, tag, _ = ref_data[j]
+ k += base
+ if l != 1:
+ value_stack[k + 1:k + l + 1] = [value_stack[k + l]]
+ sys.stdout.write(
+ 'text \'{0:s}\' tag \'{1:s}\'\n'.format(
+ text[value_stack[k]:value_stack[k + 1]],
+ tag
+ )
+ )
+ del value_stack[base + 1:]
+ del state_stack[base + 1:]
+ if reduce == 0:
+ assert base == 0
+ return
+ state = self.states[state_stack[-1]][3][
+ bisect.bisect_right(self.states[state_stack[-1]][2], reduce)
+ ]
+ assert state != -1
+
+ def parse_yychunk(self, root, pos, off, factory, yychunk_iter):
+ if pos < 0:
+ pos, off = element.to_start_relative(root, pos, off)
+
+ state = 0
+ value_stack = []
+ state_stack = []
+ text = element.get_text(root, pos)
+ while off >= len(text):
+ if pos < len(root):
+ pos += 1
+ off = 0
+ else:
+ try:
+ next(yychunk_iter)
+ except StopIteration:
+ lookahead_character = self.eof_terminal
+ break
+ text = element.get_text(root, pos)
+ else:
+ lookahead_character = ord(text[off])
+ while True:
+ value_stack.append((pos, off))
+ state_stack.append(state)
+ action = self.states[state][1][
+ bisect.bisect_right(self.states[state][0], lookahead_character)
+ ]
+ #print('lookahead_character', lookahead_character, 'action', action)
+ if action == -1:
+ raise Exception(
+ 'syntax error at {0:d},{1:d}: {2:s}'.format(pos, off, text[off:])
+ )
+ if (action & 1) == 0:
+ state = action >> 1
+ off += 1
+ while off >= len(text):
+ if pos < len(root):
+ pos += 1
+ off = 0
+ else:
+ try:
+ next(yychunk_iter)
+ except StopIteration:
+ lookahead_character = self.eof_terminal
+ break
+ text = element.get_text(root, pos)
+ else:
+ lookahead_character = ord(text[off])
+ else:
+ reduce = action >> 1
+ len_symbols, ref_data = self.productions[reduce]
+ base = len(value_stack) - len_symbols - 1
+ end_relative = len(value_stack)
+ for j in range(len(ref_data) - 1, -1, -1):
+ k, l, tag, kwargs = ref_data[j]
+ k += base
+ assert k < end_relative
+ if l != 1:
+ value_stack[k + 1:k + l + 1] = [value_stack[k + l]]
+ end_relative = max(k + 1, end_relative + 1 - l)
+ while end_relative > k + 1:
+ end_relative -= 1
+ pos1, off1 = value_stack[end_relative]
+ value_stack[end_relative] = (
+ element.to_end_relative(root, pos1, off1)
+ )
+ pos0, off0 = value_stack[k]
+ pos1, off1 = value_stack[k + 1]
+ work.apply_markup(
+ root,
+ pos0,
+ off0,
+ pos1,
+ off1,
+ factory,
+ tag,
+ **kwargs
+ )
+ if end_relative < len(value_stack):
+ pos, off = value_stack[-1]
+ pos, off = element.to_start_relative(root, pos, off)
+ text = element.get_text(root, pos)
+ del value_stack[base + 1:]
+ del state_stack[base + 1:]
+ if reduce == 0:
+ assert base == 0
+ return
+ state = self.states[state_stack[-1]][3][
+ bisect.bisect_right(self.states[state_stack[-1]][2], reduce)
+ ]
+ assert state != -1
+
+ def yyparse(self, root, pos, off, factory, yylex_iter):
+ if pos < 0:
+ pos, off = element.to_start_relative(root, pos, off)
+
+ state = 0
+ value_stack = []
+ state_stack = []
+ try:
+ end_pos, end_off, lookahead_character = next(yylex_iter)
+ #if lookahead_character < 256:
+ # print('\'{0:s}\''.format(chr(lookahead_character)))
+ #else:
+ # print(['IDENTIFIER', 'I_CONSTANT', 'F_CONSTANT', 'STRING_LITERAL', 'FUNC_NAME', 'SIZEOF', 'PTR_OP', 'INC_OP', 'DEC_OP', 'LEFT_OP', 'RIGHT_OP', 'LE_OP', 'GE_OP', 'EQ_OP', 'NE_OP', 'AND_OP', 'OR_OP', 'MUL_ASSIGN', 'DIV_ASSIGN', 'MOD_ASSIGN', 'ADD_ASSIGN', 'SUB_ASSIGN', 'LEFT_ASSIGN', 'RIGHT_ASSIGN', 'AND_ASSIGN', 'XOR_ASSIGN', 'OR_ASSIGN', 'TYPEDEF_NAME', 'ENUMERATION_CONSTANT', 'TYPEDEF', 'EXTERN', 'STATIC', 'AUTO', 'REGISTER', 'INLINE', 'CONST', 'RESTRICT', 'VOLATILE', 'BOOL', 'CHAR', 'SHORT', 'INT', 'LONG', 'SIGNED', 'UNSIGNED', 'FLOAT', 'DOUBLE', 'VOID', 'COMPLEX', 'IMAGINARY', 'STRUCT', 'UNION', 'ENUM', 'ELLIPSIS', 'CASE', 'DEFAULT', 'IF', 'ELSE', 'SWITCH', 'WHILE', 'DO', 'FOR', 'GOTO', 'CONTINUE', 'BREAK', 'RETURN', 'ALIGNAS', 'ALIGNOF', 'ATOMIC', 'GENERIC', 'NORETURN', 'STATIC_ASSERT', 'THREAD_LOCAL'][lookahead_character - 258])
+ except StopIteration:
+ lookahead_character = self.eof_terminal
+ end_pos, end_off = element.to_end_relative(root, pos, off)
+ while True:
+ value_stack.append((pos, off))
+ state_stack.append(state)
+ action = self.states[state][1][
+ bisect.bisect_right(self.states[state][0], lookahead_character)
+ ]
+ #print('lookahead_character', lookahead_character, 'action', action)
+ if action == -1:
+ raise Exception(
+ 'syntax error at {0:d},{1:d}: {2:d}'.format(pos, off, lookahead_character)
+ )
+ if (action & 1) == 0:
+ state = action >> 1
+ pos, off = element.to_start_relative(root, end_pos, end_off)
+ try:
+ end_pos, end_off, lookahead_character = next(yylex_iter)
+ #if lookahead_character < 256:
+ # print('\'{0:s}\''.format(chr(lookahead_character)))
+ #else:
+ # print(['IDENTIFIER', 'I_CONSTANT', 'F_CONSTANT', 'STRING_LITERAL', 'FUNC_NAME', 'SIZEOF', 'PTR_OP', 'INC_OP', 'DEC_OP', 'LEFT_OP', 'RIGHT_OP', 'LE_OP', 'GE_OP', 'EQ_OP', 'NE_OP', 'AND_OP', 'OR_OP', 'MUL_ASSIGN', 'DIV_ASSIGN', 'MOD_ASSIGN', 'ADD_ASSIGN', 'SUB_ASSIGN', 'LEFT_ASSIGN', 'RIGHT_ASSIGN', 'AND_ASSIGN', 'XOR_ASSIGN', 'OR_ASSIGN', 'TYPEDEF_NAME', 'ENUMERATION_CONSTANT', 'TYPEDEF', 'EXTERN', 'STATIC', 'AUTO', 'REGISTER', 'INLINE', 'CONST', 'RESTRICT', 'VOLATILE', 'BOOL', 'CHAR', 'SHORT', 'INT', 'LONG', 'SIGNED', 'UNSIGNED', 'FLOAT', 'DOUBLE', 'VOID', 'COMPLEX', 'IMAGINARY', 'STRUCT', 'UNION', 'ENUM', 'ELLIPSIS', 'CASE', 'DEFAULT', 'IF', 'ELSE', 'SWITCH', 'WHILE', 'DO', 'FOR', 'GOTO', 'CONTINUE', 'BREAK', 'RETURN', 'ALIGNAS', 'ALIGNOF', 'ATOMIC', 'GENERIC', 'NORETURN', 'STATIC_ASSERT', 'THREAD_LOCAL'][lookahead_character - 258])
+ except StopIteration:
+ lookahead_character = self.eof_terminal
+ #end_pos, end_off = element.to_end_relative(root, pos, off)
+ else:
+ reduce = action >> 1
+ len_symbols, ref_data = self.productions[reduce]
+ base = len(value_stack) - len_symbols - 1
+ end_relative = len(value_stack)
+ for j in range(len(ref_data) - 1, -1, -1):
+ k, l, tag, kwargs = ref_data[j]
+ k += base
+ assert k < end_relative
+ if l != 1:
+ value_stack[k + 1:k + l + 1] = [value_stack[k + l]]
+ end_relative = max(k + 1, end_relative + 1 - l)
+ while end_relative > k + 1:
+ end_relative -= 1
+ pos1, off1 = value_stack[end_relative]
+ value_stack[end_relative] = (
+ element.to_end_relative(root, pos1, off1)
+ )
+ pos0, off0 = value_stack[k]
+ pos1, off1 = value_stack[k + 1]
+ work.apply_markup(
+ root,
+ pos0,
+ off0,
+ pos1,
+ off1,
+ factory,
+ tag,
+ **kwargs
+ )
+ if end_relative < len(value_stack):
+ pos, off = value_stack[-1]
+ pos, off = element.to_start_relative(root, pos, off)
+ del value_stack[base + 1:]
+ del state_stack[base + 1:]
+ if reduce == 0:
+ assert base == 0
+ return
+ state = self.states[state_stack[-1]][3][
+ bisect.bisect_right(self.states[state_stack[-1]][2], reduce)
+ ]
+ assert state != -1
+
+ def __repr__(self):
+ return 'lr1dfa.LR1DFA({0:s}, {1:s}, {2:d}, {3:d})'.format(
+ repr(self.states),
+ repr(self.productions),
+ self.n_terminals,
+ self.eof_terminal
+ )
--- /dev/null
+s/\([^^I]*\)^I\+\(.*\)/text = text.replace('{\1}\2', '{\1}')/
--- /dev/null
+#!/usr/bin/env python3
+
+import element
+import nfa
+import regex
+import sys
+import wrap_repr
+
+if len(sys.argv) < 2:
+ sys.stdout.write(
+ 'usage: {0:s} regex.xml [tokens.py] <yylex_template.py'.format(
+ sys.argv[0]
+ )
+ )
+ sys.exit(1)
+
+with open(sys.argv[1]) as fin:
+ _regex = element.deserialize(fin, regex.factory)
+
+group_name_to_token = {}
+for i in range(0x100):
+ group_name_to_token['X_{0:02X}'.format(i)] = i
+if len(sys.argv) >= 3:
+ with open(sys.argv[2]) as fin:
+ line = fin.readline()
+ while len(line):
+ fields = line.split()
+ assert fields[1] == '='
+ group_name_to_token[fields[0]] = int(fields[2])
+ line = fin.readline()
+
+line = sys.stdin.readline()
+while len(line):
+ if line[:14] == '# GENERATE DFA':
+ groups = []
+ _regex.to_groups(groups)
+ _nfa = nfa.NFA(groups)
+ _regex.add_to_nfa(_nfa)
+ _dfa = _nfa.to_dfa()
+ sys.stdout.write(
+ '''# GENERATE DFA BEGIN
+{0:s}# GENERATE END
+'''.format(
+ wrap_repr.wrap_repr('_dfa = {0:s}'.format(repr(_dfa)), 79)
+ )
+ )
+ if line[14:20] == ' BEGIN':
+ line = sys.stdin.readline()
+ while len(line):
+ if line[:14] == '# GENERATE END':
+ break
+ line = sys.stdin.readline()
+ else:
+ assert False
+ elif line[:17] == '# GENERATE TOKENS':
+ groups = []
+ _regex.to_groups(groups)
+ tokens = [group_name_to_token.get(i, -1) for i, _ in groups]
+ sys.stdout.write(
+ '''# GENERATE TOKENS BEGIN
+{0:s}# GENERATE END
+'''.format(
+ wrap_repr.wrap_repr('tokens = {0:s}'.format(repr(tokens)), 79)
+ )
+ )
+ if line[17:23] == ' BEGIN':
+ line = sys.stdin.readline()
+ while len(line):
+ if line[:14] == '# GENERATE END':
+ break
+ line = sys.stdin.readline()
+ else:
+ assert False
+ else:
+ sys.stdout.write(line)
+ line = sys.stdin.readline()
--- /dev/null
+#!/usr/bin/env python3
+
+import element
+import grammar
+import sys
+import wrap_repr
+
+if len(sys.argv) < 2:
+ sys.stdout.write(
+ 'usage: {0:s} grammar.xml tokens.py <yyparse_template.py'.format(
+ sys.argv[0]
+ )
+ )
+ sys.exit(1)
+
+with open(sys.argv[1]) as fin:
+ _grammar = element.deserialize(fin, grammar.factory)
+
+line = sys.stdin.readline()
+while len(line):
+ if line[:15] == '# GENERATE CLR1':
+ clr1 = _grammar.to_lr1().to_clr1()
+ sys.stdout.write(
+ '''# GENERATE CLR1 BEGIN
+{0:s}# GENERATE END
+'''.format(
+ wrap_repr.wrap_repr('clr1 = {0:s}'.format(repr(clr1)), 79)
+ )
+ )
+ if line[15:21] == ' BEGIN':
+ line = sys.stdin.readline()
+ while len(line):
+ if line[:14] == '# GENERATE END':
+ break
+ line = sys.stdin.readline()
+ else:
+ assert False
+ if line[:16] == '# GENERATE LALR1':
+ lalr1 = _grammar.to_lr1().to_lalr1()
+ sys.stdout.write(
+ '''# GENERATE LALR1 BEGIN
+{0:s}# GENERATE END
+'''.format(
+ wrap_repr.wrap_repr('lalr1 = {0:s}'.format(repr(lalr1)), 79)
+ )
+ )
+ if line[16:22] == ' BEGIN':
+ line = sys.stdin.readline()
+ while len(line):
+ if line[:14] == '# GENERATE END':
+ break
+ line = sys.stdin.readline()
+ else:
+ assert False
+ else:
+ sys.stdout.write(line)
+ line = sys.stdin.readline()
--- /dev/null
+#!/bin/sh
+../bootstrap_flex.git/src/flex tests/scan.l 2>tests/scan.l.xml
+./l_to_python.py <tests/scan.l.xml >a
+./xml_to_l.py <a >b
+diff --unified --ignore-space-change tests/scan.l b
--- /dev/null
+import bisect
+import dfa
+import element
+
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+class NFA:
+ # state_desc classes:
+ # (STATE_CHARACTER, character_set, next_state)
+ # (STATE_OR, next_state0, next_state1)
+ # (STATE_AND, next_state0, next_state1)
+ # (STATE_JOIN0,)
+ # (STATE_JOIN1, next_state)
+ # (STATE_MARK, mark_value, next_state)
+
+ STATE_CHARACTER = 0
+ STATE_OR = 1
+ STATE_AND = 2
+ STATE_JOIN0 = 3
+ STATE_JOIN1 = 4
+ STATE_MARK = 5
+ join0_state = (STATE_JOIN0,)
+
+ # multistate classes:
+ # (MULTISTATE_ACCEPT, 1) accept, occupies one thread in list
+ # (MULTISTATE_AND, n, state, child) and, occupies n threads in list
+ # (MULTISTATE_OR, n, child0, child1)
+ # n = sum of n from child states, that is, multistate[1] is the number of
+ # (MULTISTATE_ACCEPT, 1) leaf states ultimately reachable from this subtree
+
+ MULTISTATE_ACCEPT = 0
+ MULTISTATE_AND = 1
+ MULTISTATE_OR = 2
+ accept_multistate = (MULTISTATE_ACCEPT, 1)
+
+ def __init__(
+ self,
+ groups = [],
+ states = [(STATE_CHARACTER, [0, n_characters], 0)],
+ start_state = [] # can have multiple NFAs in same container
+ ):
+ # groups: list of group_desc
+ # group_desc: (tag, kwargs)
+ # tag, kwargs will be passed to apply_markup() hence factory()
+ self.groups = groups
+ self.states = states
+ self.start_state = start_state
+
+ def multistate_next(self, root_multistate, character):
+ # the deduplication works as effectively a second pass which goes
+ # over the multistate tree in pre-order, looking for OR-disjunctions
+ # of any depth and configuration, e.g. (a OR b) or (c OR d), and
+ # collecting the subexpressions e.g. a, b, c OR b, c, d, c OR d, and
+ # failing any subexpression that's previously occurred in pre-order
+ # (children of AND-conjunctions get a fresh empty subexpression set)
+
+ # unfortunately it can't be done as a second pass literally, because
+ # we have to generate the transition list, thus we need to know if a
+ # subexpression is going to be failed, so we can delete it's threads
+
+ # therefore the deduplication is tacked onto the end of the building
+ # process, examining each built node just before the builder returns,
+ # if already in the subexpression set we will rewrite the transition
+ # list produced by the recursive calls, otherwise we will add it in
+
+ # the problem is determining the subexpression set to pass into any
+ # recursive calls, the caller's set will be sent unchanged by cases
+ # that return the result unchanged or add an OR-disjuction, an empty
+ # set will be sent by cases that add an AND-conjuction to the result
+
+ # if we have added something to the node built by a recursive call,
+ # we'll fall into the deduplication logic, otherwise just return it
+
+ def advance1(multistate, join_count, done_multistates):
+ # modifies nonlocal: transition
+ assert multistate[0] == NFA.MULTISTATE_AND
+ _, _, state, child = multistate
+ if state == 0:
+ # note that if we reach the accepting state, we must be a top-level
+ # expression, and could not be part of an AND-conjunction (because
+ # AND-conjunction terms always go to a join0 or join1 state first),
+ # we remove ourselves to indicate to scanner that match is complete
+ assert join_count == 0
+ assert child == NFA.accept_multistate
+ return advance(child, 0, done_multistates)
+ state_desc = self.states[state]
+ if state_desc[0] == NFA.STATE_CHARACTER:
+ if join_count != 0:
+ transition.append((dfa.DFA.TRANSITION_POP, child[1]))
+ return None
+ len_transition = len(transition)
+ child = advance(child, 0, set())
+ if child is None:
+ return None
+ result = (NFA.MULTISTATE_AND, child[1], state, child)
+ elif state_desc[0] == NFA.STATE_OR:
+ _, next_state0, next_state1 = state_desc
+ len_transition = len(transition)
+ transition.append((dfa.DFA.TRANSITION_DUP, child[1]))
+ child0 = advance1(
+ (NFA.MULTISTATE_AND, child[1], next_state0, child),
+ join_count,
+ done_multistates
+ )
+ child1 = advance1(
+ (NFA.MULTISTATE_AND, child[1], next_state1, child),
+ join_count,
+ done_multistates
+ )
+ if child0 is None:
+ return child1
+ if child1 is None:
+ return child0
+ result = (NFA.MULTISTATE_OR, child0[1] + child1[1], child0, child1)
+ elif state_desc[0] == NFA.STATE_AND:
+ _, next_state0, next_state1 = state_desc
+ return advance1(
+ (
+ NFA.MULTISTATE_AND,
+ child[1],
+ next_state0,
+ (NFA.MULTISTATE_AND, child[1], next_state1, child)
+ ),
+ join_count,
+ done_multistates
+ )
+ elif state_desc[0] == NFA.STATE_JOIN0:
+ return advance(child, join_count + 1, done_multistates)
+ elif state_desc[0] == NFA.STATE_JOIN1:
+ _, next_state = state_desc
+ if join_count == 0:
+ transition.append((dfa.DFA.TRANSITION_POP, child[1]))
+ return None
+ return advance1(
+ (NFA.MULTISTATE_AND, child[1], next_state, child),
+ join_count - 1,
+ done_multistates
+ )
+ elif state_desc[0] == NFA.STATE_MARK:
+ _, mark_value, next_state = state_desc
+ transition.append((dfa.DFA.TRANSITION_MARK, child[1], mark_value))
+ return advance1(
+ (NFA.MULTISTATE_AND, child[1], next_state, child),
+ join_count,
+ done_multistates
+ )
+ else:
+ assert False
+ if result in done_multistates:
+ transition[len_transition:] = [(dfa.DFA.TRANSITION_POP, multistate[1])]
+ return None
+ done_multistates.add(result)
+ return result
+
+ def advance(multistate, join_count, done_multistates):
+ nonlocal character0, character1 # modifies nonlocal: transition
+ if multistate[0] == NFA.MULTISTATE_ACCEPT:
+ assert join_count == 0
+ len_transition = len(transition)
+ transition.append((dfa.DFA.TRANSITION_MOVE, 1))
+ result = NFA.accept_multistate # takes no arguments so use static one
+ elif multistate[0] == NFA.MULTISTATE_AND:
+ if character >= 0:
+ _, _, state, child = multistate
+ state_desc = self.states[state]
+ assert state_desc[0] == NFA.STATE_CHARACTER
+ _, character_set, next_state = state_desc
+ k = bisect.bisect_right(character_set, character)
+ if k > 0 and character0 < character_set[k - 1]:
+ character0 = character_set[k - 1]
+ if k < len(character_set) and character1 > character_set[k]:
+ character1 = character_set[k]
+ if (k & 1) == 0:
+ transition.append((dfa.DFA.TRANSITION_POP, child[1]))
+ return None
+ multistate = (NFA.MULTISTATE_AND, child[1], next_state, child)
+ return advance1(multistate, join_count, done_multistates)
+ elif multistate[0] == NFA.MULTISTATE_OR:
+ _, _, child0, child1 = multistate
+ len_transition = len(transition)
+ child0 = advance(child0, join_count, done_multistates)
+ child1 = advance(child1, join_count, done_multistates)
+ if child0 is None:
+ return child1
+ if child1 is None:
+ return child0
+ result = (NFA.MULTISTATE_OR, child0[1] + child1[1], child0, child1)
+ else:
+ assert False
+ if result in done_multistates:
+ transition[len_transition:] = [(dfa.DFA.TRANSITION_POP, multistate[1])]
+ return None
+ done_multistates.add(result)
+ return result
+
+ transition = []
+ character0 = 0
+ character1 = n_characters
+ root_multistate = advance(root_multistate, 0, set())
+ return root_multistate, transition, character0, character1
+
+ def multistate_accept(root_multistate):
+ i = 0
+ def accept(multistate):
+ nonlocal i
+ if multistate[0] == NFA.MULTISTATE_ACCEPT:
+ return True
+ if multistate[0] == NFA.MULTISTATE_AND:
+ _, _, _, child = multistate
+ i += child[1]
+ return False
+ if multistate[0] == NFA.MULTISTATE_OR:
+ _, _, child0, child1 = multistate
+ return accept(child0) or accept(child1)
+ assert False
+ return i if accept(root_multistate) else -1
+
+ def match_text(self, text, i, start_index = 0):
+ def transit(transition):
+ nonlocal threads0, threads1, prefix_slop # note: also uses i
+ j = prefix_slop
+ for trans in transition:
+ if trans[0] == dfa.DFA.TRANSITION_POP:
+ j += trans[1]
+ elif trans[0] == dfa.DFA.TRANSITION_DUP:
+ while j < trans[1]:
+ threads0[:0] = [None] * prefix_slop
+ threads1[:0] = [None] * prefix_slop
+ j += prefix_slop
+ prefix_slop *= 2
+ threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
+ j -= trans[1]
+ elif trans[0] == dfa.DFA.TRANSITION_MARK:
+ threads0[j:j + trans[1]] = [
+ (i, trans[2], thread)
+ for thread in threads0[j:j + trans[1]]
+ ]
+ elif trans[0] == dfa.DFA.TRANSITION_MOVE:
+ threads1.extend(threads0[j:j + trans[1]])
+ j += trans[1]
+ #elif trans[0] == dfa.DFA.TRANSITION_DEL:
+ # del threads1[-trans[1]:]
+ else:
+ assert False
+ assert j == len(threads0)
+ threads0, threads1 = threads1, threads0
+ del threads1[prefix_slop:]
+
+ threads0 = [None, None]
+ threads1 = [None]
+ prefix_slop = 1
+
+ start_state = self.start_state[start_index]
+ if start_state == -1:
+ return None
+ next_multistate, transition, _, _ = self.multistate_next(
+ (NFA.MULTISTATE_AND, 1, start_state, NFA.accept_multistate),
+ -1
+ )
+ while next_multistate is not None:
+ transit(transition)
+ assert len(threads0) == prefix_slop + next_multistate[1]
+ if next_multistate == NFA.accept_multistate:
+ # there is only one match, which is complete
+ assert len(threads0) == prefix_slop + 1
+ return threads0[prefix_slop]
+ if i >= len(text):
+ # return best match we have, but not incomplete match
+ i = NFA.multistate_accept(next_multistate)
+ return (None if i == -1 else threads0[prefix_slop + i])
+ next_multistate, transition, _, _ = (
+ self.multistate_next(next_multistate, ord(text[i]))
+ )
+ i += 1
+ return None
+
+ def match_yychunk(self, root, pos, off, yychunk_iter, start_index = 0):
+ if pos < 0:
+ pos, off = element.to_start_relative(root, pos, off)
+
+ def transit(transition):
+ nonlocal threads0, threads1, prefix_slop # note: also uses pos, off
+ j = prefix_slop
+ for trans in transition:
+ if trans[0] == dfa.DFA.TRANSITION_POP:
+ j += trans[1]
+ elif trans[0] == dfa.DFA.TRANSITION_DUP:
+ while j < trans[1]:
+ threads0[:0] = [None] * prefix_slop
+ threads1[:0] = [None] * prefix_slop
+ j += prefix_slop
+ prefix_slop *= 2
+ threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
+ j -= trans[1]
+ elif trans[0] == dfa.DFA.TRANSITION_MARK:
+ threads0[j:j + trans[1]] = [
+ (pos, off, trans[2], thread)
+ for thread in threads0[j:j + trans[1]]
+ ]
+ elif trans[0] == dfa.DFA.TRANSITION_MOVE:
+ threads1.extend(threads0[j:j + trans[1]])
+ j += trans[1]
+ #elif trans[0] == dfa.DFA.TRANSITION_DEL:
+ # del threads1[-trans[1]:]
+ else:
+ assert False
+ assert j == len(threads0)
+ threads0, threads1 = threads1, threads0
+ del threads1[prefix_slop:]
+
+ threads0 = [None, None]
+ threads1 = [None]
+ prefix_slop = 1
+
+ start_state = self.start_state[start_index]
+ if start_state == -1:
+ return None
+ next_multistate, transition, _, _ = self.multistate_next(
+ (NFA.MULTISTATE_AND, 1, start_state, NFA.accept_multistate),
+ -1
+ )
+ text = element.get_text(root, pos)
+ while next_multistate is not None:
+ transit(transition)
+ assert len(threads0) == prefix_slop + next_multistate[1]
+ if next_multistate == NFA.accept_multistate:
+ # there is only one match, which is complete
+ assert len(threads0) == prefix_slop + 1
+ return threads0[prefix_slop]
+ while off >= len(text):
+ if pos < len(root):
+ pos += 1
+ off = 0
+ else:
+ try:
+ next(yychunk_iter)
+ except StopIteration:
+ # return best match we have, but not incomplete match
+ i = NFA.multistate_accept(next_multistate)
+ return (None if i == -1 else threads0[prefix_slop + i])
+ text = element.get_text(root, pos)
+ next_multistate, transition, _, _ = (
+ self.multistate_next(next_multistate, ord(text[off]))
+ )
+ off += 1
+ return None
+
+ def to_dfa(self):
+ _dfa = dfa.DFA(list(self.groups))
+
+ accept_key = (NFA.accept_multistate, ())
+ action_to_meaning = [accept_key]
+ meaning_to_action = {accept_key: 0}
+ state_to_meaning = [NFA.accept_multistate]
+ meaning_to_state = {NFA.accept_multistate: 0}
+
+ for start_state in self.start_state:
+ if start_state == -1:
+ start_action = -1
+ else:
+ next_multistate, transition, _, _ = self.multistate_next(
+ (NFA.MULTISTATE_AND, 1, start_state, NFA.accept_multistate),
+ -1
+ )
+ if next_multistate is None:
+ start_action = -1
+ else:
+ start_key = (next_multistate, tuple(transition))
+ start_action = len(action_to_meaning)
+ meaning_to_action[start_key] = start_action
+ action_to_meaning.append(start_key)
+ _dfa.start_action.append(start_action)
+
+ while len(_dfa.actions) < len(action_to_meaning):
+ next_multistate, transition = action_to_meaning[len(_dfa.actions)]
+ if next_multistate in meaning_to_state:
+ next_state = meaning_to_state[next_multistate]
+ else:
+ next_state = len(state_to_meaning)
+ state_to_meaning.append(next_multistate)
+ meaning_to_state[next_multistate] = next_state
+ _dfa.actions.append((next_state, list(transition)))
+
+ while len(_dfa.states) < len(state_to_meaning):
+ character = 0
+ multistate = state_to_meaning[len(_dfa.states)]
+ state_desc = ([], [], NFA.multistate_accept(multistate))
+ while character < n_characters:
+ next_multistate, transition, character0, character1 = self.multistate_next(
+ multistate,
+ character
+ )
+ assert character0 == character and character1 > character
+ if next_multistate is None:
+ action = -1
+ else:
+ # optimize transition (optional)
+ i = 0
+ j = 0
+ while i < len(transition):
+ if transition[i][0] == dfa.DFA.TRANSITION_POP:
+ n = transition[i][1]
+ i += 1
+ while (
+ i < len(transition) and
+ transition[i][0] == dfa.DFA.TRANSITION_POP
+ ):
+ n += transition[i][1]
+ i += 1
+ transition[j] = (dfa.DFA.TRANSITION_POP, n)
+ elif transition[i][0] == dfa.DFA.TRANSITION_MOVE:
+ n = transition[i][1]
+ i += 1
+ while (
+ i < len(transition) and
+ transition[i][0] == dfa.DFA.TRANSITION_MOVE
+ ):
+ n += transition[i][1]
+ i += 1
+ transition[j] = (dfa.DFA.TRANSITION_MOVE, n)
+ else:
+ transition[j] = transition[i]
+ i += 1
+ j += 1
+ del transition[j:]
+ # end optimize transition
+ key = (next_multistate, tuple(transition))
+ if key in meaning_to_action:
+ action = meaning_to_action[key]
+ else:
+ action = len(action_to_meaning)
+ action_to_meaning.append(key)
+ meaning_to_action[key] = action
+ state_desc[0].append(character1)
+ state_desc[1].append(action)
+ character = character1
+ _dfa.states.append(state_desc)
+ return _dfa
+
+ def __repr__(self):
+ return 'nfa.NFA({0:s}, {1:s}, {2:s})'.format(
+ repr(self.groups),
+ repr(self.states),
+ repr(self.start_state)
+ )
--- /dev/null
+import bisect_set
+import element
+import nfa
+
+# defines the alphabet size, set this to 0x11000 for unicode
+n_characters = 0x100
+
+class Regex(element.Element):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'Regex',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Regex if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.Regex({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ for i in self:
+ group_index = i.post_process(group_index) #, rule_name_to_character_set)
+ return group_index
+ def to_groups(self, groups):
+ for i in self:
+ i.to_groups(groups)
+ def to_nfa_state(self, _nfa, next_state):
+ raise NotImplementedException
+ def add_to_nfa(self, _nfa):
+ _nfa.start_state.append(self.to_nfa_state(_nfa, 0))
+ #def to_lr1_symbols(self, n_terminals, symbols, lookaheads, group_bounds):
+ # group_count = 0
+ # for i in self:
+ # group_count += (
+ # i.to_lr1_symbols(n_terminals, symbols, lookaheads, group_bounds)
+ # )
+ # return group_count # count of groups or ungrouped characters
+
+class RegexNone(Regex):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexNone',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexNone if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexNone({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def to_nfa_state(self, _nfa, next_state):
+ return -1
+
+class RegexEmpty(Regex):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexEmpty',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexEmpty if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexEmpty({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def to_nfa_state(self, _nfa, next_state):
+ return next_state
+
+class RegexCharacter(Regex):
+ # GENERATE ELEMENT(list(int) character_set) BEGIN
+ def __init__(
+ self,
+ tag = 'RegexCharacter',
+ attrib = {},
+ text = '',
+ children = [],
+ character_set = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.character_set = (
+ [element.deserialize_int(i) for i in character_set.split()]
+ if isinstance(character_set, str) else
+ character_set
+ )
+ def serialize(self, ref_list):
+ Regex.serialize(self, ref_list)
+ self.set(
+ 'character_set',
+ ' '.join([element.serialize_int(i) for i in self.character_set])
+ )
+ def deserialize(self, ref_list):
+ Regex.deserialize(self, ref_list)
+ self.character_set = [
+ element.deserialize_int(i)
+ for i in self.get('character_set', '').split()
+ ]
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexCharacter if factory is None else factory
+ )
+ result.character_set = self.character_set
+ return result
+ def repr_serialize(self, params):
+ Regex.repr_serialize(self, params)
+ if len(self.character_set):
+ params.append(
+ 'character_set = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self.character_set])
+ )
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexCharacter({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def to_nfa_state(self, _nfa, next_state):
+ new_state = len(_nfa.states)
+ _nfa.states.append((nfa.NFA.STATE_CHARACTER, self.character_set, next_state))
+ return new_state
+ #def to_lr1_symbols(self, n_terminals, symbols, lookaheads, group_bounds):
+ # terminal_set = []
+ # nonterminal_set = []
+ # i = 0
+ # while i < len(self.character_set):
+ # [j, k] = self.character_set[i:i + 2]
+ # if k > n_terminals:
+ # if j < n_terminals:
+ # terminal_set.extend([j, n_terminals])
+ # nonterminal_set.extend([0, k - n_terminals])
+ # i += 2
+ # while i < len(self.character_set):
+ # [j, k] = self.character_set[i:i + 2]
+ # nonterminal_set.extend([j - n_terminals, k - n_terminals])
+ # i += 2
+ # break
+ # terminal_set.extend([j, k])
+ # i += 2
+ # symbols.append((terminal_set, nonterminal_set))
+ # lookaheads.append(([], False)) # initial_set, can_be_empty
+ # return 1 # count of groups or ungrouped characters
+
+class RegexCharacterRange(RegexCharacter):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexCharacterRange',
+ attrib = {},
+ text = '',
+ children = [],
+ character_set = []
+ ):
+ RegexCharacter.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children,
+ character_set
+ )
+ def copy(self, factory = None):
+ result = RegexCharacter.copy(
+ self,
+ RegexCharacterRange if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexCharacterRange({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ group_index = RegexCharacter.post_process(self, group_index) #, rule_name_to_character_set)
+ self.character_set = [self[0].character_set[0], self[1].character_set[-1]]
+ return group_index
+
+class RegexCharacterOr(RegexCharacter):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexCharacterOr',
+ attrib = {},
+ text = '',
+ children = [],
+ character_set = []
+ ):
+ RegexCharacter.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children,
+ character_set
+ )
+ def copy(self, factory = None):
+ result = RegexCharacter.copy(
+ self,
+ RegexCharacterOr if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexCharacterOr({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ group_index = RegexCharacter.post_process(self, group_index) #, rule_name_to_character_set)
+ self.character_set = bisect_set.bisect_set_or(self[0].character_set, self[1].character_set)
+ return group_index
+
+class RegexCharacterAnd(RegexCharacter):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexCharacterAnd',
+ attrib = {},
+ text = '',
+ children = [],
+ character_set = []
+ ):
+ RegexCharacter.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children,
+ character_set
+ )
+ def copy(self, factory = None):
+ result = RegexCharacter.copy(
+ self,
+ RegexCharacterAnd if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexCharacterAnd({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ group_index = RegexCharacter.post_process(self, group_index) #, rule_name_to_character_set)
+ self.character_set = bisect_set.bisect_set_and(self[0].character_set, self[1].character_set)
+ return group_index
+
+class RegexCharacterNot(RegexCharacter):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexCharacterNot',
+ attrib = {},
+ text = '',
+ children = [],
+ character_set = []
+ ):
+ RegexCharacter.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children,
+ character_set
+ )
+ def copy(self, factory = None):
+ result = RegexCharacter.copy(
+ self,
+ RegexCharacterNot if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexCharacterNot({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ group_index = RegexCharacter.post_process(self, group_index) #, rule_name_to_character_set)
+ self.character_set = bisect_set.bisect_set_not(self[0].character_set)
+ return group_index
+
+#class RegexCharacterRule(RegexCharacter):
+# # GENERATE ELEMENT(str rule_name) BEGIN
+# def __init__(
+# self,
+# tag = 'RegexCharacterRule',
+# attrib = {},
+# text = '',
+# children = [],
+# character_set = [],
+# rule_name = ''
+# ):
+# RegexCharacter.__init__(
+# self,
+# tag,
+# attrib,
+# text,
+# children,
+# character_set
+# )
+# self.rule_name = rule_name
+# def serialize(self, ref_list, indent = 0):
+# RegexCharacter.serialize(self, ref_list, indent)
+# self.set('rule_name', element.serialize_str(self.rule_name))
+# def deserialize(self, ref_list):
+# RegexCharacter.deserialize(self, ref_list)
+# self.rule_name = element.deserialize_str(self.get('rule_name', ''))
+# def copy(self, factory = None):
+# result = RegexCharacter.copy(
+# self,
+# RegexCharacterRule if factory is None else factory
+# )
+# result.rule_name = self.rule_name
+# return result
+# def repr_serialize(self, params):
+# RegexCharacter.repr_serialize(self, params)
+# if self.rule_name != '':
+# params.append(
+# 'rule_name = {0:s}'.format(repr(self.rule_name))
+# )
+# def __repr__(self):
+# params = []
+# self.repr_serialize(params)
+# return 'regex.RegexCharacterRule({0:s})'.format(', '.join(params))
+# # GENERATE END
+# def post_process(self, group_index = 0, rule_name_to_character_set = None):
+# if rule_name_to_character_set is not None:
+# self.character_set = rule_name_to_character_set[self.rule_name]
+# return RegexCharacter.post_process(self, group_index, rule_name_to_character_set)
+
+class RegexOr(Regex):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexOr',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexOr if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexOr({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def to_nfa_state(self, _nfa, next_state):
+ child0_state = self[0].to_nfa_state(_nfa, next_state)
+ child1_state = self[1].to_nfa_state(_nfa, next_state)
+ if child0_state == -1:
+ return child1_state
+ if child1_state == -1:
+ return child0_state
+ new_state = len(_nfa.states)
+ _nfa.states.append((nfa.NFA.STATE_OR, child0_state, child1_state))
+ return new_state
+
+class RegexAnd(Regex):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexAnd',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexAnd if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexAnd({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def to_nfa_state(self, _nfa, next_state):
+ join0_state = len(_nfa.states)
+ _nfa.states.append(nfa.NFA.join0_state) # takes no arguments so use static one
+ join1_state = len(_nfa.states)
+ _nfa.states.append((nfa.NFA.STATE_JOIN1, next_state))
+ child0_state = self[0].to_nfa_state(_nfa, join0_state)
+ if child0_state == -1:
+ return -1
+ child1_state = self[1].to_nfa_state(_nfa, join1_state)
+ if child1_state == -1:
+ return -1
+ new_state = len(_nfa.states)
+ _nfa.states.append((nfa.NFA.STATE_AND, child0_state, child1_state))
+ return new_state
+
+class RegexSequence(Regex):
+ # GENERATE ELEMENT() BEGIN
+ def __init__(
+ self,
+ tag = 'RegexSequence',
+ attrib = {},
+ text = '',
+ children = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexSequence if factory is None else factory
+ )
+ return result
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexSequence({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def to_nfa_state(self, _nfa, next_state):
+ child1_state = self[1].to_nfa_state(_nfa, next_state)
+ if child1_state == -1:
+ return -1
+ return self[0].to_nfa_state(_nfa, child1_state)
+
+class RegexRepeat(Regex):
+ # GENERATE ELEMENT(int count0, int count1, bool non_greedy) BEGIN
+ def __init__(
+ self,
+ tag = 'RegexRepeat',
+ attrib = {},
+ text = '',
+ children = [],
+ count0 = -1,
+ count1 = -1,
+ non_greedy = False
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.count0 = (
+ element.deserialize_int(count0)
+ if isinstance(count0, str) else
+ count0
+ )
+ self.count1 = (
+ element.deserialize_int(count1)
+ if isinstance(count1, str) else
+ count1
+ )
+ self.non_greedy = (
+ element.deserialize_bool(non_greedy)
+ if isinstance(non_greedy, str) else
+ non_greedy
+ )
+ def serialize(self, ref_list):
+ Regex.serialize(self, ref_list)
+ self.set('count0', element.serialize_int(self.count0))
+ self.set('count1', element.serialize_int(self.count1))
+ self.set('non_greedy', element.serialize_bool(self.non_greedy))
+ def deserialize(self, ref_list):
+ Regex.deserialize(self, ref_list)
+ self.count0 = element.deserialize_int(self.get('count0', '-1'))
+ self.count1 = element.deserialize_int(self.get('count1', '-1'))
+ self.non_greedy = element.deserialize_bool(self.get('non_greedy', 'false'))
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexRepeat if factory is None else factory
+ )
+ result.count0 = self.count0
+ result.count1 = self.count1
+ result.non_greedy = self.non_greedy
+ return result
+ def repr_serialize(self, params):
+ Regex.repr_serialize(self, params)
+ if self.count0 != -1:
+ params.append(
+ 'count0 = {0:s}'.format(repr(self.count0))
+ )
+ if self.count1 != -1:
+ params.append(
+ 'count1 = {0:s}'.format(repr(self.count1))
+ )
+ if self.non_greedy != False:
+ params.append(
+ 'non_greedy = {0:s}'.format(repr(self.non_greedy))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexRepeat({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ # total hack which will be done in a Python action in future
+ if len(self) >= 2:
+ assert self[1].tag == 'Number'
+ self.count0 = int(self[1].text)
+ if len(self) >= 3:
+ assert self[2].tag == 'Number'
+ self.count1 = int(self[2].text)
+ else:
+ self.count1 = self.count0
+ del self[1:]
+ # end total hack
+ return Regex.post_process(self, group_index) #, rule_name_to_character_set)
+ def to_nfa_state(self, _nfa, next_state):
+ count0 = self.count0
+ count1 = self.count1
+ if count1 == -1:
+ new_state = len(_nfa.states)
+ _nfa.states.append(None)
+ child_state = self[0].to_nfa_state(_nfa, new_state)
+ if child_state == -1:
+ new_state = next_state # note: unreachable state remains invalid (None)
+ else:
+ _nfa.states[new_state] = (
+ (nfa.NFA.STATE_OR, next_state, child_state)
+ if self.non_greedy else
+ (nfa.NFA.STATE_OR, child_state, next_state)
+ )
+ else:
+ new_state = next_state
+ for i in range(count1 - count0):
+ child_state = self[0].to_nfa_state(_nfa, new_state)
+ if child_state == -1:
+ break
+ new_state = len(_nfa.states)
+ _nfa.states.append(
+ (nfa.NFA.STATE_OR, next_state, child_state)
+ if self.non_greedy else
+ (nfa.NFA.STATE_OR, child_state, next_state)
+ )
+ for i in range(count0):
+ new_state = self[0].to_nfa_state(_nfa, new_state)
+ if new_state == -1:
+ break
+ return new_state
+
+class RegexGroup(Regex):
+ class Attribute(element.Element):
+ # GENERATE ELEMENT(str name, str value) BEGIN
+ def __init__(
+ self,
+ tag = 'RegexGroup_Attribute',
+ attrib = {},
+ text = '',
+ children = [],
+ name = '',
+ value = ''
+ ):
+ element.Element.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.name = name
+ self.value = value
+ def serialize(self, ref_list):
+ element.Element.serialize(self, ref_list)
+ self.set('name', element.serialize_str(self.name))
+ self.set('value', element.serialize_str(self.value))
+ def deserialize(self, ref_list):
+ element.Element.deserialize(self, ref_list)
+ self.name = element.deserialize_str(self.get('name', ''))
+ self.value = element.deserialize_str(self.get('value', ''))
+ def copy(self, factory = None):
+ result = element.Element.copy(
+ self,
+ Attribute if factory is None else factory
+ )
+ result.name = self.name
+ result.value = self.value
+ return result
+ def repr_serialize(self, params):
+ element.Element.repr_serialize(self, params)
+ if self.name != '':
+ params.append(
+ 'name = {0:s}'.format(repr(self.name))
+ )
+ if self.value != '':
+ params.append(
+ 'value = {0:s}'.format(repr(self.value))
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexGroup.Attribute({0:s})'.format(', '.join(params))
+ # GENERATE END
+
+ # GENERATE ELEMENT(int group_index, str group_name, list(ref) group_attributes) BEGIN
+ def __init__(
+ self,
+ tag = 'RegexGroup',
+ attrib = {},
+ text = '',
+ children = [],
+ group_index = -1,
+ group_name = '',
+ group_attributes = []
+ ):
+ Regex.__init__(
+ self,
+ tag,
+ attrib,
+ text,
+ children
+ )
+ self.group_index = (
+ element.deserialize_int(group_index)
+ if isinstance(group_index, str) else
+ group_index
+ )
+ self.group_name = group_name
+ self.group_attributes = group_attributes
+ def serialize(self, ref_list):
+ Regex.serialize(self, ref_list)
+ self.set('group_index', element.serialize_int(self.group_index))
+ self.set('group_name', element.serialize_str(self.group_name))
+ self.set(
+ 'group_attributes',
+ ' '.join([element.serialize_ref(i, ref_list) for i in self.group_attributes])
+ )
+ def deserialize(self, ref_list):
+ Regex.deserialize(self, ref_list)
+ self.group_index = element.deserialize_int(self.get('group_index', '-1'))
+ self.group_name = element.deserialize_str(self.get('group_name', ''))
+ self.group_attributes = [
+ element.deserialize_ref(i, ref_list)
+ for i in self.get('group_attributes', '').split()
+ ]
+ def copy(self, factory = None):
+ result = Regex.copy(
+ self,
+ RegexGroup if factory is None else factory
+ )
+ result.group_index = self.group_index
+ result.group_name = self.group_name
+ result.group_attributes = self.group_attributes
+ return result
+ def repr_serialize(self, params):
+ Regex.repr_serialize(self, params)
+ if self.group_index != -1:
+ params.append(
+ 'group_index = {0:s}'.format(repr(self.group_index))
+ )
+ if self.group_name != '':
+ params.append(
+ 'group_name = {0:s}'.format(repr(self.group_name))
+ )
+ if len(self.group_attributes):
+ params.append(
+ 'group_attributes = [{0:s}]'.format(
+ ', '.join([repr(i) for i in self.group_attributes])
+ )
+ )
+ def __repr__(self):
+ params = []
+ self.repr_serialize(params)
+ return 'regex.RegexGroup({0:s})'.format(', '.join(params))
+ # GENERATE END
+ def post_process(self, group_index = 0): #, rule_name_to_character_set = None):
+ # total hack which will be done in a Python action in future
+ if len(self) >= 2:
+ assert self[0].tag == 'GroupName'
+ self.group_name = self[0].text[1:-1]
+ del self[:1]
+ # end total hack
+ self.group_index = group_index
+ group_index += 1
+ return Regex.post_process(self, group_index) #, rule_name_to_character_set)
+ def to_groups(self, groups):
+ assert len(groups) == self.group_index
+ groups.append(
+ (self.group_name, {i.name: i.value for i in self.group_attributes})
+ )
+ return Regex.to_groups(self, groups)
+ def to_nfa_state(self, _nfa, next_state):
+ mark_state = len(_nfa.states)
+ _nfa.states.append((nfa.NFA.STATE_MARK, self.group_index * 2 + 1, next_state))
+ child_state = self[0].to_nfa_state(_nfa, mark_state)
+ if child_state == -1:
+ return -1
+ new_state = len(_nfa.states)
+ _nfa.states.append((nfa.NFA.STATE_MARK, self.group_index * 2, child_state))
+ return new_state
+ #def to_lr1_symbols(self, n_terminals, symbols, lookaheads, group_bounds):
+ # group_start = len(symbols)
+ # assert self.group_index == len(group_bounds)
+ # group_bounds.append(None)
+ # group_count = Regex.to_lr1_symbols(
+ # self,
+ # n_terminals,
+ # symbols,
+ # lookaheads,
+ # group_bounds
+ # )
+ # group_bounds[self.group_index] = (
+ # group_start,
+ # group_count,
+ # self.group_name,
+ # {i.name: i.value for i in self.group_attributes}
+ # )
+ # return 1 # count of groups or ungrouped characters
+
+# GENERATE FACTORY(element.Element) BEGIN
+tag_to_class = {
+ 'Regex': Regex,
+ 'RegexNone': RegexNone,
+ 'RegexEmpty': RegexEmpty,
+ 'RegexCharacter': RegexCharacter,
+ 'RegexCharacterRange': RegexCharacterRange,
+ 'RegexCharacterOr': RegexCharacterOr,
+ 'RegexCharacterAnd': RegexCharacterAnd,
+ 'RegexCharacterNot': RegexCharacterNot,
+ 'RegexOr': RegexOr,
+ 'RegexAnd': RegexAnd,
+ 'RegexSequence': RegexSequence,
+ 'RegexRepeat': RegexRepeat,
+ 'RegexGroup': RegexGroup,
+ 'RegexGroup_Attribute': RegexGroup.Attribute
+}
+def factory(tag, attrib = {}, *args, **kwargs):
+ return tag_to_class.get(tag, element.Element)(tag, attrib, *args, **kwargs)
+# GENERATE END
+
+if __name__ == '__main__':
+ import sys
+ import xml.etree.ElementTree
+
+ regex = RegexAnd(children = [RegexRepeat(children = [RegexCharacterNot(
+children = [RegexCharacter()], character_set = [0, 256])]), RegexGroup(children = [
+RegexOr(children = [RegexOr(children = [RegexOr(children = [RegexGroup(children
+= [RegexRepeat(children = [RegexCharacter(character_set = [9, 14, 32, 33])],
+one_or_more = True)], group_index = 1, group_name = 'Whitespace'), RegexGroup(
+children = [RegexRepeat(children = [RegexCharacter(character_set = [48, 58])],
+one_or_more = True)], group_index = 2, group_name = 'Number')]), RegexGroup(
+children = [RegexSequence(children = [RegexSequence(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacter(character_set = [102, 103])]),
+RegexCharacter(character_set = [111, 112])]), RegexCharacter(character_set = [114, 115])]
+)], group_index = 3, group_name = 'For')]), RegexGroup(children = [
+RegexSequence(children = [RegexCharacter(character_set = [65, 91, 95, 96, 97, 123]),
+RegexRepeat(children = [RegexCharacter(character_set = [48, 58, 65, 91, 95, 96, 97,
+123])])])], group_index = 4, group_name = 'Identifier')])], group_index = 0)])
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' regex = {0:s}'.format(repr(regex).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ _nfa = regex.to_nfa()
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' _nfa = {0:s}'.format(repr(_nfa).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ text = ' id 99id id99 for forex '
+ i = 0
+ while i < len(text):
+ print('text "{0:s}"'.format(text[i:i + 72].replace('\n', '$')))
+ thread = _nfa.match_text(text, i)
+ if thread is None:
+ print('no match')
+ break
+ i = thread[0] # end position of overall match
+ group_start = [-1 for j in range(len(_nfa.groups))]
+ group_end = [-1 for j in range(len(_nfa.groups))]
+ while thread is not None:
+ pos, mark, thread = thread
+ group = mark >> 1
+ if (mark & 1) == 0:
+ group_start[group] = pos
+ print(
+ 'group {0:d} name "{1:s}" text "{2:s}"'.format(
+ group,
+ _nfa.groups[group][0],
+ text[group_start[group]:group_end[group]].replace('\n', '$')
+ )
+ )
+ else:
+ group_end[group] = pos
+
+ dfa = _nfa.to_dfa()
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' dfa = {0:s}'.format(repr(dfa).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ text = ' id 99id id99 for forex '
+ i = 0
+ while i < len(text):
+ print('text "{0:s}"'.format(text[i:i + 72].replace('\n', '$')))
+ thread = dfa.match_text(text, i)
+ if thread is None:
+ print('no match')
+ break
+ i = thread[0] # end position of overall match
+ group_start = [-1 for j in range(len(dfa.groups))]
+ group_end = [-1 for j in range(len(dfa.groups))]
+ while thread is not None:
+ pos, mark, thread = thread
+ group = mark >> 1
+ if (mark & 1) == 0:
+ group_start[group] = pos
+ print(
+ 'group {0:d} name "{1:s}" text "{2:s}"'.format(
+ group,
+ dfa.groups[group][0],
+ text[group_start[group]:group_end[group]].replace('\n', '$')
+ )
+ )
+ else:
+ group_end[group] = pos
+
+ grammar = Grammar(children = [Grammar.Production(children = [RegexSequence(
+children = [RegexSequence(children = [RegexEmpty(), RegexCharacterRule(character_set
+= [288, 295], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [
+259, 262], rule_name = 'expr0')])], nonterminal = 0), Grammar.Production(
+children = [RegexSequence(children = [RegexEmpty(), RegexCharacterRule(character_set
+= [262, 265], rule_name = 'expr1')])], nonterminal = 1), Grammar.Production(
+children = [RegexSequence(children = [RegexEmpty(), RegexGroup(children = [
+RegexSequence(children = [RegexSequence(children = [RegexSequence(children = [
+RegexSequence(children = [RegexEmpty(), RegexCharacterRule(character_set = [259, 262
+], rule_name = 'expr0')]), RegexCharacter(character_set = [43, 44])]),
+RegexCharacterRule(character_set = [288, 295], rule_name = 'whitespace_opt')]),
+RegexCharacterRule(character_set = [262, 265], rule_name = 'expr1')])], group_index
+= 0, group_name = 'Add')])], nonterminal = 2), Grammar.Production(children = [
+RegexSequence(children = [RegexEmpty(), RegexGroup(children = [RegexSequence(
+children = [RegexSequence(children = [RegexSequence(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacterRule(character_set = [259, 262], rule_name =
+'expr0')]), RegexCharacter(character_set = [45, 46])]), RegexCharacterRule(character_set
+= [288, 295], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [
+262, 265], rule_name = 'expr1')])], group_index = 0, group_name = 'Subtract')])
+], nonterminal = 3), Grammar.Production(children = [RegexSequence(children = [
+RegexEmpty(), RegexCharacterRule(character_set = [265, 268], rule_name = 'expr2')])
+], nonterminal = 4), Grammar.Production(children = [RegexSequence(children = [
+RegexEmpty(), RegexGroup(children = [RegexSequence(children = [RegexSequence(
+children = [RegexSequence(children = [RegexSequence(children = [RegexEmpty(),
+RegexCharacterRule(character_set = [262, 265], rule_name = 'expr1')]),
+RegexCharacter(character_set = [42, 43])]), RegexCharacterRule(character_set = [288, 295
+], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [265, 268],
+rule_name = 'expr2')])], group_index = 0, group_name = 'Multiply')])],
+nonterminal = 5), Grammar.Production(children = [RegexSequence(children = [
+RegexEmpty(), RegexGroup(children = [RegexSequence(children = [RegexSequence(
+children = [RegexSequence(children = [RegexSequence(children = [RegexEmpty(),
+RegexCharacterRule(character_set = [262, 265], rule_name = 'expr1')]),
+RegexCharacter(character_set = [47, 48])]), RegexCharacterRule(character_set = [288, 295
+], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [265, 268],
+rule_name = 'expr2')])], group_index = 0, group_name = 'Divide')])],
+nonterminal = 6), Grammar.Production(children = [RegexSequence(children = [
+RegexSequence(children = [RegexEmpty(), RegexGroup(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name =
+'number')])], group_index = 0, group_name = 'Number')]), RegexCharacterRule(
+character_set = [288, 295], rule_name = 'whitespace_opt')])], nonterminal = 7),
+Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
+RegexGroup(children = [RegexSequence(children = [RegexSequence(children = [
+RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [45, 46])]),
+RegexCharacterRule(character_set = [288, 295], rule_name = 'whitespace_opt')]),
+RegexCharacterRule(character_set = [265, 268], rule_name = 'expr2')])], group_index
+= 0, group_name = 'Negate')])], nonterminal = 8), Grammar.Production(children =
+[RegexSequence(children = [RegexSequence(children = [RegexSequence(children = [
+RegexSequence(children = [RegexSequence(children = [RegexEmpty(),
+RegexCharacter(character_set = [40, 41])]), RegexCharacterRule(character_set = [288, 295
+], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [259, 262],
+rule_name = 'expr0')]), RegexCharacter(character_set = [41, 42])]),
+RegexCharacterRule(character_set = [288, 295], rule_name = 'whitespace_opt')])],
+nonterminal = 9), Grammar.Production(children = [RegexSequence(children = [
+RegexEmpty(), RegexCharacter(character_set = [48, 49])])], nonterminal = 10),
+Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
+RegexCharacter(character_set = [49, 50])])], nonterminal = 11), Grammar.Production(
+children = [RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [
+50, 51])])], nonterminal = 12), Grammar.Production(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacter(character_set = [51, 52])])], nonterminal =
+13), Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
+RegexCharacter(character_set = [52, 53])])], nonterminal = 14), Grammar.Production(
+children = [RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [
+53, 54])])], nonterminal = 15), Grammar.Production(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacter(character_set = [54, 55])])], nonterminal =
+16), Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
+RegexCharacter(character_set = [55, 56])])], nonterminal = 17), Grammar.Production(
+children = [RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [
+56, 57])])], nonterminal = 18), Grammar.Production(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacter(character_set = [57, 58])])], nonterminal =
+19), Grammar.Production(children = [RegexSequence(children = [RegexSequence(
+children = [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name =
+'number')]), RegexCharacter(character_set = [48, 49])])], nonterminal = 20),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [49, 50])])], nonterminal = 21),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [50, 51])])], nonterminal = 22),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [51, 52])])], nonterminal = 23),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [52, 53])])], nonterminal = 24),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [53, 54])])], nonterminal = 25),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [54, 55])])], nonterminal = 26),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [55, 56])])], nonterminal = 27),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [56, 57])])], nonterminal = 28),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
+)]), RegexCharacter(character_set = [57, 58])])], nonterminal = 29),
+Grammar.Production(children = [RegexEmpty()], nonterminal = 30),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
+'whitespace_opt')]), RegexCharacter(character_set = [9, 10])])], nonterminal = 31),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
+'whitespace_opt')]), RegexCharacter(character_set = [10, 11])])], nonterminal = 32),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
+'whitespace_opt')]), RegexCharacter(character_set = [11, 12])])], nonterminal = 33),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
+'whitespace_opt')]), RegexCharacter(character_set = [12, 13])])], nonterminal = 34),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
+'whitespace_opt')]), RegexCharacter(character_set = [13, 14])])], nonterminal = 35),
+Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
+= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
+'whitespace_opt')]), RegexCharacter(character_set = [32, 33])])], nonterminal = 36)
+], n_terminals = 258)
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' grammar = {0:s}'.format(repr(grammar).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ lr1 = grammar.to_lr1()
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' lr1 = {0:s}'.format(repr(lr1).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ lr1.parse_text('(13 + 5 * 6) * 2', 0)
+ root = element.Element('root', text = '(13 + 5 * 6) * 2')
+ lr1.parse_yychunk(root, 0, 0, element.Element, iter([]))
+ xml.etree.ElementTree.dump(root)
+
+ clr1 = lr1.to_clr1()
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' clr1 = {0:s}'.format(repr(clr1).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ clr1.parse_text('(13 + 5 * 6) * 2', 0)
+ root = element.Element('root', text = '(13 + 5 * 6) * 2')
+ clr1.parse_yychunk(root, 0, 0, element.Element, iter([]))
+ xml.etree.ElementTree.dump(root)
+
+ lalr1 = lr1.to_lalr1()
+ #sys.stdout.write(
+ # wrap_repr(
+ # ' lalr1 = {0:s}'.format(repr(lalr1).replace('regex.', '')),
+ # 79
+ # )
+ #)
+
+ lalr1.parse_text('(13 + 5 * 6) * 2', 0)
+ root = element.Element('root', text = '(13 + 5 * 6) * 2')
+ lalr1.parse_yychunk(root, 0, 0, element.Element, iter([]))
+ xml.etree.ElementTree.dump(root)
--- /dev/null
+#!/bin/sh
+if ./generate.py regex <regex.py >regex.py.new && ! diff -q regex.py regex.py.new
+then
+ mv regex.py.new regex.py
+else
+ rm -f regex.py.new
+fi
--- /dev/null
+/* Bison Grammar Parser -*- C -*-
+
+ Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+
+ This file is part of Bison, the GNU Compiler Compiler.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+%code requires
+{
+ #include "symlist.h"
+ #include "symtab.h"
+}
+
+%code top
+{
+ /* On column 0 to please syntax-check. */
+#include <config.h>
+}
+
+%code
+{
+ #include "system.h"
+
+ #include "c-ctype.h"
+ #include "complain.h"
+ #include "conflicts.h"
+ #include "files.h"
+ #include "getargs.h"
+ #include "gram.h"
+ #include "named-ref.h"
+ #include "quotearg.h"
+ #include "reader.h"
+ #include "scan-gram.h"
+ #include "scan-code.h"
+ #include "xmemdup0.h"
+
+ static int current_prec = 0;
+ static location current_lhs_location;
+ static named_ref *current_lhs_named_ref;
+ static symbol *current_lhs_symbol;
+ static symbol_class current_class = unknown_sym;
+ static uniqstr current_type = NULL;
+
+ /** Set the new current left-hand side symbol, possibly common
+ * to several right-hand side parts of rule.
+ */
+ static void current_lhs (symbol *sym, location loc, named_ref *ref);
+
+ #define YYLLOC_DEFAULT(Current, Rhs, N) \
+ (Current) = lloc_default (Rhs, N)
+ static YYLTYPE lloc_default (YYLTYPE const *, int);
+
+ #define YY_LOCATION_PRINT(File, Loc) \
+ location_print (Loc, File)
+
+ /* Strip initial '{' and final '}' (must be first and last characters).
+ Return the result. */
+ static char *strip_braces (char *code);
+
+ /* Convert CODE by calling code_props_plain_init if PLAIN, otherwise
+ code_props_symbol_action_init. Call
+ gram_scanner_last_string_free to release the latest string from
+ the scanner (should be CODE). */
+ static char const *translate_code (char *code, location loc, bool plain);
+
+ /* Convert CODE by calling code_props_plain_init after having
+ stripped the first and last characters (expected to be '{', and
+ '}'). Call gram_scanner_last_string_free to release the latest
+ string from the scanner (should be CODE). */
+ static char const *translate_code_braceless (char *code, location loc);
+
+ static void version_check (location const *loc, char const *version);
+
+ static void gram_error (location const *, char const *);
+
+ /* A string that describes a char (e.g., 'a' -> "'a'"). */
+ static char const *char_name (char);
+
+ #define YYTYPE_INT16 int_fast16_t
+ #define YYTYPE_INT8 int_fast8_t
+ #define YYTYPE_UINT16 uint_fast16_t
+ #define YYTYPE_UINT8 uint_fast8_t
+
+ /* Nick */
+ extern char *code_piece[];
+ extern int code_piece0;
+ void code_piece_append(const char *str);
+ void code_piece_pack();
+
+ extern char gram_piece_temp[], *gram_piece[];
+ extern int gram_piece0, gram_piece1;
+ int gram_piece2, gram_piece3;
+ void gram_piece_insert(int n, const void *str);
+
+ #define insert_before(n, str) \
+ do { \
+ gram_piece_insert(gram_piece2 + (n) * 2, (str)); \
+ ++gram_piece0; \
+ ++gram_piece3; \
+ } while (0)
+ #define insert_after(n, str) \
+ do { \
+ gram_piece_insert(gram_piece2 + (n) * 2 + 1, (str)); \
+ ++gram_piece0; \
+ ++gram_piece3; \
+ } while (0)
+
+}
+
+%define api.prefix {gram_}
+%define api.pure full
+%define locations
+%define parse.error verbose
+%define parse.lac full
+%define parse.trace
+%defines
+%expect 0
+%verbose
+
+%initial-action
+{
+ /* Bison's grammar can initial empty locations, hence a default
+ location is needed. */
+ boundary_set (&@$.start, current_file, 1, 1);
+ boundary_set (&@$.end, current_file, 1, 1);
+}
+
+/* Define the tokens together with their human representation. */
+%token GRAM_EOF 0 "end of file"
+%token STRING "string"
+
+%token PERCENT_TOKEN "%token"
+%token PERCENT_NTERM "%nterm"
+
+%token PERCENT_TYPE "%type"
+%token PERCENT_DESTRUCTOR "%destructor"
+%token PERCENT_PRINTER "%printer"
+
+%token PERCENT_LEFT "%left"
+%token PERCENT_RIGHT "%right"
+%token PERCENT_NONASSOC "%nonassoc"
+%token PERCENT_PRECEDENCE "%precedence"
+
+%token PERCENT_PREC "%prec"
+%token PERCENT_DPREC "%dprec"
+%token PERCENT_MERGE "%merge"
+
+/*----------------------.
+| Global Declarations. |
+`----------------------*/
+
+%token
+ PERCENT_CODE "%code"
+ PERCENT_DEFAULT_PREC "%default-prec"
+ PERCENT_DEFINE "%define"
+ PERCENT_DEFINES "%defines"
+ PERCENT_ERROR_VERBOSE "%error-verbose"
+ PERCENT_EXPECT "%expect"
+ PERCENT_EXPECT_RR "%expect-rr"
+ PERCENT_FLAG "%<flag>"
+ PERCENT_FILE_PREFIX "%file-prefix"
+ PERCENT_GLR_PARSER "%glr-parser"
+ PERCENT_INITIAL_ACTION "%initial-action"
+ PERCENT_LANGUAGE "%language"
+ PERCENT_NAME_PREFIX "%name-prefix"
+ PERCENT_NO_DEFAULT_PREC "%no-default-prec"
+ PERCENT_NO_LINES "%no-lines"
+ PERCENT_NONDETERMINISTIC_PARSER
+ "%nondeterministic-parser"
+ PERCENT_OUTPUT "%output"
+ PERCENT_REQUIRE "%require"
+ PERCENT_SKELETON "%skeleton"
+ PERCENT_START "%start"
+ PERCENT_TOKEN_TABLE "%token-table"
+ PERCENT_VERBOSE "%verbose"
+ PERCENT_YACC "%yacc"
+;
+
+%token BRACED_CODE "{...}"
+%token BRACED_PREDICATE "%?{...}"
+%token BRACKETED_ID "[identifier]"
+%token CHAR "char"
+%token EPILOGUE "epilogue"
+%token EQUAL "="
+%token ID "identifier"
+%token ID_COLON "identifier:"
+%token PERCENT_PERCENT "%%"
+%token PIPE "|"
+%token PROLOGUE "%{...%}"
+%token SEMICOLON ";"
+%token TAG "<tag>"
+%token TAG_ANY "<*>"
+%token TAG_NONE "<>"
+
+%union {unsigned char character;}
+%type <character> CHAR
+%printer { fputs (char_name ($$), yyo); } CHAR
+
+%union {char *code;};
+%type <code> "{...}" "%?{...}" "%{...%}" EPILOGUE STRING
+%printer { fputs (quotearg_style (c_quoting_style, $$), yyo); } STRING
+%printer { fprintf (yyo, "{\n%s\n}", $$); } <code>
+
+%union {uniqstr uniqstr;}
+%type <uniqstr> BRACKETED_ID ID ID_COLON PERCENT_FLAG TAG tag variable
+%printer { fputs ($$, yyo); } <uniqstr>
+%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID
+%printer { fprintf (yyo, "%s:", $$); } ID_COLON
+%printer { fprintf (yyo, "%%%s", $$); } PERCENT_FLAG
+%printer { fprintf (yyo, "<%s>", $$); } TAG tag
+
+%union {int integer;};
+%token <integer> INT "integer"
+%printer { fprintf (yyo, "%d", $$); } <integer>
+
+%union {symbol *symbol;}
+%type <symbol> id id_colon string_as_id symbol symbol.prec
+%printer { fprintf (yyo, "%s", $$->tag); } <symbol>
+%printer { fprintf (yyo, "%s:", $$->tag); } id_colon
+
+%union {assoc assoc;};
+%type <assoc> precedence_declarator
+
+%union {symbol_list *list;}
+%type <list> symbols.1 symbols.prec generic_symlist generic_symlist_item
+
+%union {named_ref *named_ref;}
+%type <named_ref> named_ref.opt
+
+/*---------.
+| %param. |
+`---------*/
+%code requires
+{
+ typedef enum
+ {
+ param_none = 0,
+ param_lex = 1 << 0,
+ param_parse = 1 << 1,
+ param_both = param_lex | param_parse
+ } param_type;
+};
+%code
+{
+ /** Add a lex-param and/or a parse-param.
+ *
+ * \param type where to push this formal argument.
+ * \param decl the formal argument. Destroyed.
+ * \param loc the location in the source.
+ */
+ static void add_param (param_type type, char *decl, location loc);
+ static param_type current_param = param_none;
+};
+%union {param_type param;}
+%token <param> PERCENT_PARAM "%param";
+%printer
+{
+ switch ($$)
+ {
+#define CASE(In, Out) \
+ case param_ ## In: fputs ("%" #Out, yyo); break
+ CASE (lex, lex-param);
+ CASE (parse, parse-param);
+ CASE (both, param);
+#undef CASE
+ case param_none: aver (false); break;
+ }
+} <param>;
+
+
+ /*==========\
+ | Grammar. |
+ \==========*/
+%%
+
+input:
+ prologue_declarations "%%" grammar epilogue.opt
+ {
+ insert_after(2, "</PYACC_Section2>");
+ insert_before(2, "<PYACC_Section2>");
+ insert_after(0, "</PYACC_Section1>");
+ insert_before(0, "<PYACC_Section1>");
+ }
+;
+
+
+ /*------------------------------------.
+ | Declarations: before the first %%. |
+ `------------------------------------*/
+
+prologue_declarations:
+ %empty
+ {
+ /* in this case, want empty rule associated with stuff on the right of us */
+ /* therefore, move inter-token text from the right of us over to the left */
+ if (yychar == YYEMPTY)
+ yychar = yylex(&yylval, &yylloc);
+ char *temp = gram_piece[gram_piece2 + 1];
+ gram_piece[gram_piece2 + 1] = gram_piece[gram_piece2]; /* empty */
+ gram_piece[gram_piece2] = gram_piece[gram_piece2 - 1]; /* empty */
+ gram_piece[gram_piece2 - 1] = temp;
+ }
+| prologue_declarations prologue_declaration
+;
+
+prologue_declaration:
+ grammar_declaration
+| "%{...%}"
+ {
+ /* inserting %{...%} below is a hack as we may lose some whitespace near it */
+ code_piece_append("<PYACC_Section1_Prologue>%{<PYACC_Text>");
+ muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue",
+ translate_code ($1, @1, true), @1);
+ code_scanner_last_string_free ();
+ code_piece_append("</PYACC_Text>%}</PYACC_Section1_Prologue>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2]);
+ gram_piece[gram_piece2] = strdup(code_piece[code_piece0 - 1]);
+ }
+| "%<flag>"
+ {
+ muscle_percent_define_ensure ($1, @1, true);
+ if (strcmp($1, "api.pure") == 0) {
+ insert_after(0, "</PYACC_Section1_PureParser>");
+ insert_before(0, "<PYACC_Section1_PureParser>");
+ }
+ else if (strcmp($1, "locations") == 0) {
+ insert_after(0, "</PYACC_Section1_Locations>");
+ insert_before(0, "<PYACC_Section1_Locations>");
+ }
+ else if (strcmp($1, "parse.trace") == 0) {
+ insert_after(0, "</PYACC_Section1_Debug>");
+ insert_before(0, "<PYACC_Section1_Debug>");
+ }
+ else
+ abort();
+ }
+| "%define" variable value
+ {
+ muscle_percent_define_insert ($2, @2, $3.kind, $3.chars,
+ MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+ insert_after(2, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
+ }
+| "%defines" { defines_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_Defines>");
+ insert_before(0, "<PYACC_Section1_Defines>");
+ }
+| "%defines" STRING
+ {
+ defines_flag = true;
+ spec_defines_file = xstrdup ($2);
+ insert_after(1, "</PYACC_Section1_Defines>");
+ insert_before(0, "<PYACC_Section1_Defines>");
+ }
+| "%error-verbose"
+ {
+ muscle_percent_define_insert ("parse.error", @1, muscle_keyword,
+ "verbose",
+ MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+ insert_after(0, "</PYACC_Section1_ErrorVerbose>");
+ insert_before(0, "<PYACC_Section1_ErrorVerbose>");
+ }
+| "%expect" INT { expected_sr_conflicts = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_Expect>");
+ sprintf(gram_piece_temp, "<PYACC_Section1_Expect value=\"%d\">", $2);
+ insert_before(0, gram_piece_temp);
+ }
+| "%expect-rr" INT { expected_rr_conflicts = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_ExpectRR>");
+ sprintf(gram_piece_temp, "<PYACC_Section1_ExpectRR value=\"%d\">", $2);
+ insert_before(0, gram_piece_temp);
+ }
+| "%file-prefix" STRING { spec_file_prefix = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_FilePrefix>");
+ insert_before(0, "<PYACC_Section1_FilePrefix>");
+ }
+| "%glr-parser"
+ {
+ nondeterministic_parser = true;
+ glr_parser = true;
+ insert_after(0, "</PYACC_Section1_GLRParser>");
+ insert_before(0, "<PYACC_Section1_GLRParser>");
+ }
+| "%initial-action" "{...}"
+ {
+ /* should be BracedCode, but too hard to put PYACC_Text inside braces */
+ code_piece_append("<PYACC_Text>");
+ muscle_code_grow ("initial_action", translate_code ($2, @2, false), @2);
+ code_scanner_last_string_free ();
+ code_piece_append("</PYACC_Text>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2 + 2]);
+ gram_piece[gram_piece2 + 2] = strdup(code_piece[code_piece0 - 1]);
+ insert_after(1, "</PYACC_Section1_InitialAction>");
+ insert_before(0, "<PYACC_Section1_InitialAction>");
+ }
+| "%language" STRING { language_argmatch ($2, grammar_prio, @1); /*}*/
+ insert_after(1, "</PYACC_Section1_Language>");
+ insert_before(0, "<PYACC_Section1_Language>");
+ }
+| "%name-prefix" STRING { spec_name_prefix = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_NamePrefix>");
+ insert_before(0, "<PYACC_Section1_NamePrefix>");
+ }
+| "%no-lines" { no_lines_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_Lines>");
+ insert_before(0, "<PYACC_Section1_Lines value=\"false\">");
+ }
+| "%nondeterministic-parser" { nondeterministic_parser = true; /*}*/
+ insert_after(0, "</PYACC_Section1_NonDeterministicParser>");
+ insert_before(0, "<PYACC_Section1_NonDeterministicParser>");
+ }
+| "%output" STRING { spec_outfile = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_Output>");
+ insert_before(0, "<PYACC_Section1_Output>");
+ }
+| "%param" { current_param = $1; } params { current_param = param_none; /*}*/
+ insert_after(2, "</PYACC_Section1_Param>");
+ insert_before(0, "<PYACC_Section1_Param>");
+ }
+| "%require" STRING { version_check (&@2, $2); /*}*/
+ insert_after(1, "</PYACC_Section1_Require>");
+ insert_before(0, "<PYACC_Section1_Require>");
+ }
+| "%skeleton" STRING
+ {
+ char const *skeleton_user = $2;
+ if (strchr (skeleton_user, '/'))
+ {
+ size_t dir_length = strlen (current_file);
+ char *skeleton_build;
+ while (dir_length && current_file[dir_length - 1] != '/')
+ --dir_length;
+ while (dir_length && current_file[dir_length - 1] == '/')
+ --dir_length;
+ skeleton_build =
+ xmalloc (dir_length + 1 + strlen (skeleton_user) + 1);
+ if (dir_length > 0)
+ {
+ memcpy (skeleton_build, current_file, dir_length);
+ skeleton_build[dir_length++] = '/';
+ }
+ strcpy (skeleton_build + dir_length, skeleton_user);
+ skeleton_user = uniqstr_new (skeleton_build);
+ free (skeleton_build);
+ }
+ skeleton_arg (skeleton_user, grammar_prio, @1);
+ insert_after(1, "</PYACC_Section1_Skeleton>");
+ insert_before(0, "<PYACC_Section1_Skeleton>");
+ }
+| "%token-table" { token_table_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_TokenTable>");
+ insert_before(0, "<PYACC_Section1_TokenTable>");
+ }
+| "%verbose" { report_flag |= report_states; /*}*/
+ insert_after(0, "</PYACC_Section1_Verbose>");
+ insert_before(0, "<PYACC_Section1_Verbose>");
+ }
+| "%yacc" { yacc_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_YACC>");
+ insert_before(0, "<PYACC_Section1_YACC>");
+ }
+| /*FIXME: Err? What is this horror doing here? */ ";"
+;
+
+params:
+ params "{...}" { add_param (current_param, $2, @2); }
+| "{...}" { add_param (current_param, $1, @1); }
+;
+
+
+/*----------------------.
+| grammar_declaration. |
+`----------------------*/
+
+grammar_declaration:
+ precedence_declaration
+| symbol_declaration
+| "%start" symbol
+ {
+ grammar_start_symbol_set ($2, @2);
+ insert_after(1, "</PYACC_Section1Or2_Start>");
+ insert_after(1, "</PYACC_SymbolRef>");
+ insert_before(1, "<PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_Section1Or2_Start>");
+ }
+| code_props_type "{...}" generic_symlist
+ {
+ code_props code;
+ code_props_symbol_action_init (&code, $2, @2);
+ /* should be BracedCode, but too hard to put PYACC_Text inside braces */
+ code_piece_append("<PYACC_Text>");
+ code_props_translate_code (&code);
+ code_piece_append("</PYACC_Text>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2 + 2]);
+ gram_piece[gram_piece2 + 2] = strdup(code_piece[code_piece0 - 1]);
+ {
+ symbol_list *list;
+ for (list = $3; list; list = list->next)
+ symbol_list_code_props_set (list, $1, &code);
+ symbol_list_free ($3);
+ }
+ insert_after(2, "</PYACC_Section1Or2_CodeProps>");
+ sprintf(gram_piece_temp, "<PYACC_Section1Or2_CodeProps _type=\"%d\">", $1);
+ insert_before(0, gram_piece_temp);
+ }
+| "%default-prec"
+ {
+ default_prec = true;
+ insert_after(0, "</PYACC_Section1Or2_DefaultPrec>");
+ insert_before(0, "<PYACC_Section1Or2_DefaultPrec value=\"true\">");
+ }
+| "%no-default-prec"
+ {
+ default_prec = false;
+ insert_after(0, "</PYACC_Section1Or2_DefaultPrec>");
+ insert_before(0, "<PYACC_Section1Or2_DefaultPrec>");
+ }
+| "%code" "{...}"
+ {
+ /* Do not invoke muscle_percent_code_grow here since it invokes
+ muscle_user_name_list_grow. */
+ code_piece_append("<PYACC_BracedCode>{<PYACC_Text>");
+ muscle_code_grow ("percent_code()",
+ translate_code_braceless ($2, @2), @2);
+ code_scanner_last_string_free ();
+ code_piece_append("</PYACC_Text>}</PYACC_BracedCode>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2 + 2]);
+ gram_piece[gram_piece2 + 2] = strdup(code_piece[code_piece0 - 1]);
+ insert_after(1, "</PYACC_Section1Or2_Code>");
+ insert_before(0, "<PYACC_Section1Or2_Code><PYACC_ID />");
+ }
+| "%code" ID "{...}"
+ {
+ code_piece_append("<PYACC_BracedCode>{<PYACC_Text>");
+ muscle_percent_code_grow ($2, @2, translate_code_braceless ($3, @3), @3);
+ code_scanner_last_string_free ();
+ code_piece_append("</PYACC_Text>}</PYACC_BracedCode>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2 + 4]);
+ gram_piece[gram_piece2 + 4] = strdup(code_piece[code_piece0 - 1]);
+ insert_after(2, "</PYACC_Section1Or2_Code>");
+ insert_before(0, "<PYACC_Section1Or2_Code>");
+ }
+;
+
+%type <code_type> code_props_type;
+%union {code_props_type code_type;};
+%printer { fprintf (yyo, "%s", code_props_type_string ($$)); } <code_type>;
+code_props_type:
+ "%destructor" { $$ = destructor; }
+| "%printer" { $$ = printer; }
+;
+
+/*---------.
+| %union. |
+`---------*/
+
+%token PERCENT_UNION "%union";
+
+union_name:
+ %empty { insert_before(0, "<PYACC_ID />"); }
+| ID { muscle_percent_define_insert ("api.value.union.name",
+ @1, muscle_keyword, $1,
+ MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); }
+;
+
+grammar_declaration:
+ "%union" union_name "{...}"
+ {
+ union_seen = true;
+ code_piece_append("<PYACC_BracedCode>{<PYACC_Text>");
+ muscle_code_grow ("union_members", translate_code_braceless ($3, @3), @3);
+ code_scanner_last_string_free ();
+ code_piece_append("</PYACC_Text>}</PYACC_BracedCode>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2 + 4]);
+ gram_piece[gram_piece2 + 4] = strdup(code_piece[code_piece0 - 1]);
+ insert_after(2, "</PYACC_Section1Or2_Union>");
+ insert_before(0, "<PYACC_Section1Or2_Union>");
+ }
+;
+
+
+
+
+symbol_declaration:
+ "%nterm" { current_class = nterm_sym; } symbol_defs.1
+ {
+ current_class = unknown_sym;
+ current_type = NULL;
+ insert_after(2, "</PYACC_Section1Or2_NTerm>");
+ insert_before(0, "<PYACC_Section1Or2_NTerm>");
+ }
+| "%token" { current_class = token_sym; } symbol_defs.1
+ {
+ current_class = unknown_sym;
+ current_type = NULL;
+ insert_after(2, "</PYACC_Section1Or2_Token>");
+ insert_before(0, "<PYACC_Section1Or2_Token>");
+ }
+| "%type" TAG symbols.1
+ {
+ symbol_list *list;
+ tag_seen = true;
+ for (list = $3; list; list = list->next)
+ symbol_type_set (list->content.sym, $2, @2);
+ symbol_list_free ($3);
+ insert_after(2, "</PYACC_Section1Or2_Type>");
+ insert_before(0, "<PYACC_Section1Or2_Type>");
+ }
+;
+
+precedence_declaration:
+ precedence_declarator tag.opt symbols.prec
+ {
+ symbol_list *list;
+ ++current_prec;
+ for (list = $3; list; list = list->next)
+ {
+ symbol_type_set (list->content.sym, current_type, @2);
+ symbol_precedence_set (list->content.sym, current_prec, $1, @1);
+ }
+ symbol_list_free ($3);
+ current_type = NULL;
+ insert_after(2, "</PYACC_Section1Or2_Precedence>");
+ sprintf(gram_piece_temp, "<PYACC_Section1Or2_Precedence _type=\"%d\">", ($1 & 3) - 1); /* -1 precedence, 0 right, 1 left, 2 nonassoc */
+ insert_before(0, gram_piece_temp);
+ }
+;
+
+precedence_declarator:
+ "%left" { $$ = left_assoc; }
+| "%right" { $$ = right_assoc; }
+| "%nonassoc" { $$ = non_assoc; }
+| "%precedence" { $$ = precedence_assoc; }
+;
+
+tag.opt:
+ %empty { current_type = NULL; }
+| TAG { current_type = $1; tag_seen = true; }
+;
+
+/* Just like symbols.1 but accept INT for the sake of POSIX. */
+symbols.prec:
+ symbol.prec
+ { $$ = symbol_list_sym_new ($1, @1); }
+| symbols.prec symbol.prec
+ { $$ = symbol_list_append ($1, symbol_list_sym_new ($2, @2)); }
+;
+
+symbol.prec:
+ symbol
+ {
+ $$ = $1;
+ symbol_class_set ($1, token_sym, @1, false);
+ insert_after(0, "</PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_SymbolRef>");
+ }
+| symbol INT
+ {
+ $$ = $1;
+ symbol_user_token_number_set ($1, $2, @2);
+ symbol_class_set ($1, token_sym, @1, false);
+ insert_after(1, "</PYACC_SymbolRef>");
+ sprintf(gram_piece_temp, "<PYACC_SymbolRef user_token=\"%d\">", $2);
+ insert_before(0, gram_piece_temp);
+ }
+;
+
+/* One or more symbols to be %typed. */
+symbols.1:
+ symbol
+ { $$ = symbol_list_sym_new ($1, @1); /*}*/
+ insert_after(0, "</PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_SymbolRef>");
+ }
+| symbols.1 symbol
+ { $$ = symbol_list_append ($1, symbol_list_sym_new ($2, @2)); /*}*/
+ insert_after(1, "</PYACC_SymbolRef>");
+ insert_before(1, "<PYACC_SymbolRef>");
+ }
+;
+
+generic_symlist:
+ generic_symlist_item { $$ = $1; }
+| generic_symlist generic_symlist_item { $$ = symbol_list_append ($1, $2); }
+;
+
+generic_symlist_item:
+ symbol { $$ = symbol_list_sym_new ($1, @1); /*}*/
+ insert_after(0, "</PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_SymbolRef>");
+ }
+| tag { $$ = symbol_list_type_new ($1, @1); }
+;
+
+tag:
+ TAG
+| "<*>" { $$ = uniqstr_new ("*"); }
+| "<>" { $$ = uniqstr_new (""); }
+;
+
+/* One token definition. */
+symbol_def:
+ TAG
+ {
+ current_type = $1;
+ tag_seen = true;
+ }
+| id
+ {
+ symbol_class_set ($1, current_class, @1, true);
+ symbol_type_set ($1, current_type, @1);
+ insert_after(0, "</PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_SymbolRef>");
+ }
+| id INT
+ {
+ symbol_class_set ($1, current_class, @1, true);
+ symbol_type_set ($1, current_type, @1);
+ symbol_user_token_number_set ($1, $2, @2);
+ insert_after(1, "</PYACC_SymbolRef>");
+ sprintf(gram_piece_temp, "<PYACC_SymbolRef user_token=\"%d\">", $2);
+ insert_before(0, gram_piece_temp);
+ }
+| id string_as_id
+ {
+ symbol_class_set ($1, current_class, @1, true);
+ symbol_type_set ($1, current_type, @1);
+ symbol_make_alias ($1, $2, @$);
+ insert_after(1, "</PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_SymbolRef>");
+ }
+| id INT string_as_id
+ {
+ symbol_class_set ($1, current_class, @1, true);
+ symbol_type_set ($1, current_type, @1);
+ symbol_user_token_number_set ($1, $2, @2);
+ symbol_make_alias ($1, $3, @$);
+ insert_after(2, "</PYACC_SymbolRef>");
+ sprintf(gram_piece_temp, "<PYACC_SymbolRef user_token=\"%d\">", $2);
+ insert_before(0, gram_piece_temp);
+ }
+;
+
+/* One or more symbol definitions. */
+symbol_defs.1:
+ symbol_def
+| symbol_defs.1 symbol_def
+;
+
+
+ /*------------------------------------------.
+ | The grammar section: between the two %%. |
+ `------------------------------------------*/
+
+grammar:
+ rules_or_grammar_declaration
+| grammar rules_or_grammar_declaration
+;
+
+/* As a Bison extension, one can use the grammar declarations in the
+ body of the grammar. */
+rules_or_grammar_declaration:
+ rules
+| grammar_declaration ";"
+| error ";"
+ {
+ yyerrok;
+ }
+;
+
+rules:
+ id_colon named_ref.opt { current_lhs ($1, @1, $2); } rhses.1
+ {
+ /* Free the current lhs. */
+ current_lhs (0, @1, 0);
+ insert_after(3, "</PYACC_Section2_Rules>");
+ /* the following will capture the ':', aesthetically unpleasing but benign */
+ insert_after(0, "</PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_SymbolRef>");
+ insert_before(0, "<PYACC_Section2_Rules>");
+ }
+;
+
+rhses.1:
+ rhs { grammar_current_rule_end (@1); /*}*/
+ insert_after(0, "</PYACC_Production>");
+ insert_before(0, "<PYACC_Production>");
+ }
+| rhses.1 "|" rhs { grammar_current_rule_end (@3); /*}*/
+ insert_after(2, "</PYACC_Production>");
+ insert_before(2, "<PYACC_Production>");
+ }
+| rhses.1 ";"
+;
+
+%token PERCENT_EMPTY "%empty";
+rhs:
+ %empty
+ { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
+ current_lhs_named_ref); /*}*/
+ /* in this case, want empty rule associated with stuff on the right of us */
+ /* therefore, move inter-token text from the right of us over to the left */
+ if (yychar == YYEMPTY)
+ yychar = yylex(&yylval, &yylloc);
+ char *temp = gram_piece[gram_piece2 + 1];
+ gram_piece[gram_piece2 + 1] = gram_piece[gram_piece2]; /* empty */
+ gram_piece[gram_piece2] = gram_piece[gram_piece2 - 1]; /* empty */
+ gram_piece[gram_piece2 - 1] = temp;
+ }
+| rhs symbol named_ref.opt
+ { grammar_current_rule_symbol_append ($2, @2, $3); /*}*/
+ insert_after(2, "</PYACC_Production_SymbolRef>");
+ insert_after(1, "</PYACC_SymbolRef>");
+ insert_before(1, "<PYACC_Production_SymbolRef><PYACC_SymbolRef>");
+ }
+| rhs "{...}" named_ref.opt
+ { /* should be BracedCode, but too hard to put PYACC_Text inside braces */ code_piece_append("<PYACC_Text>"); grammar_current_rule_action_append ($2, @2, $3, false); /*}*/
+ code_piece_append("</PYACC_Text>");
+ code_piece_pack();
+ free(gram_piece[gram_piece2 + 2]);
+ gram_piece[gram_piece2 + 2] = strdup(code_piece[code_piece0 - 1]);
+ insert_after(2, "</PYACC_Production_Action>");
+ insert_before(1, "<PYACC_Production_Action>");
+ }
+| rhs "%?{...}"
+ { grammar_current_rule_action_append ($2, @2, NULL, true); }
+| rhs "%empty"
+ { grammar_current_rule_empty_set (@2); /*}*/
+ insert_after(1, "</PYACC_Production_Empty>");
+ insert_before(1, "<PYACC_Production_Empty>");
+ }
+| rhs "%prec" symbol
+ { grammar_current_rule_prec_set ($3, @3); /*}*/
+ insert_after(2, "</PYACC_Production_Prec>");
+ insert_after(2, "</PYACC_SymbolRef>");
+ insert_before(2, "<PYACC_SymbolRef>");
+ insert_before(1, "<PYACC_Production_Prec>");
+ }
+| rhs "%dprec" INT
+ { grammar_current_rule_dprec_set ($3, @3); /*}*/
+ insert_after(2, "</PYACC_Production_DPrec>");
+ sprintf(gram_piece_temp, "<PYACC_Production_DPrec value=\"%d\">", $3);
+ insert_before(1, gram_piece_temp);
+ }
+| rhs "%merge" TAG
+ { grammar_current_rule_merge_set ($3, @3); /*}*/
+ insert_after(2, "</PYACC_Production_Merge>");
+ insert_before(1, "<PYACC_Production_Merge>");
+ }
+;
+
+named_ref.opt:
+ %empty { $$ = 0; }
+| BRACKETED_ID { $$ = named_ref_new ($1, @1); }
+;
+
+/*---------------------.
+| variable and value. |
+`---------------------*/
+
+/* The STRING form of variable is deprecated and is not M4-friendly.
+ For example, M4 fails for '%define "[" "value"'. */
+variable:
+ ID
+| STRING { $$ = uniqstr_new ($1); }
+;
+
+/* Some content or empty by default. */
+%code requires {#include "muscle-tab.h"};
+%union
+{
+ struct
+ {
+ char const *chars;
+ muscle_kind kind;
+ } value;
+};
+%type <value> value;
+%printer
+{
+ switch ($$.kind)
+ {
+ case muscle_code: fprintf (yyo, "{%s}", $$.chars); break;
+ case muscle_keyword: fprintf (yyo, "%s", $$.chars); break;
+ case muscle_string: fprintf (yyo, "\"%s\"", $$.chars); break;
+ }
+} <value>;
+
+value:
+ %empty { $$.kind = muscle_keyword; $$.chars = ""; }
+| ID { $$.kind = muscle_keyword; $$.chars = $1; }
+| STRING { $$.kind = muscle_string; $$.chars = $1; }
+| "{...}" { $$.kind = muscle_code; $$.chars = strip_braces ($1); }
+;
+
+
+/*--------------.
+| Identifiers. |
+`--------------*/
+
+/* Identifiers are returned as uniqstr values by the scanner.
+ Depending on their use, we may need to make them genuine symbols. */
+
+id:
+ ID
+ { $$ = symbol_from_uniqstr ($1, @1); }
+| CHAR
+ {
+ $$ = symbol_get (char_name ($1), @1);
+ symbol_class_set ($$, token_sym, @1, false);
+ symbol_user_token_number_set ($$, $1, @1);
+ }
+;
+
+id_colon:
+ ID_COLON { $$ = symbol_from_uniqstr ($1, @1); }
+;
+
+
+symbol:
+ id
+| string_as_id
+;
+
+/* A string used as an ID: quote it. */
+string_as_id:
+ STRING
+ {
+ $$ = symbol_get (quotearg_style (c_quoting_style, $1), @1);
+ symbol_class_set ($$, token_sym, @1, false);
+ }
+;
+
+epilogue.opt:
+ %empty
+| "%%" EPILOGUE
+ {
+#if 0
+ int gram_piece0_save = gram_piece0, gram_piece1_save = gram_piece1;
+ gram_piece0 = gram_piece1;
+ /*gram_piece_append("<PYACC_Epilogue>");*/
+#endif
+ muscle_code_grow ("epilogue", translate_code ($2, @2, true), @2);
+ code_scanner_last_string_free ();
+#if 0
+ /*gram_piece_append("</PYACC_Epilogue>");*/
+ gram_piece_pack();
+ /* delete marked up code from lexer and use that from translate_code() */
+ free(gram_piece[gram_piece2 + 2]);
+ gram_piece[gram_piece2 + 2] = gram_piece[gram_piece0 - 1];
+ gram_piece0 = gram_piece0_save;
+ gram_piece1 = gram_piece1_save;
+#endif
+ insert_after(1, "</PYACC_Section3>");
+ insert_after(0, "<PYACC_Section3>");
+ }
+;
+
+%%
+
+/* Return the location of the left-hand side of a rule whose
+ right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in
+ the right-hand side, and return an empty location equal to the end
+ boundary of RHS[0] if the right-hand side is empty. */
+
+static YYLTYPE
+lloc_default (YYLTYPE const *rhs, int n)
+{
+ int i;
+ YYLTYPE loc;
+
+ /* SGI MIPSpro 7.4.1m miscompiles "loc.start = loc.end = rhs[n].end;".
+ The bug is fixed in 7.4.2m, but play it safe for now. */
+ loc.start = rhs[n].end;
+ loc.end = rhs[n].end;
+
+ /* Ignore empty nonterminals the start of the right-hand side.
+ Do not bother to ignore them at the end of the right-hand side,
+ since empty nonterminals have the same end as their predecessors. */
+ for (i = 1; i <= n; i++)
+ if (! equal_boundaries (rhs[i].start, rhs[i].end))
+ {
+ loc.start = rhs[i].start;
+ break;
+ }
+
+ return loc;
+}
+
+static
+char *strip_braces (char *code)
+{
+ code[strlen (code) - 1] = 0;
+ return code + 1;
+}
+
+static
+char const *
+translate_code (char *code, location loc, bool plain)
+{
+ code_props plain_code;
+ if (plain)
+ code_props_plain_init (&plain_code, code, loc);
+ else
+ code_props_symbol_action_init (&plain_code, code, loc);
+ code_props_translate_code (&plain_code);
+ gram_scanner_last_string_free ();
+ return plain_code.code;
+}
+
+static
+char const *
+translate_code_braceless (char *code, location loc)
+{
+ return translate_code (strip_braces (code), loc, true);
+}
+
+static void
+add_param (param_type type, char *decl, location loc)
+{
+ static char const alphanum[26 + 26 + 1 + 10 + 1] =
+ "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "_"
+ "0123456789";
+
+ char const *name_start = NULL;
+ {
+ char *p;
+ /* Stop on last actual character. */
+ for (p = decl; p[1]; p++)
+ if ((p == decl
+ || ! memchr (alphanum, p[-1], sizeof alphanum - 1))
+ && memchr (alphanum, p[0], sizeof alphanum - 10 - 1))
+ name_start = p;
+
+ /* Strip the surrounding '{' and '}', and any blanks just inside
+ the braces. */
+ --p;
+ while (c_isspace ((unsigned char) *p))
+ --p;
+ p[1] = '\0';
+ ++decl;
+ while (c_isspace ((unsigned char) *decl))
+ ++decl;
+ }
+
+ if (! name_start)
+ complain (&loc, complaint, _("missing identifier in parameter declaration"));
+ else
+ {
+ char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
+ if (type & param_lex)
+ muscle_pair_list_grow ("lex_param", decl, name);
+ if (type & param_parse)
+ muscle_pair_list_grow ("parse_param", decl, name);
+ free (name);
+ }
+
+ gram_scanner_last_string_free ();
+}
+
+
+static void
+version_check (location const *loc, char const *version)
+{
+ if (strverscmp (version, PACKAGE_VERSION) > 0)
+ {
+ complain (loc, complaint, "require bison %s, but have %s",
+ version, PACKAGE_VERSION);
+ exit (EX_MISMATCH);
+ }
+}
+
+static void
+gram_error (location const *loc, char const *msg)
+{
+ complain (loc, complaint, "%s", msg);
+}
+
+char const *
+token_name (int type)
+{
+ return yytname[YYTRANSLATE (type)];
+}
+
+static char const *
+char_name (char c)
+{
+ if (c == '\'')
+ return "'\\''";
+ else
+ {
+ char buf[4];
+ buf[0] = '\''; buf[1] = c; buf[2] = '\''; buf[3] = '\0';
+ return quotearg_style (escape_quoting_style, buf);
+ }
+}
+
+static
+void
+current_lhs (symbol *sym, location loc, named_ref *ref)
+{
+ current_lhs_symbol = sym;
+ current_lhs_location = loc;
+ /* In order to simplify memory management, named references for lhs
+ are always assigned by deep copy into the current symbol_list
+ node. This is because a single named-ref in the grammar may
+ result in several uses when the user factors lhs between several
+ rules using "|". Therefore free the parser's original copy. */
+ free (current_lhs_named_ref);
+ current_lhs_named_ref = ref;
+}
--- /dev/null
+/* parse.y - parser for flex input */
+
+%token CHAR NUMBER SECTEND SCDECL XSCDECL NAME PREVCCL EOF_OP
+%token TOK_OPTION TOK_OUTFILE TOK_PREFIX TOK_YYCLASS TOK_HEADER_FILE TOK_EXTRA_TYPE
+%token TOK_TABLES_FILE
+
+%token CCE_ALNUM CCE_ALPHA CCE_BLANK CCE_CNTRL CCE_DIGIT CCE_GRAPH
+%token CCE_LOWER CCE_PRINT CCE_PUNCT CCE_SPACE CCE_UPPER CCE_XDIGIT
+
+%token CCE_NEG_ALNUM CCE_NEG_ALPHA CCE_NEG_BLANK CCE_NEG_CNTRL CCE_NEG_DIGIT CCE_NEG_GRAPH
+%token CCE_NEG_LOWER CCE_NEG_PRINT CCE_NEG_PUNCT CCE_NEG_SPACE CCE_NEG_UPPER CCE_NEG_XDIGIT
+
+%left CCL_OP_DIFF CCL_OP_UNION
+
+/*
+ *POSIX and AT&T lex place the
+ * precedence of the repeat operator, {}, below that of concatenation.
+ * Thus, ab{3} is ababab. Most other POSIX utilities use an Extended
+ * Regular Expression (ERE) precedence that has the repeat operator
+ * higher than concatenation. This causes ab{3} to yield abbb.
+ *
+ * In order to support the POSIX and AT&T precedence and the flex
+ * precedence we define two token sets for the begin and end tokens of
+ * the repeat operator, '{' and '}'. The lexical scanner chooses
+ * which tokens to return based on whether posix_compat or lex_compat
+ * are specified. Specifying either posix_compat or lex_compat will
+ * cause flex to parse scanner files as per the AT&T and
+ * POSIX-mandated behavior.
+ */
+
+%token BEGIN_REPEAT_POSIX END_REPEAT_POSIX BEGIN_REPEAT_FLEX END_REPEAT_FLEX
+
+
+%{
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+#include "tables.h"
+
+int pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen;
+int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule;
+
+int *scon_stk;
+int scon_stk_ptr;
+
+static int madeany = false; /* whether we've made the '.' character class */
+static int ccldot, cclany;
+int previous_continued_action; /* whether the previous rule's action was '|' */
+
+#define format_warn3(fmt, a1, a2) \
+ do{ \
+ char fw3_msg[MAXLINE];\
+ snprintf( fw3_msg, MAXLINE,(fmt), (a1), (a2) );\
+ lwarn( fw3_msg );\
+ }while(0)
+
+/* Expand a POSIX character class expression. */
+#define CCL_EXPR(func) \
+ do{ \
+ int c; \
+ for ( c = 0; c < csize; ++c ) \
+ if ( isascii(c) && func(c) ) \
+ ccladd( currccl, c ); \
+ }while(0)
+
+/* negated class */
+#define CCL_NEG_EXPR(func) \
+ do{ \
+ int c; \
+ for ( c = 0; c < csize; ++c ) \
+ if ( !func(c) ) \
+ ccladd( currccl, c ); \
+ }while(0)
+
+/* While POSIX defines isblank(), it's not ANSI C. */
+#define IS_BLANK(c) ((c) == ' ' || (c) == '\t')
+
+/* On some over-ambitious machines, such as DEC Alpha's, the default
+ * token type is "long" instead of "int"; this leads to problems with
+ * declaring yylval in flexdef.h. But so far, all the yacc's I've seen
+ * wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the
+ * following should ensure that the default token type is "int".
+ */
+#define YYSTYPE int
+
+/* Nick */
+extern char piece_temp[], *piece[];
+extern int piece0, piece1;
+int piece2, piece3;
+void piece_insert(int n, const void *str);
+
+#define insert_before(n, str) \
+ do { \
+ piece_insert(piece2 + (n) * 2, (str)); \
+ ++piece0; \
+ ++piece3; \
+ } while (0)
+#define insert_after(n, str) \
+ do { \
+ piece_insert(piece2 + (n) * 2 + 1, (str)); \
+ ++piece0; \
+ ++piece3; \
+ } while (0)
+
+%}
+
+%%
+goal : initlex sect1 sect1end sect2 initforrule
+ { /* add default rule */
+ int def_rule;
+
+ pat = cclinit();
+ cclnegate( pat );
+
+ def_rule = mkstate( -pat );
+
+ /* Remember the number of the default rule so we
+ * don't generate "can't match" warnings for it.
+ */
+ default_rule = num_rules;
+
+ finish_rule( def_rule, false, 0, 0, 0);
+
+ for ( i = 1; i <= lastsc; ++i )
+ scset[i] = mkbranch( scset[i], def_rule );
+
+ if ( spprdflt )
+ add_action(
+ "YY_FATAL_ERROR( \"flex scanner jammed\" )" );
+ else
+ add_action( "ECHO" );
+
+ add_action( ";\n\tYY_BREAK]]\n" );
+ }
+ ;
+
+initlex :
+ { /* initialize for processing rules */
+
+ /* Create default DFA start condition. */
+ scinstal( "INITIAL", false );
+ }
+ ;
+
+sect1 : sect1 startconddecl namelist1
+ {
+ insert_after(2, "</PLex_Section1_StartConditions>");
+ sprintf(piece_temp, "<PLex_Section1_StartConditions exclusive=\"%s\">", xcluflg ? "true" : "false");
+ insert_before(1, piece_temp);
+ }
+ | sect1 options
+ {
+ insert_after(1, "</PLex_Section1_Options>");
+ insert_before(1, "<PLex_Section1_Options>");
+ }
+ |
+ | error
+ { synerr( _("unknown error processing section 1") ); }
+ ;
+
+sect1end : SECTEND
+ {
+ check_options();
+ scon_stk = allocate_integer_array( lastsc + 1 );
+ scon_stk_ptr = 0;
+ }
+ ;
+
+startconddecl : SCDECL
+ { xcluflg = false; }
+
+ | XSCDECL
+ { xcluflg = true; }
+ ;
+
+namelist1 : namelist1 NAME
+ { scinstal( nmstr, xcluflg ); }
+
+ | NAME
+ { scinstal( nmstr, xcluflg ); }
+
+ | error
+ { synerr( _("bad start condition list") ); }
+ ;
+
+options : TOK_OPTION optionlist
+ ;
+
+optionlist : optionlist option
+ |
+ ;
+
+option : TOK_OUTFILE '=' NAME
+ {
+ outfilename = xstrdup(nmstr);
+ did_outfilename = 1;
+ insert_after(2, "</PLex_Section1_Options_OutFile>");
+ insert_before(0,"<PLex_Section1_Options_OutFile>");
+ }
+ | TOK_EXTRA_TYPE '=' NAME
+ { extra_type = xstrdup(nmstr); /*}*/
+ insert_after(2, "</PLex_Section1_Options_ExtraType>");
+ insert_before(0, "<PLex_Section1_Options_ExtraType>");
+ }
+ | TOK_PREFIX '=' NAME
+ { prefix = xstrdup(nmstr);
+ if (strchr(prefix, '[') || strchr(prefix, ']'))
+ flexerror(_("Prefix must not contain [ or ]")); /*}*/
+ insert_after(2, "</PLex_Section1_Options_Prefix>");
+ insert_before(0, "<PLex_Section1_Options_Prefix>");
+ }
+ | TOK_YYCLASS '=' NAME
+ { yyclass = xstrdup(nmstr); /*}*/
+ insert_after(2, "</PLex_Section1_Options_YYClass>");
+ insert_before(0, "<PLex_Section1_Options_YYClass>");
+ }
+ | TOK_HEADER_FILE '=' NAME
+ { headerfilename = xstrdup(nmstr); /*}*/
+ insert_after(2, "</PLex_Section1_Options_HeaderFile>");
+ insert_before(0, "<PLex_Section1_Options_HeaderFile>");
+ }
+ | TOK_TABLES_FILE '=' NAME
+ { tablesext = true; tablesfilename = xstrdup(nmstr); /*}*/
+ insert_after(2, "</PLex_Section1_Options_TablesFile>");
+ insert_before(0, "<PLex_Section1_Options_TablesFile>");
+ }
+ ;
+
+sect2 : sect2 scon initforrule flexrule '\n'
+ { scon_stk_ptr = $2; /*}*/
+ insert_after(4, "</PLex_Section2_Rule>");
+ insert_before(1, "<PLex_Section2_Rule>");
+ }
+ | sect2 scon '{' sect2 '}'
+ { scon_stk_ptr = $2; /*}*/
+ insert_after(4, "</PLex_Section2_CompoundRule>");
+ insert_before(1, "<PLex_Section2_CompoundRule>");
+ }
+ |
+ ;
+
+initforrule :
+ {
+ /* Initialize for a parse of one rule. */
+ trlcontxt = variable_trail_rule = varlength = false;
+ trailcnt = headcnt = rulelen = 0;
+ current_state_type = STATE_NORMAL;
+ previous_continued_action = continued_action;
+ in_rule = true;
+
+ new_rule();
+ }
+ ;
+
+flexrule : '^' rule
+ {
+ pat = $2;
+ finish_rule( pat, variable_trail_rule,
+ headcnt, trailcnt , previous_continued_action);
+
+ if ( scon_stk_ptr > 0 )
+ {
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ scbol[scon_stk[i]] =
+ mkbranch( scbol[scon_stk[i]],
+ pat );
+ }
+
+ else
+ {
+ /* Add to all non-exclusive start conditions,
+ * including the default (0) start condition.
+ */
+
+ for ( i = 1; i <= lastsc; ++i )
+ if ( ! scxclu[i] )
+ scbol[i] = mkbranch( scbol[i],
+ pat );
+ }
+
+ if ( ! bol_needed )
+ {
+ bol_needed = true;
+
+ if ( performance_report > 1 )
+ pinpoint_message(
+ "'^' operator results in sub-optimal performance" );
+ }
+ insert_after(1, "</PLex_Section2_Rule_FLexRule>");
+ insert_before(0, "<PLex_Section2_Rule_FLexRule bol=\"true\">");
+ }
+
+ | rule
+ {
+ pat = $1;
+ finish_rule( pat, variable_trail_rule,
+ headcnt, trailcnt , previous_continued_action);
+
+ if ( scon_stk_ptr > 0 )
+ {
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ scset[scon_stk[i]] =
+ mkbranch( scset[scon_stk[i]],
+ pat );
+ }
+
+ else
+ {
+ for ( i = 1; i <= lastsc; ++i )
+ if ( ! scxclu[i] )
+ scset[i] =
+ mkbranch( scset[i],
+ pat );
+ }
+ insert_after(0, "</PLex_Section2_Rule_FLexRule>");
+ insert_before(0, "<PLex_Section2_Rule_FLexRule bol=\"false\">");
+ }
+
+ | EOF_OP
+ {
+ if ( scon_stk_ptr > 0 )
+ build_eof_action();
+
+ else
+ {
+ /* This EOF applies to all start conditions
+ * which don't already have EOF actions.
+ */
+ for ( i = 1; i <= lastsc; ++i )
+ if ( ! sceof[i] )
+ scon_stk[++scon_stk_ptr] = i;
+
+ if ( scon_stk_ptr == 0 )
+ lwarn(
+ "all start conditions already have <<EOF>> rules" );
+
+ else
+ build_eof_action();
+ }
+ insert_after(0, "</PLex_Section2_Rule_EOFRule>");
+ insert_before(0, "<PLex_Section2_Rule_EOFRule>");
+ }
+
+ | error
+ { synerr( _("unrecognized rule") ); }
+ ;
+
+scon_stk_ptr :
+ { $$ = scon_stk_ptr; }
+ ;
+
+scon : '<' scon_stk_ptr namelist2 '>'
+ { $$ = $2; /*}*/
+ insert_after(3, "</PLex_Section2_StartConditions>");
+ insert_before(0, "<PLex_Section2_StartConditions>");
+ }
+
+ | '<' '*' '>'
+ {
+ $$ = scon_stk_ptr;
+
+ for ( i = 1; i <= lastsc; ++i )
+ {
+ int j;
+
+ for ( j = 1; j <= scon_stk_ptr; ++j )
+ if ( scon_stk[j] == i )
+ break;
+
+ if ( j > scon_stk_ptr )
+ scon_stk[++scon_stk_ptr] = i;
+ }
+ insert_after(2, "</PLex_Section2_StartConditions>");
+ insert_before(0, "<PLex_Section2_StartConditions wildcard=\"true\">");
+ }
+
+ |
+ { $$ = scon_stk_ptr; /*}*/
+ /* in this case, want empty rule associated with stuff on the right of us */
+ /* therefore, move inter-token text from the right of us over to the left */
+ if (yychar == YYEMPTY)
+ yychar = yylex();
+ char *temp = piece[piece2 + 1];
+ piece[piece2 + 1] = piece[piece2]; /* empty */
+ piece[piece2] = piece[piece2 - 1]; /* empty */
+ piece[piece2 - 1] = temp;
+ insert_before(0, "<PLex_Section2_StartConditions />");
+ }
+ ;
+
+namelist2 : namelist2 ',' sconname
+
+ | sconname
+
+ | error
+ { synerr( _("bad start condition list") ); }
+ ;
+
+sconname : NAME
+ {
+ if ( (scnum = sclookup( nmstr )) == 0 )
+ format_pinpoint_message(
+ "undeclared start condition %s",
+ nmstr );
+ else
+ {
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ if ( scon_stk[i] == scnum )
+ {
+ format_warn(
+ "<%s> specified twice",
+ scname[scnum] );
+ break;
+ }
+
+ if ( i > scon_stk_ptr )
+ scon_stk[++scon_stk_ptr] = scnum;
+ }
+ }
+ ;
+
+/* this rule handles trailing context, it must produce two separate regexes,
+ * where the first is the expression to be matched, and the second is the
+ * trailing context, RegexEmpty (matches empty string) if no trailing context
+ */
+rule : re2 re
+ {
+ if ( transchar[lastst[$2]] != SYM_EPSILON )
+ /* Provide final transition \now/ so it
+ * will be marked as a trailing context
+ * state.
+ */
+ $2 = link_machines( $2,
+ mkstate( SYM_EPSILON ) );
+
+ mark_beginning_as_normal( $2 );
+ current_state_type = STATE_NORMAL;
+
+ if ( previous_continued_action )
+ {
+ /* We need to treat this as variable trailing
+ * context so that the backup does not happen
+ * in the action but before the action switch
+ * statement. If the backup happens in the
+ * action, then the rules "falling into" this
+ * one's action will *also* do the backup,
+ * erroneously.
+ */
+ if ( ! varlength || headcnt != 0 )
+ lwarn(
+ "trailing context made variable due to preceding '|' action" );
+
+ /* Mark as variable. */
+ varlength = true;
+ headcnt = 0;
+
+ }
+
+ if ( lex_compat || (varlength && headcnt == 0) )
+ { /* variable trailing context rule */
+ /* Mark the first part of the rule as the
+ * accepting "head" part of a trailing
+ * context rule.
+ *
+ * By the way, we didn't do this at the
+ * beginning of this production because back
+ * then current_state_type was set up for a
+ * trail rule, and add_accept() can create
+ * a new state ...
+ */
+ add_accept( $1,
+ num_rules | YY_TRAILING_HEAD_MASK );
+ variable_trail_rule = true;
+ }
+
+ else
+ trailcnt = rulelen;
+
+ $$ = link_machines( $1, $2 );
+ }
+
+ | re2 re '$'
+ { synerr( _("trailing context used twice") ); }
+
+ | re '$'
+ {
+ headcnt = 0;
+ trailcnt = 1;
+ rulelen = 1;
+ varlength = false;
+
+ current_state_type = STATE_TRAILING_CONTEXT;
+
+ if ( trlcontxt )
+ {
+ synerr( _("trailing context used twice") );
+ $$ = mkstate( SYM_EPSILON );
+ }
+
+ else if ( previous_continued_action )
+ {
+ /* See the comment in the rule for "re2 re"
+ * above.
+ */
+ lwarn(
+ "trailing context made variable due to preceding '|' action" );
+
+ varlength = true;
+ }
+
+ if ( lex_compat || varlength )
+ {
+ /* Again, see the comment in the rule for
+ * "re2 re" above.
+ */
+ add_accept( $1,
+ num_rules | YY_TRAILING_HEAD_MASK );
+ variable_trail_rule = true;
+ }
+
+ trlcontxt = true;
+
+ eps = mkstate( SYM_EPSILON );
+ $$ = link_machines( $1,
+ link_machines( eps, mkstate( '\n' ) ) );
+ insert_after(1, "</RegexCharacterLiteral>");
+ insert_before(1, "<RegexCharacterLiteral character_set=\"10 11\">");
+ }
+
+ | re
+ {
+ $$ = $1;
+
+ if ( trlcontxt )
+ {
+ if ( lex_compat || (varlength && headcnt == 0) )
+ /* Both head and trail are
+ * variable-length.
+ */
+ variable_trail_rule = true;
+ else
+ trailcnt = rulelen;
+ }
+ insert_after(0, "<RegexEmpty />");
+ }
+ ;
+
+
+re : re '|' series
+ {
+ varlength = true;
+ $$ = mkor( $1, $3 );
+ insert_after(2, "</RegexOr>");
+ insert_before(0, "<RegexOr>");
+ }
+
+ | series
+ { $$ = $1; }
+ ;
+
+
+re2 : re '/'
+ {
+ /* This rule is written separately so the
+ * reduction will occur before the trailing
+ * series is parsed.
+ */
+
+ if ( trlcontxt )
+ synerr( _("trailing context used twice") );
+ else
+ trlcontxt = true;
+
+ if ( varlength )
+ /* We hope the trailing context is
+ * fixed-length.
+ */
+ varlength = false;
+ else
+ headcnt = rulelen;
+
+ rulelen = 0;
+
+ current_state_type = STATE_TRAILING_CONTEXT;
+ $$ = $1;
+ }
+ ;
+
+series : series singleton
+ {
+ /* This is where concatenation of adjacent patterns
+ * gets done.
+ */
+ $$ = link_machines( $1, $2 );
+ insert_after(1, "</RegexSequence>");
+ insert_before(0, "<RegexSequence>");
+ }
+
+ | singleton
+ { $$ = $1; }
+
+ | series BEGIN_REPEAT_POSIX NUMBER ',' NUMBER END_REPEAT_POSIX
+ {
+ varlength = true;
+
+ if ( $3 > $5 || $3 < 0 )
+ {
+ synerr( _("bad iteration values") );
+ $$ = $1;
+ }
+ else
+ {
+ if ( $3 == 0 )
+ {
+ if ( $5 <= 0 )
+ {
+ synerr(
+ _("bad iteration values") );
+ $$ = $1;
+ }
+ else
+ $$ = mkopt(
+ mkrep( $1, 1, $5 ) );
+ }
+ else
+ $$ = mkrep( $1, $3, $5 );
+ }
+ insert_after(5, "</RegexRepeat>");
+ sprintf(piece_temp, "<RegexRepeat count0=\"%d\" count1=\"%d\">", $3, $5);
+ insert_before(0, piece_temp);
+ }
+
+ | series BEGIN_REPEAT_POSIX NUMBER ',' END_REPEAT_POSIX
+ {
+ varlength = true;
+
+ if ( $3 <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ $$ = $1;
+ }
+
+ else
+ $$ = mkrep( $1, $3, INFINITE_REPEAT );
+ insert_after(4, "</RegexRepeat>");
+ sprintf(piece_temp, "<RegexRepeat count0=\"%d\">", $3);
+ insert_before(0, piece_temp);
+ }
+
+ | series BEGIN_REPEAT_POSIX NUMBER END_REPEAT_POSIX
+ {
+ /* The series could be something like "(foo)",
+ * in which case we have no idea what its length
+ * is, so we punt here.
+ */
+ varlength = true;
+
+ if ( $3 <= 0 )
+ {
+ synerr( _("iteration value must be positive")
+ );
+ $$ = $1;
+ }
+
+ else
+ $$ = link_machines( $1,
+ copysingl( $1, $3 - 1 ) );
+ insert_after(3, "</RegexRepeat>");
+ sprintf(piece_temp, "<RegexRepeat count0=\"%d\" count1=\"%d\">", $3, $3);
+ insert_before(0, piece_temp);
+ }
+
+ ;
+
+singleton : singleton '*'
+ {
+ varlength = true;
+
+ $$ = mkclos( $1 );
+ insert_after(1, "</RegexRepeat>");
+ insert_before(0, "<RegexRepeat count0=\"0\">");
+ }
+
+ | singleton '+'
+ {
+ varlength = true;
+ $$ = mkposcl( $1 );
+ insert_after(1, "</RegexRepeat>");
+ insert_before(0, "<RegexRepeat count0=\"1\">");
+ }
+
+ | singleton '?'
+ {
+ varlength = true;
+ $$ = mkopt( $1 );
+ insert_after(1, "</RegexRepeat>");
+ insert_before(0, "<RegexRepeat count0=\"0\" count1=\"1\">");
+ }
+
+ | singleton BEGIN_REPEAT_FLEX NUMBER ',' NUMBER END_REPEAT_FLEX
+ {
+ varlength = true;
+
+ if ( $3 > $5 || $3 < 0 )
+ {
+ synerr( _("bad iteration values") );
+ $$ = $1;
+ }
+ else
+ {
+ if ( $3 == 0 )
+ {
+ if ( $5 <= 0 )
+ {
+ synerr(
+ _("bad iteration values") );
+ $$ = $1;
+ }
+ else
+ $$ = mkopt(
+ mkrep( $1, 1, $5 ) );
+ }
+ else
+ $$ = mkrep( $1, $3, $5 );
+ }
+ insert_after(5, "</RegexRepeat>");
+ sprintf(piece_temp, "<RegexRepeat count0=\"%d\" count1=\"%d\">", $3, $5);
+ insert_before(0, piece_temp);
+ }
+
+ | singleton BEGIN_REPEAT_FLEX NUMBER ',' END_REPEAT_FLEX
+ {
+ varlength = true;
+
+ if ( $3 <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ $$ = $1;
+ }
+
+ else
+ $$ = mkrep( $1, $3, INFINITE_REPEAT );
+ insert_after(4, "</RegexRepeat>");
+ sprintf(piece_temp, "<RegexRepeat count0=\"%d\">", $3);
+ insert_before(0, piece_temp);
+ }
+
+ | singleton BEGIN_REPEAT_FLEX NUMBER END_REPEAT_FLEX
+ {
+ /* The singleton could be something like "(foo)",
+ * in which case we have no idea what its length
+ * is, so we punt here.
+ */
+ varlength = true;
+
+ if ( $3 <= 0 )
+ {
+ synerr( _("iteration value must be positive") );
+ $$ = $1;
+ }
+
+ else
+ $$ = link_machines( $1,
+ copysingl( $1, $3 - 1 ) );
+ insert_after(3, "</RegexRepeat>");
+ sprintf(piece_temp, "<RegexRepeat count0=\"%d\" count1=\"%d\">", $3, $3);
+ insert_before(0, piece_temp);
+ }
+
+ | '.'
+ {
+ if ( ! madeany )
+ {
+ /* Create the '.' character class. */
+ ccldot = cclinit();
+ ccladd( ccldot, '\n' );
+ cclnegate( ccldot );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[ccldot],
+ ccllen[ccldot], nextecm,
+ ecgroup, csize, csize );
+
+ /* Create the (?s:'.') character class. */
+ cclany = cclinit();
+ cclnegate( cclany );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[cclany],
+ ccllen[cclany], nextecm,
+ ecgroup, csize, csize );
+
+ madeany = true;
+ }
+
+ ++rulelen;
+
+ if (sf_dot_all())
+ {
+ $$ = mkstate( -cclany );
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 256\">");
+ }
+ else
+ {
+ $$ = mkstate( -ccldot );
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 10 11 256\">");
+ }
+ }
+
+ | fullccl
+ {
+ /* Sort characters for fast searching.
+ */
+ qsort( ccltbl + cclmap[$1], (size_t) ccllen[$1], sizeof (*ccltbl), cclcmp );
+
+ if ( useecs )
+ mkeccl( ccltbl + cclmap[$1], ccllen[$1],
+ nextecm, ecgroup, csize, csize );
+
+ ++rulelen;
+
+ if (ccl_has_nl[$1])
+ rule_has_nl[num_rules] = true;
+
+ $$ = mkstate( -$1 );
+ }
+
+ | PREVCCL
+ {
+ ++rulelen;
+
+ if (ccl_has_nl[$1])
+ rule_has_nl[num_rules] = true;
+
+ $$ = mkstate( -$1 );
+ }
+
+ | '"' string '"'
+ { $$ = $2; }
+
+ | '(' re ')'
+ { $$ = $2; /*}*/
+#if 0 /* for now do things in the traditional lex way without subexpressions */
+ insert_after(2, "</RegexGroup>");
+ insert_before(0, "<RegexGroup>");
+#endif
+ }
+
+ | CHAR
+ {
+ ++rulelen;
+
+ if ($1 == nlch)
+ rule_has_nl[num_rules] = true;
+
+ if (sf_case_ins() && has_case($1))
+ /* create an alternation, as in (a|A) */
+ $$ = mkor (mkstate($1), mkstate(reverse_case($1)));
+ else
+ $$ = mkstate( $1 );
+ insert_after(0, "</RegexCharacterLiteral>");
+ sprintf(piece_temp, "<RegexCharacterLiteral character_set=\"%d %d\">", $1, $1 + 1);
+ insert_before(0, piece_temp);
+ }
+ ;
+fullccl:
+ fullccl CCL_OP_DIFF braceccl { $$ = ccl_set_diff ($1, $3); /*}*/
+ insert_after(2, "</RegexCharacterAnd>");
+ insert_after(2, "</RegexCharacterNot>");
+ insert_before(2, "<RegexCharacterNot>");
+ insert_before(0, "<RegexCharacterAnd>");
+ }
+ | fullccl CCL_OP_UNION braceccl { $$ = ccl_set_union ($1, $3); /*}*/
+ insert_after(2, "</RegexCharacterOr>");
+ insert_before(0, "<RegexCharacterOr>");
+ }
+ | braceccl
+ ;
+
+braceccl:
+
+ '[' ccl ']' { $$ = $2; }
+
+ | '[' '^' ccl ']'
+ {
+ cclnegate( $3 );
+ $$ = $3;
+ insert_after(2, "</RegexCharacterNot>");
+ insert_before(1, "<RegexCharacterNot>");
+ }
+ ;
+
+ccl : ccl CHAR '-' CHAR
+ {
+
+ if (sf_case_ins())
+ {
+
+ /* If one end of the range has case and the other
+ * does not, or the cases are different, then we're not
+ * sure what range the user is trying to express.
+ * Examples: [@-z] or [S-t]
+ */
+ if (has_case ($2) != has_case ($4)
+ || (has_case ($2) && (b_islower ($2) != b_islower ($4)))
+ || (has_case ($2) && (b_isupper ($2) != b_isupper ($4))))
+ format_warn3 (
+ _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
+ $2, $4);
+
+ /* If the range spans uppercase characters but not
+ * lowercase (or vice-versa), then should we automatically
+ * include lowercase characters in the range?
+ * Example: [@-_] spans [a-z] but not [A-Z]
+ */
+ else if (!has_case ($2) && !has_case ($4) && !range_covers_case ($2, $4))
+ format_warn3 (
+ _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"),
+ $2, $4);
+ }
+
+ if ( $2 > $4 )
+ synerr( _("negative range in character class") );
+
+ else
+ {
+ for ( i = $2; i <= $4; ++i )
+ ccladd( $1, i );
+
+ /* Keep track if this ccl is staying in
+ * alphabetical order.
+ */
+ cclsorted = cclsorted && ($2 > lastchar);
+ lastchar = $4;
+
+ /* Do it again for upper/lowercase */
+ if (sf_case_ins() && has_case($2) && has_case($4)){
+ $2 = reverse_case ($2);
+ $4 = reverse_case ($4);
+
+ for ( i = $2; i <= $4; ++i )
+ ccladd( $1, i );
+
+ cclsorted = cclsorted && ($2 > lastchar);
+ lastchar = $4;
+ }
+
+ }
+
+ $$ = $1;
+ insert_after(3, "</RegexCharacterOr>");
+ insert_after(3, "</RegexCharacterLiteral>");
+ sprintf(piece_temp, "<RegexCharacterLiteral character_set=\"%d %d\">", $2, $4 + 1);
+ insert_before(1, piece_temp);
+ insert_before(0, "<RegexCharacterOr>");
+ }
+
+ | ccl CHAR
+ {
+ ccladd( $1, $2 );
+ cclsorted = cclsorted && ($2 > lastchar);
+ lastchar = $2;
+
+ /* Do it again for upper/lowercase */
+ if (sf_case_ins() && has_case($2)){
+ $2 = reverse_case ($2);
+ ccladd ($1, $2);
+
+ cclsorted = cclsorted && ($2 > lastchar);
+ lastchar = $2;
+ }
+
+ $$ = $1;
+ insert_after(1, "</RegexCharacterOr>");
+ insert_after(1, "</RegexCharacterLiteral>");
+ sprintf(piece_temp, "<RegexCharacterLiteral character_set=\"%d %d\">", $2, $2 + 1);
+ insert_before(1, piece_temp);
+ insert_before(0, "<RegexCharacterOr>");
+ }
+
+ | ccl ccl_expr
+ {
+ /* Too hard to properly maintain cclsorted. */
+ cclsorted = false;
+ $$ = $1;
+ insert_after(1, "</RegexCharacterOr>");
+ insert_before(0, "<RegexCharacterOr>");
+ }
+
+ |
+ {
+ cclsorted = true;
+ lastchar = 0;
+ currccl = $$ = cclinit();
+ insert_before(0, "<RegexCharacterLiteral character_set=\"\" />");
+ }
+ ;
+
+ccl_expr:
+ CCE_ALNUM { CCL_EXPR(isalnum); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"48 58 65 91 97 123\">");
+ }
+ | CCE_ALPHA { CCL_EXPR(isalpha); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"65 91 97 123\">");
+ }
+ | CCE_BLANK { CCL_EXPR(IS_BLANK); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"9 10 32 33\">");
+ }
+ | CCE_CNTRL { CCL_EXPR(iscntrl); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 32\">");
+ }
+ | CCE_DIGIT { CCL_EXPR(isdigit); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"48 58\">");
+ }
+ | CCE_GRAPH { CCL_EXPR(isgraph); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"33 127\">");
+ }
+ | CCE_LOWER {
+ CCL_EXPR(islower);
+ if (sf_case_ins())
+ {
+ CCL_EXPR(isupper);
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"65 91 97 123\">");
+ }
+ else
+ {
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"97 123\">");
+ }
+ }
+ | CCE_PRINT { CCL_EXPR(isprint); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"32 127\">");
+ }
+ | CCE_PUNCT { CCL_EXPR(ispunct); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"33 48 58 65 91 97 123 127\">");
+ }
+ | CCE_SPACE { CCL_EXPR(isspace); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"9 14 32 33\">");
+ }
+ | CCE_XDIGIT { CCL_EXPR(isxdigit); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"48 58 65 71 97 103\">");
+ }
+ | CCE_UPPER {
+ CCL_EXPR(isupper);
+ if (sf_case_ins())
+ {
+ CCL_EXPR(islower);
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"65 91 97 123\">");
+ }
+ else
+ {
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"65 91\">");
+ }
+ }
+
+ | CCE_NEG_ALNUM { CCL_NEG_EXPR(isalnum); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 48 58 65 91 97 123 256\">");
+ }
+ | CCE_NEG_ALPHA { CCL_NEG_EXPR(isalpha); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 65 91 97 123 256\">");
+ }
+ | CCE_NEG_BLANK { CCL_NEG_EXPR(IS_BLANK); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 9 10 32 33 256\">");
+ }
+ | CCE_NEG_CNTRL { CCL_NEG_EXPR(iscntrl); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"32 256\">");
+ }
+ | CCE_NEG_DIGIT { CCL_NEG_EXPR(isdigit); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 48 58 256\">");
+ }
+ | CCE_NEG_GRAPH { CCL_NEG_EXPR(isgraph); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 33 127 256\">");
+ }
+ | CCE_NEG_PRINT { CCL_NEG_EXPR(isprint); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 32 127 256\">");
+ }
+ | CCE_NEG_PUNCT { CCL_NEG_EXPR(ispunct); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 33 48 58 65 91 97 123 127 256\">");
+ }
+ | CCE_NEG_SPACE { CCL_NEG_EXPR(isspace); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 9 14 32 33 256\">");
+ }
+ | CCE_NEG_XDIGIT { CCL_NEG_EXPR(isxdigit); /*}*/
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 48 58 65 71 97 103 256\">");
+ }
+ | CCE_NEG_LOWER {
+ if ( sf_case_ins() )
+ lwarn(_("[:^lower:] is ambiguous in case insensitive scanner"));
+ else
+ CCL_NEG_EXPR(islower);
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 97 123 256\">");
+ }
+ | CCE_NEG_UPPER {
+ if ( sf_case_ins() )
+ lwarn(_("[:^upper:] ambiguous in case insensitive scanner"));
+ else
+ CCL_NEG_EXPR(isupper);
+ insert_after(0, "</RegexCharacterLiteral>");
+ insert_before(0, "<RegexCharacterLiteral character_set=\"0 65 91 256\">");
+ }
+ ;
+
+string : string CHAR
+ {
+ if ( $2 == nlch )
+ rule_has_nl[num_rules] = true;
+
+ ++rulelen;
+
+ if (sf_case_ins() && has_case($2))
+ $$ = mkor (mkstate($2), mkstate(reverse_case($2)));
+ else
+ $$ = mkstate ($2);
+
+ $$ = link_machines( $1, $$);
+ insert_after(1, "</RegexSequence>");
+ insert_after(1, "</RegexCharacterLiteral>");
+ sprintf(piece_temp, "<RegexCharacterLiteral character_set=\"%d %d\">", $2, $2 + 1);
+ insert_before(1, piece_temp);
+ insert_before(0, "<RegexSequence>");
+ }
+
+ |
+ { $$ = mkstate( SYM_EPSILON ); /*}*/
+ insert_before(0, "<RegexEmpty />");
+ }
+
+ ;
+
+%%
+
+
+/* build_eof_action - build the "<<EOF>>" action for the active start
+ * conditions
+ */
+
+void build_eof_action(void)
+ {
+ int i;
+ char action_text[MAXLINE];
+
+ for ( i = 1; i <= scon_stk_ptr; ++i )
+ {
+ if ( sceof[scon_stk[i]] )
+ format_pinpoint_message(
+ "multiple <<EOF>> rules for start condition %s",
+ scname[scon_stk[i]] );
+
+ else
+ {
+ sceof[scon_stk[i]] = true;
+
+ if (previous_continued_action /* && previous action was regular */)
+ add_action("YY_RULE_SETUP\n");
+
+ snprintf( action_text, sizeof(action_text), "case YY_STATE_EOF(%s):\n",
+ scname[scon_stk[i]] );
+ add_action( action_text );
+ }
+ }
+
+ line_directive_out(NULL, 1);
+ add_action("[[");
+
+ /* This isn't a normal rule after all - don't count it as
+ * such, so we don't have any holes in the rule numbering
+ * (which make generating "rule can never match" warnings
+ * more difficult.
+ */
+ --num_rules;
+ ++num_eof_rules;
+ }
+
+
+/* format_synerr - write out formatted syntax error */
+
+void format_synerr( const char *msg, const char arg[] )
+ {
+ char errmsg[MAXLINE];
+
+ (void) snprintf( errmsg, sizeof(errmsg), msg, arg );
+ synerr( errmsg );
+ }
+
+
+/* synerr - report a syntax error */
+
+void synerr( const char *str )
+ {
+ syntaxerror = true;
+ pinpoint_message( str );
+ }
+
+
+/* format_warn - write out formatted warning */
+
+void format_warn( const char *msg, const char arg[] )
+ {
+ char warn_msg[MAXLINE];
+
+ snprintf( warn_msg, sizeof(warn_msg), msg, arg );
+ lwarn( warn_msg );
+ }
+
+
+/* lwarn - report a warning, unless -w was given */
+
+void lwarn( const char *str )
+ {
+ line_warning( str, linenum );
+ }
+
+/* format_pinpoint_message - write out a message formatted with one string,
+ * pinpointing its location
+ */
+
+void format_pinpoint_message( const char *msg, const char arg[] )
+ {
+ char errmsg[MAXLINE];
+
+ snprintf( errmsg, sizeof(errmsg), msg, arg );
+ pinpoint_message( errmsg );
+ }
+
+
+/* pinpoint_message - write out a message, pinpointing its location */
+
+void pinpoint_message( const char *str )
+ {
+ line_pinpoint( str, linenum );
+ }
+
+
+/* line_warning - report a warning at a given line, unless -w was given */
+
+void line_warning( const char *str, int line )
+ {
+ char warning[MAXLINE];
+
+ if ( ! nowarn )
+ {
+ snprintf( warning, sizeof(warning), "warning, %s", str );
+ line_pinpoint( warning, line );
+ }
+ }
+
+
+/* line_pinpoint - write out a message, pinpointing it at the given line */
+
+void line_pinpoint( const char *str, int line )
+ {
+ fprintf( stderr, "%s:%d: %s\n", infilename, line, str );
+ }
+
+
+/* yyerror - eat up an error message from the parser;
+ * currently, messages are ignore
+ */
+
+void yyerror( const char *msg )
+ {
+ (void)msg;
+ }
--- /dev/null
+/* Bison Action Scanner -*- C -*-
+
+ Copyright (C) 2006-2015, 2018 Free Software Foundation, Inc.
+
+ This file is part of Bison, the GNU Compiler Compiler.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+%option debug nodefault noinput nounput noyywrap never-interactive
+%option prefix="code_" outfile="lex.yy.c"
+
+%{
+/* Work around a bug in flex 2.5.31. See Debian bug 333231
+ <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
+#undef code_wrap
+#define code_wrap() 1
+
+#define FLEX_PREFIX(Id) code_ ## Id
+#include <src/flex-scanner.h>
+
+#include <src/complain.h>
+#include <src/reader.h>
+#include <src/getargs.h>
+#include <src/muscle-tab.h>
+#include <src/scan-code.h>
+#include <src/symlist.h>
+
+#include <c-ctype.h>
+#include <get-errno.h>
+#include <quote.h>
+
+/* The current calling start condition: SC_RULE_ACTION or
+ SC_SYMBOL_ACTION. */
+# define YY_DECL static char *code_lex (code_props *self, int sc_context)
+YY_DECL;
+
+#define YY_USER_ACTION location_compute (loc, &loc->end, yytext, yyleng);
+
+static char *fetch_type_name (char *cp, char const **type_name,
+ location dollar_loc);
+
+static void handle_action_dollar (symbol_list *rule, char *cp,
+ location dollar_loc);
+static void handle_action_at (symbol_list *rule, char *cp, location at_loc);
+
+/* A string to be pushed to obstack after dollar/at has been handled. */
+static char *ref_tail_fields;
+
+static location the_location;
+static location *loc = &the_location;
+
+/* A string representing the most recent translation. */
+static char *last_string;
+
+/* True if an untyped $$ or $n was seen. */
+static bool untyped_var_seen;
+
+/* Nick */
+char code_piece_temp[100], *code_piece[10000];
+int code_piece0, code_piece1;
+
+void code_piece_append(const char *str);
+void code_piece_escape(const char *p, size_t n);
+void code_piece_flush(size_t n);
+void code_piece_pack();
+
+int no_handle_action;
+
+%}
+ /* C and C++ comments in code. */
+%x SC_COMMENT SC_LINE_COMMENT
+ /* Strings and characters in code. */
+%x SC_STRING SC_CHARACTER
+ /* Whether in a rule or symbol action. Specifies the translation
+ of $ and @. */
+%x SC_RULE_ACTION SC_SYMBOL_ACTION
+
+
+/* POSIX says that a tag must be both an id and a C union member, but
+ historically almost any character is allowed in a tag. We disallow
+ NUL and newline, as this simplifies our implementation. We allow
+ "->" as a means to dereference a pointer. */
+tag ([^\0\n>]|->)+
+
+/* Zero or more instances of backslash-newline. Following GCC, allow
+ white space between the backslash and the newline. */
+splice (\\[ \f\t\v]*\n)*
+
+/* C style identifier. Must start with letter. Will be used for
+ named symbol references. Shall be kept synchronized with
+ scan-gram.l "letter" and "id". */
+letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
+id {letter}({letter}|[-0-9])*
+ref -?[0-9]+|{id}|"["{id}"]"|"$"
+
+%%
+
+%{
+ /* This scanner is special: it is invoked only once, henceforth
+ is expected to return only once. This initialization is
+ therefore done once per action to translate. */
+ aver (sc_context == SC_SYMBOL_ACTION
+ || sc_context == SC_RULE_ACTION
+ || sc_context == INITIAL);
+ BEGIN sc_context;
+%}
+
+ /*------------------------------------------------------------.
+ | Scanning a C comment. The initial '/ *' is already eaten. |
+ `------------------------------------------------------------*/
+
+<SC_COMMENT>
+{
+ "*"{splice}"/" STRING_GROW; BEGIN sc_context;
+}
+
+
+ /*--------------------------------------------------------------.
+ | Scanning a line comment. The initial '//' is already eaten. |
+ `--------------------------------------------------------------*/
+
+<SC_LINE_COMMENT>
+{
+ "\n" STRING_GROW; BEGIN sc_context;
+ {splice} STRING_GROW;
+}
+
+
+ /*--------------------------------------------.
+ | Scanning user-code characters and strings. |
+ `--------------------------------------------*/
+
+<SC_CHARACTER,SC_STRING>
+{
+ {splice}|\\{splice}. STRING_GROW;
+}
+
+<SC_CHARACTER>
+{
+ "'" STRING_GROW; BEGIN sc_context;
+}
+
+<SC_STRING>
+{
+ "\"" STRING_GROW; BEGIN sc_context;
+}
+
+
+<SC_RULE_ACTION,SC_SYMBOL_ACTION>
+{
+ "'" STRING_GROW; BEGIN SC_CHARACTER;
+ "\"" STRING_GROW; BEGIN SC_STRING;
+ "/"{splice}"*" STRING_GROW; BEGIN SC_COMMENT;
+ "/"{splice}"/" STRING_GROW; BEGIN SC_LINE_COMMENT;
+
+ [$@] {
+ complain (loc, Wother, _("stray '%s'"), yytext);
+ obstack_escape (&obstack_for_string, yytext);
+ }
+}
+
+<SC_RULE_ACTION>
+{
+ "$"("<"{tag}">")?{ref} {
+ ref_tail_fields = NULL;
+ handle_action_dollar (self->rule, yytext, *loc);
+ if (ref_tail_fields)
+ obstack_sgrow (&obstack_for_string, ref_tail_fields);
+ }
+ "@"{ref} {
+ ref_tail_fields = NULL;
+ handle_action_at (self->rule, yytext, *loc);
+ if (ref_tail_fields)
+ obstack_sgrow (&obstack_for_string, ref_tail_fields);
+ }
+}
+
+<SC_SYMBOL_ACTION>
+{
+ "$"("<"{tag}">")?"$" {
+ int i = sprintf(code_piece_temp, "<PYACC_Text_ValueReference tag_name=\"");
+ int j = i + sprintf(code_piece_temp + i, "%s", yytext + 2);
+ while (j > i && code_piece_temp[--j] != '>')
+ ;
+ sprintf(code_piece_temp + j, "\">");
+ code_piece_append(code_piece_temp);
+ i = strlen(yytext);
+ code_piece_escape(yytext, i);
+ code_piece_append("</PYACC_Text_ValueReference>");
+ const char *type_name = NULL;
+ fetch_type_name (yytext + 1, &type_name, *loc)[-1] = 0;
+ obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar(");
+ obstack_quote (&obstack_for_string, type_name);
+ obstack_sgrow (&obstack_for_string, ")[");
+ self->is_value_used = true;
+ yytext += i;
+ }
+ "@$" {
+ obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
+ muscle_percent_define_ensure("locations", the_location, true);
+ code_piece_append("<PYACC_Text_ValueLocation>");
+ code_piece_flush(strlen(yytext));
+ code_piece_append("</PYACC_Text_ValueLocation>");
+ }
+}
+
+
+<*>
+{
+ /* Escape M4 quoting characters in C code. */
+ [$@\[\]] obstack_escape (&obstack_for_string, yytext);
+
+ /* By default, grow the string obstack with the input. */
+ .|\n STRING_GROW;
+
+ /* End of processing. */
+ <<EOF>> STRING_FINISH; /*code_piece_pack(); --code_piece0;*/ return last_string;
+}
+
+%%
+
+static inline bool
+is_dot_or_dash (char ch)
+{
+ return ch == '.' || ch == '-';
+}
+
+static inline bool
+contains_dot_or_dash (const char* p)
+{
+ for (; *p; ++p)
+ if (is_dot_or_dash (*p))
+ return true;
+ return false;
+}
+
+/* Defines a variant of a symbolic name resolution. */
+typedef struct
+{
+ /* Index in symbol list. */
+ unsigned symbol_index;
+
+ /* Matched symbol id and loc. */
+ uniqstr id;
+ location loc;
+
+ /* Hiding named reference. */
+ named_ref* hidden_by;
+
+ /* Error flags. May contain zero (no errors) or
+ a combination of VARIANT_* values. */
+ unsigned err;
+} variant;
+
+/* Set when the variant refers to a symbol hidden
+ by an explicit symbol reference. */
+#define VARIANT_HIDDEN (1 << 0)
+
+/* Set when the variant refers to a symbol containing
+ dots or dashes. Will require explicit bracketing. */
+#define VARIANT_BAD_BRACKETING (1 << 1)
+
+/* Set when the variant refers to a symbol which is
+ not visible from current midrule. */
+#define VARIANT_NOT_VISIBLE_FROM_MIDRULE (1 << 2)
+
+static variant *variant_table = NULL;
+static unsigned variant_table_size = 0;
+static unsigned variant_count = 0;
+
+static variant *
+variant_table_grow (void)
+{
+ ++variant_count;
+ if (variant_count > variant_table_size)
+ {
+ while (variant_count > variant_table_size)
+ variant_table_size = 2 * variant_table_size + 3;
+ variant_table = xnrealloc (variant_table, variant_table_size,
+ sizeof *variant_table);
+ }
+ return &variant_table[variant_count - 1];
+}
+
+static void
+variant_table_free (void)
+{
+ free (variant_table);
+ variant_table = NULL;
+ variant_table_size = variant_count = 0;
+}
+
+static char *
+find_prefix_end (const char *prefix, char *begin, char *end)
+{
+ char *ptr = begin;
+
+ for (; *prefix && ptr != end; ++prefix, ++ptr)
+ if (*prefix != *ptr)
+ return 0;
+
+ if (*prefix)
+ return 0;
+
+ return ptr;
+}
+
+static variant *
+variant_add (uniqstr id, location id_loc, unsigned symbol_index,
+ char *cp, char *cp_end, bool explicit_bracketing)
+{
+ char *prefix_end;
+
+ prefix_end = find_prefix_end (id, cp, cp_end);
+ if (prefix_end &&
+ (prefix_end == cp_end ||
+ (!explicit_bracketing && is_dot_or_dash (*prefix_end))))
+ {
+ variant *r = variant_table_grow ();
+ r->symbol_index = symbol_index;
+ r->id = id;
+ r->loc = id_loc;
+ r->hidden_by = NULL;
+ r->err = 0;
+ return r;
+ }
+ else
+ return NULL;
+}
+
+static const char *
+get_at_spec(unsigned symbol_index)
+{
+ static char at_buf[20];
+ if (symbol_index == 0)
+ strcpy (at_buf, "$$");
+ else
+ snprintf (at_buf, sizeof at_buf, "$%u", symbol_index);
+ return at_buf;
+}
+
+static void
+show_sub_message (warnings warning,
+ const char* cp, bool explicit_bracketing,
+ int midrule_rhs_index, char dollar_or_at,
+ unsigned indent, const variant *var)
+{
+ const char *at_spec = get_at_spec (var->symbol_index);
+
+ if (var->err == 0)
+ complain_indent (&var->loc, warning, &indent,
+ _("refers to: %c%s at %s"), dollar_or_at,
+ var->id, at_spec);
+ else
+ {
+ static struct obstack msg_buf;
+ const char *tail = explicit_bracketing ? "" : cp + strlen (var->id);
+ const char *id;
+ location id_loc;
+
+ if (var->hidden_by)
+ {
+ id = var->hidden_by->id;
+ id_loc = var->hidden_by->loc;
+ }
+ else
+ {
+ id = var->id;
+ id_loc = var->loc;
+ }
+
+ /* Create the explanation message. */
+ obstack_init (&msg_buf);
+
+ obstack_printf (&msg_buf, _("possibly meant: %c"), dollar_or_at);
+ if (contains_dot_or_dash (id))
+ obstack_printf (&msg_buf, "[%s]", id);
+ else
+ obstack_sgrow (&msg_buf, id);
+ obstack_sgrow (&msg_buf, tail);
+
+ if (var->err & VARIANT_HIDDEN)
+ {
+ obstack_printf (&msg_buf, _(", hiding %c"), dollar_or_at);
+ if (contains_dot_or_dash (var->id))
+ obstack_printf (&msg_buf, "[%s]", var->id);
+ else
+ obstack_sgrow (&msg_buf, var->id);
+ obstack_sgrow (&msg_buf, tail);
+ }
+
+ obstack_printf (&msg_buf, _(" at %s"), at_spec);
+
+ if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE)
+ obstack_printf (&msg_buf,
+ _(", cannot be accessed from mid-rule action at $%d"),
+ midrule_rhs_index);
+
+ complain_indent (&id_loc, warning, &indent, "%s",
+ obstack_finish0 (&msg_buf));
+ obstack_free (&msg_buf, 0);
+ }
+}
+
+static void
+show_sub_messages (warnings warning,
+ const char* cp, bool explicit_bracketing,
+ int midrule_rhs_index, char dollar_or_at,
+ unsigned indent)
+{
+ unsigned i;
+
+ for (i = 0; i < variant_count; ++i)
+ show_sub_message (warning | silent,
+ cp, explicit_bracketing,
+ midrule_rhs_index, dollar_or_at,
+ indent, &variant_table[i]);
+}
+
+/* Returned from "parse_ref" when the reference
+ is inappropriate. */
+#define INVALID_REF (INT_MIN)
+
+/* Returned from "parse_ref" when the reference
+ points to LHS ($$) of the current rule or midrule. */
+#define LHS_REF (INT_MIN + 1)
+
+/* Parse named or positional reference. In case of positional
+ references, can return negative values for $-n "deep" stack
+ accesses. */
+static long int
+parse_ref (char *cp, symbol_list *rule, int rule_length,
+ int midrule_rhs_index, char *text, location text_loc,
+ char dollar_or_at)
+{
+ symbol_list *l;
+ char *cp_end;
+ bool explicit_bracketing;
+ unsigned i;
+ unsigned valid_variants = 0;
+ unsigned valid_variant_index = 0;
+
+ if ('$' == *cp)
+ return LHS_REF;
+
+ if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1))))
+ {
+ long int num = strtol (cp, &cp, 10);
+ if (1 - INT_MAX + rule_length <= num && num <= rule_length)
+ return num;
+ else
+ {
+ complain (&text_loc, complaint, _("integer out of range: %s"),
+ quote (text));
+ return INVALID_REF;
+ }
+ }
+
+ if ('[' == *cp)
+ {
+ /* Ignore the brackets. */
+ char *p;
+ for (p = ++cp; *p != ']'; ++p)
+ continue;
+ cp_end = p;
+
+ explicit_bracketing = true;
+ }
+ else
+ {
+ /* Take all characters of the name. */
+ char* p;
+ for (p = cp; *p; ++p)
+ if (is_dot_or_dash (*p))
+ {
+ ref_tail_fields = p;
+ break;
+ }
+ for (p = cp; *p; ++p)
+ continue;
+ cp_end = p;
+
+ explicit_bracketing = false;
+ }
+
+ /* Add all relevant variants. */
+ {
+ unsigned symbol_index;
+ variant_count = 0;
+ for (symbol_index = 0, l = rule; !symbol_list_null (l);
+ ++symbol_index, l = l->next)
+ {
+ variant *var;
+ if (l->content_type != SYMLIST_SYMBOL)
+ continue;
+
+ var = variant_add (l->content.sym->tag, l->sym_loc,
+ symbol_index, cp, cp_end, explicit_bracketing);
+ if (var && l->named_ref)
+ var->hidden_by = l->named_ref;
+
+ if (l->named_ref)
+ variant_add (l->named_ref->id, l->named_ref->loc,
+ symbol_index, cp, cp_end, explicit_bracketing);
+ }
+ }
+
+ /* Check errors. */
+ for (i = 0; i < variant_count; ++i)
+ {
+ variant *var = &variant_table[i];
+ unsigned symbol_index = var->symbol_index;
+
+ /* Check visibility from mid-rule actions. */
+ if (midrule_rhs_index != 0
+ && (symbol_index == 0 || midrule_rhs_index < symbol_index))
+ var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE;
+
+ /* Check correct bracketing. */
+ if (!explicit_bracketing && contains_dot_or_dash (var->id))
+ var->err |= VARIANT_BAD_BRACKETING;
+
+ /* Check using of hidden symbols. */
+ if (var->hidden_by)
+ var->err |= VARIANT_HIDDEN;
+
+ if (!var->err)
+ {
+ valid_variant_index = i;
+ ++valid_variants;
+ }
+ }
+
+ switch (valid_variants)
+ {
+ case 0:
+ {
+ unsigned len = (explicit_bracketing || !ref_tail_fields) ?
+ cp_end - cp : ref_tail_fields - cp;
+ unsigned indent = 0;
+
+ complain_indent (&text_loc, complaint, &indent,
+ _("invalid reference: %s"), quote (text));
+ indent += SUB_INDENT;
+ if (len == 0)
+ {
+ location sym_loc = text_loc;
+ sym_loc.start.column += 1;
+ sym_loc.end = sym_loc.start;
+ complain_indent (&sym_loc, complaint, &indent,
+ _("syntax error after '%c', expecting integer, "
+ "letter, '_', '[', or '$'"),
+ dollar_or_at);
+ }
+ else if (midrule_rhs_index)
+ complain_indent (&rule->location, complaint, &indent,
+ _("symbol not found in production before $%d: "
+ "%.*s"),
+ midrule_rhs_index, len, cp);
+ else
+ complain_indent (&rule->location, complaint, &indent,
+ _("symbol not found in production: %.*s"),
+ len, cp);
+
+ if (variant_count > 0)
+ show_sub_messages (complaint,
+ cp, explicit_bracketing, midrule_rhs_index,
+ dollar_or_at, indent);
+ return INVALID_REF;
+ }
+ case 1:
+ {
+ unsigned indent = 0;
+ if (variant_count > 1)
+ {
+ complain_indent (&text_loc, Wother, &indent,
+ _("misleading reference: %s"), quote (text));
+ show_sub_messages (Wother,
+ cp, explicit_bracketing, midrule_rhs_index,
+ dollar_or_at, indent + SUB_INDENT);
+ }
+ {
+ unsigned symbol_index =
+ variant_table[valid_variant_index].symbol_index;
+ return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index;
+ }
+ }
+ case 2:
+ default:
+ {
+ unsigned indent = 0;
+ complain_indent (&text_loc, complaint, &indent,
+ _("ambiguous reference: %s"), quote (text));
+ show_sub_messages (complaint,
+ cp, explicit_bracketing, midrule_rhs_index,
+ dollar_or_at, indent + SUB_INDENT);
+ return INVALID_REF;
+ }
+ }
+}
+
+/* Keeps track of the maximum number of semantic values to the left of
+ a handle (those referenced by $0, $-1, etc.) are required by the
+ semantic actions of this grammar. */
+int max_left_semantic_context = 0;
+
+
+/* If CP points to a typename (i.e., <.*?>), set TYPE_NAME to its
+ beginning (i.e., after the opening "<", and return the pointer
+ immediately after it. */
+
+static
+char *
+fetch_type_name (char *cp, char const **type_name,
+ location dollar_loc)
+{
+ if (*cp == '<')
+ {
+ *type_name = ++cp;
+ /* Series of non-'>' or "->". */
+ while (*cp != '>' || cp[-1] == '-')
+ ++cp;
+
+ /* The '>' symbol will be later replaced by '\0'. Original
+ 'text' is needed for error messages. */
+ ++cp;
+ if (untyped_var_seen)
+ complain (&dollar_loc, complaint,
+ _("explicit type given in untyped grammar"));
+ tag_seen = true;
+ }
+ return cp;
+}
+
+/*------------------------------------------------------------------.
+| TEXT is pointing to a wannabee semantic value (i.e., a '$'). |
+| |
+| Possible inputs: $[<TYPENAME>]($|integer) |
+| |
+| Output to OBSTACK_FOR_STRING a reference to this semantic value. |
+`------------------------------------------------------------------*/
+
+static void
+handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
+{
+ char const *type_name = NULL;
+ char *cp = text + 1;
+ symbol_list *effective_rule;
+ int effective_rule_length;
+ int n;
+
+ if (rule->midrule_parent_rule)
+ {
+ effective_rule = rule->midrule_parent_rule;
+ effective_rule_length = rule->midrule_parent_rhs_index - 1;
+ }
+ else
+ {
+ effective_rule = rule;
+ effective_rule_length = symbol_list_length (rule->next);
+ }
+
+ /* Get the type name if explicit. */
+ cp = fetch_type_name (cp, &type_name, dollar_loc);
+
+ n = parse_ref (cp, effective_rule, effective_rule_length,
+ rule->midrule_parent_rhs_index, text, dollar_loc, '$');
+#if 1
+ if (n == LHS_REF) {
+ int i = sprintf(code_piece_temp, "<PYACC_Text_ValueReference tag_name=\"");
+ int j = i + sprintf(code_piece_temp + i, "%s", yytext + 2);
+ while (j > i && code_piece_temp[--j] != '>')
+ ;
+ sprintf(code_piece_temp + j, "\">");
+ code_piece_append(code_piece_temp);
+ code_piece_flush(strlen(yytext));
+ code_piece_append("</PYACC_Text_ValueReference>");
+ }
+ else {
+ int i = sprintf(code_piece_temp, "<PYACC_Text_StackReference tag_name=\"");
+ int j = i + sprintf(code_piece_temp + i, "%s", yytext + 2);
+ while (j > i && code_piece_temp[--j] != '>')
+ ;
+ sprintf(code_piece_temp + j, "\" index=\"%d\">", n);
+ code_piece_append(code_piece_temp);
+ code_piece_flush(strlen(yytext));
+ code_piece_append("</PYACC_Text_StackReference>");
+ }
+ if (no_handle_action)
+ return;
+#endif
+
+ /* End type_name. */
+ if (type_name)
+ cp[-1] = '\0';
+
+ switch (n)
+ {
+ case INVALID_REF:
+ break;
+
+ case LHS_REF:
+ if (!type_name)
+ type_name = symbol_list_n_type_name_get (rule, 0);
+
+ if (!type_name)
+ {
+ if (union_seen | tag_seen)
+ {
+ if (rule->midrule_parent_rule)
+ complain (&dollar_loc, complaint,
+ _("$$ for the midrule at $%d of %s"
+ " has no declared type"),
+ rule->midrule_parent_rhs_index,
+ quote (effective_rule->content.sym->tag));
+ else
+ complain (&dollar_loc, complaint,
+ _("$$ of %s has no declared type"),
+ quote (rule->content.sym->tag));
+ }
+ else
+ untyped_var_seen = true;
+ }
+
+ obstack_sgrow (&obstack_for_string, "]b4_lhs_value(");
+ obstack_quote (&obstack_for_string, type_name);
+ obstack_sgrow (&obstack_for_string, ")[");
+ rule->action_props.is_value_used = true;
+ break;
+
+ default:
+ if (max_left_semantic_context < 1 - n)
+ max_left_semantic_context = 1 - n;
+ if (!type_name && 0 < n)
+ type_name = symbol_list_n_type_name_get (effective_rule, n);
+ if (!type_name)
+ {
+ if (union_seen | tag_seen)
+ complain (&dollar_loc, complaint,
+ _("$%s of %s has no declared type"), cp,
+ quote (effective_rule->content.sym->tag));
+ else
+ untyped_var_seen = true;
+ }
+
+ obstack_printf (&obstack_for_string,
+ "]b4_rhs_value(%d, %d, ", effective_rule_length, n);
+ obstack_quote (&obstack_for_string, type_name);
+ obstack_sgrow (&obstack_for_string, ")[");
+ if (0 < n)
+ symbol_list_n_get (effective_rule, n)->action_props.is_value_used =
+ true;
+ break;
+ }
+}
+
+
+/*------------------------------------------------------.
+| TEXT is a location token (i.e., a '@...'). Output to |
+| OBSTACK_FOR_STRING a reference to this location. |
+`------------------------------------------------------*/
+
+static void
+handle_action_at (symbol_list *rule, char *text, location at_loc)
+{
+ char *cp = text + 1;
+ symbol_list *effective_rule;
+ int effective_rule_length;
+ int n;
+
+ if (rule->midrule_parent_rule)
+ {
+ effective_rule = rule->midrule_parent_rule;
+ effective_rule_length = rule->midrule_parent_rhs_index - 1;
+ }
+ else
+ {
+ effective_rule = rule;
+ effective_rule_length = symbol_list_length (rule->next);
+ }
+
+ muscle_percent_define_ensure("locations", at_loc, true);
+
+ n = parse_ref (cp, effective_rule, effective_rule_length,
+ rule->midrule_parent_rhs_index, text, at_loc, '@');
+#if 1
+ if (n == LHS_REF) {
+ code_piece_append("<PYACC_Text_ValueLocation>");
+ code_piece_flush(strlen(yytext));
+ code_piece_append("</PYACC_Text_ValueLocation>");
+ }
+ else {
+ sprintf(code_piece_temp, "<PYACC_Text_StackLocation index=\"%d\">", n);
+ code_piece_append(code_piece_temp);
+ code_piece_flush(strlen(yytext));
+ code_piece_append("</PYACC_Text_StackLocation>");
+ }
+ if (no_handle_action)
+ return;
+#endif
+ switch (n)
+ {
+ case INVALID_REF:
+ break;
+
+ case LHS_REF:
+ obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
+ break;
+
+ default:
+ obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
+ effective_rule_length, n);
+ break;
+ }
+}
+
+
+/*-------------------------.
+| Initialize the scanner. |
+`-------------------------*/
+
+/* Translate the dollars and ats in \a self, in the context \a sc_context
+ (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL). */
+
+static char const *
+translate_action (code_props *self, int sc_context)
+{
+ char *res;
+ static bool initialized = false;
+ if (!initialized)
+ {
+ obstack_init (&obstack_for_string);
+ yy_flex_debug = 0;
+ initialized = true;
+ }
+
+ loc->start = loc->end = self->location.start;
+ yy_switch_to_buffer (yy_scan_string (self->code));
+ res = code_lex (self, sc_context);
+ yy_delete_buffer (YY_CURRENT_BUFFER);
+
+ return res;
+}
+
+/*------------------------------------------------------------------------.
+| Implementation of the public interface as documented in "scan-code.h". |
+`------------------------------------------------------------------------*/
+
+void
+code_props_none_init (code_props *self)
+{
+ *self = code_props_none;
+}
+
+code_props code_props_none = CODE_PROPS_NONE_INIT;
+
+void
+code_props_plain_init (code_props *self, char const *code,
+ location code_loc)
+{
+ code_props_none_init (self);
+ self->kind = CODE_PROPS_PLAIN;
+ self->code = code;
+ self->location = code_loc;
+}
+
+void
+code_props_symbol_action_init (code_props *self, char const *code,
+ location code_loc)
+{
+ code_props_none_init (self);
+ self->kind = CODE_PROPS_SYMBOL_ACTION;
+ self->code = code;
+ self->location = code_loc;
+}
+
+void
+code_props_rule_action_init (code_props *self, char const *code,
+ location code_loc, symbol_list *rule,
+ named_ref *name, bool is_predicate)
+{
+ code_props_none_init (self);
+ self->kind = CODE_PROPS_RULE_ACTION;
+ self->code = code;
+ self->location = code_loc;
+ self->rule = rule;
+ self->named_ref = name;
+ self->is_predicate = is_predicate;
+}
+
+void
+code_props_translate_code (code_props *self)
+{
+ switch (self->kind)
+ {
+ case CODE_PROPS_NONE:
+ break;
+ case CODE_PROPS_PLAIN:
+ self->code = translate_action (self, INITIAL);
+ break;
+ case CODE_PROPS_SYMBOL_ACTION:
+ self->code = translate_action (self, SC_SYMBOL_ACTION);
+ break;
+ case CODE_PROPS_RULE_ACTION:
+ self->code = translate_action (self, SC_RULE_ACTION);
+ break;
+ }
+}
+
+void
+code_scanner_last_string_free (void)
+{
+ STRING_FREE;
+}
+
+void
+code_scanner_free (void)
+{
+ obstack_free (&obstack_for_string, 0);
+ variant_table_free ();
+
+ /* Reclaim Flex's buffers. */
+ yylex_destroy ();
+}
+
+/* Nick */
+void code_piece_append(const char *str) {
+ code_piece[code_piece1++] = strdup(str);
+}
+
+void code_piece_escape(const char *p, size_t n) {
+ size_t i, j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ case '>':
+ j += 4;
+ break;
+ case '&':
+ j += 5;
+ break;
+ default:
+ ++j;
+ break;
+ }
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ memcpy(q + j, "<", 4);
+ j += 4;
+ break;
+ case '>':
+ memcpy(q + j, ">", 4);
+ j += 4;
+ break;
+ case '&':
+ memcpy(q + j, "&", 5);
+ j += 5;
+ break;
+ default:
+ q[j++] = p[i];
+ break;
+ }
+ q[j] = 0;
+ code_piece[code_piece1++] = q;
+}
+
+void code_piece_flush(size_t n) {
+ code_piece_escape(yytext, n);
+ yytext += n;
+}
+
+void code_piece_pack() {
+ int i;
+ size_t j = 0;
+ for (i = code_piece0; i < code_piece1; ++i)
+ j += strlen(code_piece[i]);
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = code_piece0; i < code_piece1; ++i) {
+ int k = strlen(code_piece[i]);
+ memcpy(q + j, code_piece[i], k);
+ free(code_piece[i]);
+ j += k;
+ }
+ q[j] = 0;
+ code_piece[code_piece0++] = q;
+ code_piece1 = code_piece0;
+}
--- /dev/null
+/* Bison Grammar Scanner -*- C -*-
+
+ Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
+
+ This file is part of Bison, the GNU Compiler Compiler.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+%option debug nodefault noinput noyywrap never-interactive
+%option prefix="gram_" outfile="lex.yy.c"
+
+%{
+/* Work around a bug in flex 2.5.31. See Debian bug 333231
+ <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
+#undef gram_wrap
+#define gram_wrap() 1
+
+#define FLEX_PREFIX(Id) gram_ ## Id
+#include <src/flex-scanner.h>
+
+#include <src/complain.h>
+#include <src/files.h>
+#include <src/getargs.h>
+#include <src/gram.h>
+#include <quotearg.h>
+#include <src/reader.h>
+#include <src/uniqstr.h>
+
+#include <c-ctype.h>
+#include <mbswidth.h>
+#include <quote.h>
+
+#include <src/scan-gram.h>
+
+#if 1
+#define YY_DECL static int real_gram_lex (GRAM_STYPE *val, location *loc)
+#else
+#define YY_DECL GRAM_LEX_DECL
+#endif
+
+/* Location of scanner cursor. */
+static boundary scanner_cursor;
+
+#define YY_USER_ACTION location_compute (loc, &scanner_cursor, yytext, yyleng);
+
+static size_t no_cr_read (FILE *, char *, size_t);
+#define YY_INPUT(buf, result, size) ((result) = no_cr_read (yyin, buf, size))
+
+#define RETURN_PERCENT_PARAM(Value) \
+ RETURN_VALUE(PERCENT_PARAM, param, param_ ## Value)
+
+#define RETURN_PERCENT_FLAG(Value) \
+ RETURN_VALUE(PERCENT_FLAG, uniqstr, uniqstr_new (Value))
+
+#define RETURN_VALUE(Token, Field, Value) \
+ do { \
+ val->Field = Value; \
+ return Token; \
+ } while (0)
+
+#define ROLLBACK_CURRENT_TOKEN \
+ do { \
+ scanner_cursor.column -= mbsnwidth (yytext, yyleng, 0); \
+ yyless (0); \
+ } while (0)
+
+#define DEPRECATED(Msg) \
+ do { \
+ size_t i; \
+ deprecated_directive (loc, yytext, Msg); \
+ scanner_cursor.column -= mbsnwidth (Msg, strlen (Msg), 0); \
+ for (i = strlen (Msg); i != 0; --i) \
+ unput (Msg[i - 1]); \
+ } while (0)
+
+/* A string representing the most recently saved token. */
+static char *last_string;
+
+/* Bracketed identifier. */
+static uniqstr bracketed_id_str = 0;
+static location bracketed_id_loc;
+static boundary bracketed_id_start;
+static int bracketed_id_context_state = 0;
+
+void
+gram_scanner_last_string_free (void)
+{
+ STRING_FREE;
+}
+
+static void handle_syncline (char *, location);
+static unsigned long int scan_integer (char const *p, int base, location loc);
+static int convert_ucn_to_byte (char const *hex_text);
+static void unexpected_eof (boundary, char const *);
+static void unexpected_newline (boundary, char const *);
+
+/* Nick */
+char gram_piece_temp[100], *gram_piece[10000];
+int gram_piece0, gram_piece1;
+
+void gram_piece_append(const char *str);
+void gram_piece_insert(int n, const char *str);
+void gram_piece_escape(const char *p, size_t n);
+void gram_piece_flush(size_t n);
+void gram_piece_pack();
+
+%}
+ /* A C-like comment in directives/rules. */
+%x SC_YACC_COMMENT
+ /* Strings and characters in directives/rules. */
+%x SC_ESCAPED_STRING SC_ESCAPED_CHARACTER
+ /* A identifier was just read in directives/rules. Special state
+ to capture the sequence 'identifier :'. */
+%x SC_AFTER_IDENTIFIER
+
+ /* POSIX says that a tag must be both an id and a C union member, but
+ historically almost any character is allowed in a tag. We
+ disallow NUL, as this simplifies our implementation. We match
+ angle brackets in nested pairs: several languages use them for
+ generics/template types. */
+%x SC_TAG
+
+ /* Four types of user code:
+ - prologue (code between '%{' '%}' in the first section, before %%);
+ - actions, printers, union, etc, (between braced in the middle section);
+ - epilogue (everything after the second %%).
+ - predicate (code between '%?{' and '{' in middle section); */
+%x SC_PROLOGUE SC_BRACED_CODE SC_EPILOGUE SC_PREDICATE
+ /* C and C++ comments in code. */
+%x SC_COMMENT SC_LINE_COMMENT
+ /* Strings and characters in code. */
+%x SC_STRING SC_CHARACTER
+ /* Bracketed identifiers support. */
+%x SC_BRACKETED_ID SC_RETURN_BRACKETED_ID
+
+letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
+notletter [^.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]{-}[%\{]
+id {letter}({letter}|[-0-9])*
+int [0-9]+
+
+/* Zero or more instances of backslash-newline. Following GCC, allow
+ white space between the backslash and the newline. */
+splice (\\[ \f\t\v]*\n)*
+
+/* An equal sign, with optional leading whitespaces. This is used in some
+ deprecated constructs. */
+eqopt ([[:space:]]*=)?
+
+%%
+%{
+ /* Nesting level. Either for nested braces, or nested angle brackets
+ (but not mixed). */
+ int nesting PACIFY_CC (= 0);
+
+ /* Parent context state, when applicable. */
+ int context_state PACIFY_CC (= 0);
+
+ /* Location of most recent identifier, when applicable. */
+ location id_loc PACIFY_CC (= empty_location);
+
+ /* Where containing code started, when applicable. Its initial
+ value is relevant only when yylex is invoked in the SC_EPILOGUE
+ start condition. */
+ boundary code_start = scanner_cursor;
+
+ /* Where containing comment or string or character literal started,
+ when applicable. */
+ boundary token_start PACIFY_CC (= scanner_cursor);
+
+ /* We cannot trust YY_USER_INIT, whose semantics changes over time
+ (it moved in Flex 2.5.38). */
+ static bool first = true;
+ if (first)
+ {
+ scanner_cursor = loc->start;
+ first = false;
+ }
+%}
+
+
+ /*-----------------------.
+ | Scanning white space. |
+ `-----------------------*/
+
+<INITIAL,SC_AFTER_IDENTIFIER,SC_BRACKETED_ID,SC_RETURN_BRACKETED_ID>
+{
+ /* Comments and white space. */
+ "," {
+ complain (loc, Wother, _("stray ',' treated as white space"));
+ }
+ [ \f\n\t\v] |
+ "//".* continue;
+ "/*" {
+ token_start = loc->start;
+ context_state = YY_START;
+ BEGIN SC_YACC_COMMENT;
+ }
+
+ /* #line directives are not documented, and may be withdrawn or
+ modified in future versions of Bison. */
+ ^"#line "{int}(" \"".*"\"")?"\n" {
+ handle_syncline (yytext + sizeof "#line " - 1, *loc);
+ }
+}
+
+
+ /*----------------------------.
+ | Scanning Bison directives. |
+ `----------------------------*/
+
+ /* For directives that are also command line options, the regex must be
+ "%..."
+ after "[-_]"s are removed, and the directive must match the --long
+ option name, with a single string argument. Otherwise, add exceptions
+ to ../build-aux/cross-options.pl. */
+
+<INITIAL>
+{
+ "%binary" return PERCENT_NONASSOC;
+ "%code" return PERCENT_CODE;
+ "%debug" RETURN_PERCENT_FLAG("parse.trace");
+ "%default-prec" return PERCENT_DEFAULT_PREC;
+ "%define" return PERCENT_DEFINE;
+ "%defines" return PERCENT_DEFINES;
+ "%destructor" return PERCENT_DESTRUCTOR;
+ "%dprec" return PERCENT_DPREC;
+ "%empty" return PERCENT_EMPTY;
+ "%error-verbose" return PERCENT_ERROR_VERBOSE;
+ "%expect" return PERCENT_EXPECT;
+ "%expect-rr" return PERCENT_EXPECT_RR;
+ "%file-prefix" return PERCENT_FILE_PREFIX;
+ "%fixed-output-files" return PERCENT_YACC;
+ "%initial-action" return PERCENT_INITIAL_ACTION;
+ "%glr-parser" return PERCENT_GLR_PARSER;
+ "%language" return PERCENT_LANGUAGE;
+ "%left" return PERCENT_LEFT;
+ "%lex-param" RETURN_PERCENT_PARAM(lex);
+ "%locations" RETURN_PERCENT_FLAG("locations");
+ "%merge" return PERCENT_MERGE;
+ "%name-prefix" return PERCENT_NAME_PREFIX;
+ "%no-default-prec" return PERCENT_NO_DEFAULT_PREC;
+ "%no-lines" return PERCENT_NO_LINES;
+ "%nonassoc" return PERCENT_NONASSOC;
+ "%nondeterministic-parser" return PERCENT_NONDETERMINISTIC_PARSER;
+ "%nterm" return PERCENT_NTERM;
+ "%output" return PERCENT_OUTPUT;
+ "%param" RETURN_PERCENT_PARAM(both);
+ "%parse-param" RETURN_PERCENT_PARAM(parse);
+ "%prec" return PERCENT_PREC;
+ "%precedence" return PERCENT_PRECEDENCE;
+ "%printer" return PERCENT_PRINTER;
+ "%pure-parser" RETURN_PERCENT_FLAG("api.pure");
+ "%require" return PERCENT_REQUIRE;
+ "%right" return PERCENT_RIGHT;
+ "%skeleton" return PERCENT_SKELETON;
+ "%start" return PERCENT_START;
+ "%term" return PERCENT_TOKEN;
+ "%token" return PERCENT_TOKEN;
+ "%token-table" return PERCENT_TOKEN_TABLE;
+ "%type" return PERCENT_TYPE;
+ "%union" return PERCENT_UNION;
+ "%verbose" return PERCENT_VERBOSE;
+ "%yacc" return PERCENT_YACC;
+
+ /* deprecated */
+ "%default"[-_]"prec" DEPRECATED("%default-prec");
+ "%error"[-_]"verbose" DEPRECATED("%define parse.error verbose");
+ "%expect"[-_]"rr" DEPRECATED("%expect-rr");
+ "%file-prefix"{eqopt} DEPRECATED("%file-prefix");
+ "%fixed"[-_]"output"[-_]"files" DEPRECATED("%fixed-output-files");
+ "%name"[-_]"prefix"{eqopt} DEPRECATED("%name-prefix");
+ "%no"[-_]"default"[-_]"prec" DEPRECATED("%no-default-prec");
+ "%no"[-_]"lines" DEPRECATED("%no-lines");
+ "%output"{eqopt} DEPRECATED("%output");
+ "%pure"[-_]"parser" DEPRECATED("%pure-parser");
+ "%token"[-_]"table" DEPRECATED("%token-table");
+
+ "%"{id} {
+ complain (loc, complaint, _("invalid directive: %s"), quote (yytext));
+ }
+
+ "=" return EQUAL;
+ "|" return PIPE;
+ ";" return SEMICOLON;
+
+ {id} {
+ val->uniqstr = uniqstr_new (yytext);
+ id_loc = *loc;
+ bracketed_id_str = NULL;
+ BEGIN SC_AFTER_IDENTIFIER;
+ gram_piece_pack();
+ gram_piece_append("<PYACC_ID>");
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("</PYACC_ID>");
+ gram_piece_pack();
+ }
+
+ {int} {
+ val->integer = scan_integer (yytext, 10, *loc);
+#if 0
+ gram_piece_pack();
+ sprintf(gram_piece_temp, "<PYACC_Int value=\"%d\">", val->integer);
+ gram_piece_append(gram_piece_temp);
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_Int>");
+ gram_piece_pack();
+ return ~INT;
+#else
+ return INT;
+#endif
+ }
+ 0[xX][0-9abcdefABCDEF]+ {
+ val->integer = scan_integer (yytext, 16, *loc);
+#if 0
+ gram_piece_pack();
+ sprintf(gram_piece_temp, "<PYACC_Int value=\"%d\">", val->integer);
+ gram_piece_append(gram_piece_temp);
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_Int>");
+ gram_piece_pack();
+ return ~INT;
+#else
+ return INT;
+#endif
+ }
+
+ /* Identifiers may not start with a digit. Yet, don't silently
+ accept "1FOO" as "1 FOO". */
+ {int}{id} {
+ complain (loc, complaint, _("invalid identifier: %s"), quote (yytext));
+ }
+
+ /* Characters. */
+ "'" token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; gram_piece_pack(); gram_piece_append("<PYACC_Char>"); gram_piece_flush(strlen(yytext)); gram_piece_append("<PYACC_Text>");
+
+ /* Strings. */
+ "\"" token_start = loc->start; BEGIN SC_ESCAPED_STRING; gram_piece_pack(); gram_piece_append("<PYACC_String>"); gram_piece_flush(strlen(yytext)); gram_piece_append("<PYACC_Text>");
+
+ /* Prologue. */
+ "%{" code_start = loc->start; BEGIN SC_PROLOGUE; gram_piece_pack(); gram_piece_append("<PYACC_Section1_Prologue>"); gram_piece_flush(strlen(yytext)); gram_piece_append("<PYACC_Text>");
+
+ /* Code in between braces. */
+ "{" {
+ STRING_GROW;
+ nesting = 0;
+ code_start = loc->start;
+ BEGIN SC_BRACED_CODE;
+ gram_piece_pack();
+ gram_piece_append("<PYACC_BracedCode>");
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("<PYACC_Text>");
+ }
+
+ /* Semantic predicate. */
+ "%?"[ \f\n\t\v]*"{" {
+ nesting = 0;
+ code_start = loc->start;
+ gram_piece_pack();
+ gram_piece_append("<PYACC_BracedPredicate>");
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("<PYACC_Text>");
+ BEGIN SC_PREDICATE;
+ }
+
+ /* A type. */
+ "<*>" gram_piece_pack(); gram_piece_append("<PYACC_TagRef><<PYACC_Text>*</PYACC_Text>></PYACC_TagRef>"); return ~TAG_ANY; /*return TAG_ANY;*/
+ "<>" gram_piece_pack(); gram_piece_append("<PYACC_TagRef><<PYACC_Text />></PYACC_TagRef>"); return ~TAG_NONE; /*return TAG_NONE;*/
+ "<" {
+ nesting = 0;
+ token_start = loc->start;
+ BEGIN SC_TAG;
+ gram_piece_pack();
+ gram_piece_append("<PYACC_TagRef>");
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("<PYACC_Text>");
+ }
+
+ "%%" {
+ static int percent_percent_count;
+ if (++percent_percent_count == 2)
+ {
+ BEGIN SC_EPILOGUE;
+ gram_piece_pack();
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_pack();
+ gram_piece_pack();
+ return ~PERCENT_PERCENT;
+ }
+ return PERCENT_PERCENT;
+ }
+
+ "[" {
+ bracketed_id_str = NULL;
+ bracketed_id_start = loc->start;
+ bracketed_id_context_state = YY_START;
+ BEGIN SC_BRACKETED_ID;
+ }
+
+ [^\[%A-Za-z0-9_<>{}\"\'*;|=/, \f\n\t\v]+|. {
+ complain (loc, complaint, "%s: %s",
+ ngettext ("invalid character", "invalid characters", yyleng),
+ quote_mem (yytext, yyleng));
+ }
+
+ <<EOF>> {
+ loc->start = loc->end = scanner_cursor;
+ yyterminate ();
+ }
+}
+
+
+ /*--------------------------------------------------------------.
+ | Supporting \0 complexifies our implementation for no expected |
+ | added value. |
+ `--------------------------------------------------------------*/
+
+<SC_ESCAPED_CHARACTER,SC_ESCAPED_STRING,SC_TAG>
+{
+ \0 complain (loc, complaint, _("invalid null character"));
+}
+
+
+ /*-----------------------------------------------------------------.
+ | Scanning after an identifier, checking whether a colon is next. |
+ `-----------------------------------------------------------------*/
+
+<SC_AFTER_IDENTIFIER>
+{
+ "[" {
+ if (bracketed_id_str)
+ {
+ ROLLBACK_CURRENT_TOKEN;
+ BEGIN SC_RETURN_BRACKETED_ID;
+ *loc = id_loc;
+ return ID;
+ }
+ else
+ {
+ bracketed_id_start = loc->start;
+ bracketed_id_context_state = YY_START;
+ BEGIN SC_BRACKETED_ID;
+ }
+ }
+ ":" {
+ BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
+ *loc = id_loc;
+#if 1
+ gram_piece_escape(yytext, strlen(yytext));
+ return ~ID_COLON;
+#else
+ return ID_COLON;
+#endif
+ }
+ . {
+ ROLLBACK_CURRENT_TOKEN;
+ BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
+ *loc = id_loc;
+#if 1
+ return ~ID;
+#else
+ return ID;
+#endif
+ }
+ <<EOF>> {
+ BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
+ *loc = id_loc;
+#if 1
+ return ~ID;
+#else
+ return ID;
+#endif
+ }
+}
+
+ /*--------------------------------.
+ | Scanning bracketed identifiers. |
+ `--------------------------------*/
+
+<SC_BRACKETED_ID>
+{
+ {id} {
+ if (bracketed_id_str)
+ {
+ complain (loc, complaint,
+ _("unexpected identifier in bracketed name: %s"),
+ quote (yytext));
+ }
+ else
+ {
+ bracketed_id_str = uniqstr_new (yytext);
+ bracketed_id_loc = *loc;
+ }
+ }
+ "]" {
+ BEGIN bracketed_id_context_state;
+ if (bracketed_id_str)
+ {
+ if (INITIAL == bracketed_id_context_state)
+ {
+ val->uniqstr = bracketed_id_str;
+ bracketed_id_str = 0;
+ *loc = bracketed_id_loc;
+ return BRACKETED_ID;
+ }
+ }
+ else
+ complain (loc, complaint, _("an identifier expected"));
+ }
+
+ [^\].A-Za-z0-9_/ \f\n\t\v]+|. {
+ complain (loc, complaint, "%s: %s",
+ ngettext ("invalid character in bracketed name",
+ "invalid characters in bracketed name", yyleng),
+ quote_mem (yytext, yyleng));
+ }
+
+ <<EOF>> {
+ BEGIN bracketed_id_context_state;
+ unexpected_eof (bracketed_id_start, "]");
+ }
+}
+
+<SC_RETURN_BRACKETED_ID>
+{
+ . {
+ ROLLBACK_CURRENT_TOKEN;
+ val->uniqstr = bracketed_id_str;
+ bracketed_id_str = 0;
+ *loc = bracketed_id_loc;
+ BEGIN INITIAL;
+ return BRACKETED_ID;
+ }
+}
+
+
+ /*---------------------------------------------------------------.
+ | Scanning a Yacc comment. The initial '/ *' is already eaten. |
+ `---------------------------------------------------------------*/
+
+<SC_YACC_COMMENT>
+{
+ "*/" BEGIN context_state;
+ .|\n continue;
+ <<EOF>> unexpected_eof (token_start, "*/"); BEGIN context_state;
+}
+
+
+ /*------------------------------------------------------------.
+ | Scanning a C comment. The initial '/ *' is already eaten. |
+ `------------------------------------------------------------*/
+
+<SC_COMMENT>
+{
+ "*"{splice}"/" STRING_GROW; BEGIN context_state;
+ <<EOF>> unexpected_eof (token_start, "*/"); BEGIN context_state;
+}
+
+
+ /*--------------------------------------------------------------.
+ | Scanning a line comment. The initial '//' is already eaten. |
+ `--------------------------------------------------------------*/
+
+<SC_LINE_COMMENT>
+{
+ "\n" STRING_GROW; BEGIN context_state;
+ {splice} STRING_GROW;
+ <<EOF>> BEGIN context_state;
+}
+
+
+ /*------------------------------------------------.
+ | Scanning a Bison string, including its escapes. |
+ | The initial quote is already eaten. |
+ `------------------------------------------------*/
+
+<SC_ESCAPED_STRING>
+{
+ "\"" {
+ STRING_FINISH;
+ loc->start = token_start;
+ val->code = last_string;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_append("</PYACC_Text>");
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_String>");
+ gram_piece_pack();
+ return ~STRING;
+#else
+ return STRING;
+#endif
+ }
+ <<EOF>> unexpected_eof (token_start, "\"");
+ "\n" unexpected_newline (token_start, "\"");
+}
+
+ /*----------------------------------------------------------.
+ | Scanning a Bison character literal, decoding its escapes. |
+ | The initial quote is already eaten. |
+ `----------------------------------------------------------*/
+
+<SC_ESCAPED_CHARACTER>
+{
+ "'" {
+ STRING_FINISH;
+ loc->start = token_start;
+ val->character = last_string[0];
+
+ /* FIXME: Eventually, make these errors. */
+ if (last_string[0] == '\0')
+ {
+ complain (loc, Wother, _("empty character literal"));
+ /* '\0' seems dangerous even if we are about to complain. */
+ val->character = '\'';
+ }
+ else if (last_string[1] != '\0')
+ complain (loc, Wother,
+ _("extra characters in character literal"));
+ STRING_FREE;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_append("</PYACC_Text>");
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_Char>");
+ gram_piece_pack();
+ return ~CHAR;
+#else
+ return CHAR;
+#endif
+ }
+ "\n" unexpected_newline (token_start, "'");
+ <<EOF>> unexpected_eof (token_start, "'");
+}
+
+
+
+ /*--------------------------------------------------------------.
+ | Scanning a tag. The initial angle bracket is already eaten. |
+ `--------------------------------------------------------------*/
+
+<SC_TAG>
+{
+ ">" {
+ --nesting;
+ if (nesting < 0)
+ {
+ STRING_FINISH;
+ loc->start = token_start;
+ val->uniqstr = uniqstr_new (last_string);
+ STRING_FREE;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_append("</PYACC_Text>");
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_TagRef>");
+ gram_piece_pack();
+ return ~TAG;
+#else
+ return TAG;
+#endif
+ }
+ STRING_GROW;
+ }
+
+ ([^<>]|->)+ STRING_GROW;
+ "<"+ STRING_GROW; nesting += yyleng;
+
+ <<EOF>> unexpected_eof (token_start, ">");
+}
+
+ /*----------------------------.
+ | Decode escaped characters. |
+ `----------------------------*/
+
+<SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>
+{
+ \\[0-7]{1,3} {
+ unsigned long int c = strtoul (yytext + 1, NULL, 8);
+ if (!c || UCHAR_MAX < c)
+ complain (loc, complaint, _("invalid number after \\-escape: %s"),
+ yytext+1);
+ else
+ {
+ obstack_1grow (&obstack_for_string, c);
+ sprintf(gram_piece_temp, "<PYACC_Text_Escape character=\"%d\">", (int)c);
+ gram_piece_append(gram_piece_temp);
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("</PYACC_Text_Escape>");
+ }
+ }
+
+ \\x[0-9abcdefABCDEF]+ {
+ verify (UCHAR_MAX < ULONG_MAX);
+ unsigned long int c = strtoul (yytext + 2, NULL, 16);
+ if (!c || UCHAR_MAX < c)
+ complain (loc, complaint, _("invalid number after \\-escape: %s"),
+ yytext+1);
+ else
+ {
+ obstack_1grow (&obstack_for_string, c);
+ sprintf(gram_piece_temp, "<PYACC_Text_Escape character=\"%d\">", (int)c);
+ gram_piece_append(gram_piece_temp);
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("</PYACC_Text_Escape>");
+ }
+ }
+
+ \\a obstack_1grow (&obstack_for_string, '\a'); gram_piece_append("<PYACC_Text_Escape character=\"7\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+ \\b obstack_1grow (&obstack_for_string, '\b'); gram_piece_append("<PYACC_Text_Escape character=\"8\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+ \\f obstack_1grow (&obstack_for_string, '\f'); gram_piece_append("<PYACC_Text_Escape character=\"12\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+ \\n obstack_1grow (&obstack_for_string, '\n'); gram_piece_append("<PYACC_Text_Escape character=\"10\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+ \\r obstack_1grow (&obstack_for_string, '\r'); gram_piece_append("<PYACC_Text_Escape character=\"13\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+ \\t obstack_1grow (&obstack_for_string, '\t'); gram_piece_append("<PYACC_Text_Escape character=\"9\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+ \\v obstack_1grow (&obstack_for_string, '\v'); gram_piece_append("<PYACC_Text_Escape character=\"11\">"); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+
+ /* \\[\"\'?\\] would be shorter, but it confuses xgettext. */
+ \\("\""|"'"|"?"|"\\") obstack_1grow (&obstack_for_string, yytext[1]); sprintf(gram_piece_temp, "<PYACC_Text_Escape character=\"%d\">", yytext[1]); gram_piece_append(gram_piece_temp); gram_piece_flush(strlen(yytext)); gram_piece_append("</PYACC_Text_Escape>");
+
+ \\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
+ int c = convert_ucn_to_byte (yytext);
+ if (c <= 0)
+ complain (loc, complaint, _("invalid number after \\-escape: %s"),
+ yytext+1);
+ else
+ {
+ obstack_1grow (&obstack_for_string, c);
+ sprintf(gram_piece_temp, "<PYACC_Text_Escape character=\"%d\">", c);
+ gram_piece_append(gram_piece_temp);
+ gram_piece_flush(strlen(yytext));
+ gram_piece_append("</PYACC_Text_Escape>");
+ }
+ }
+ \\(.|\n) {
+ char const *p = yytext + 1;
+ /* Quote only if escaping won't make the character visible. */
+ if (c_isspace ((unsigned char) *p) && c_isprint ((unsigned char) *p))
+ p = quote (p);
+ else
+ p = quotearg_style_mem (escape_quoting_style, p, 1);
+ complain (loc, complaint, _("invalid character after \\-escape: %s"),
+ p);
+ }
+}
+
+ /*--------------------------------------------.
+ | Scanning user-code characters and strings. |
+ `--------------------------------------------*/
+
+<SC_CHARACTER,SC_STRING>
+{
+ {splice}|\\{splice}[^\n\[\]] STRING_GROW;
+}
+
+<SC_CHARACTER>
+{
+ "'" STRING_GROW; BEGIN context_state;
+ \n unexpected_newline (token_start, "'");
+ <<EOF>> unexpected_eof (token_start, "'");
+}
+
+<SC_STRING>
+{
+ "\"" STRING_GROW; BEGIN context_state;
+ \n unexpected_newline (token_start, "\"");
+ <<EOF>> unexpected_eof (token_start, "\"");
+}
+
+
+ /*---------------------------------------------------.
+ | Strings, comments etc. can be found in user code. |
+ `---------------------------------------------------*/
+
+<SC_BRACED_CODE,SC_PROLOGUE,SC_EPILOGUE,SC_PREDICATE>
+{
+ "'" {
+ STRING_GROW;
+ context_state = YY_START;
+ token_start = loc->start;
+ BEGIN SC_CHARACTER;
+ }
+ "\"" {
+ STRING_GROW;
+ context_state = YY_START;
+ token_start = loc->start;
+ BEGIN SC_STRING;
+ }
+ "/"{splice}"*" {
+ STRING_GROW;
+ context_state = YY_START;
+ token_start = loc->start;
+ BEGIN SC_COMMENT;
+ }
+ "/"{splice}"/" {
+ STRING_GROW;
+ context_state = YY_START;
+ BEGIN SC_LINE_COMMENT;
+ }
+}
+
+
+
+ /*-----------------------------------------------------------.
+ | Scanning some code in braces (actions, predicates). The |
+ | initial "{" is already eaten. |
+ `-----------------------------------------------------------*/
+
+<SC_BRACED_CODE,SC_PREDICATE>
+{
+ "{"|"<"{splice}"%" STRING_GROW; nesting++;
+ "%"{splice}">" STRING_GROW; nesting--;
+
+ /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly
+ (as '<' '<%'). */
+ "<"{splice}"<" STRING_GROW;
+
+ <<EOF>> unexpected_eof (code_start, "}");
+}
+
+<SC_BRACED_CODE>
+{
+ "}" {
+ obstack_1grow (&obstack_for_string, '}');
+
+ --nesting;
+ if (nesting < 0)
+ {
+ STRING_FINISH;
+ loc->start = code_start;
+ val->code = last_string;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_append("</PYACC_Text>");
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_BracedCode>");
+ gram_piece_pack();
+ return ~BRACED_CODE;
+#else
+ return BRACED_CODE;
+#endif
+ }
+ }
+}
+
+<SC_PREDICATE>
+{
+ "}" {
+ --nesting;
+ if (nesting < 0)
+ {
+ STRING_FINISH;
+ loc->start = code_start;
+ val->code = last_string;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_append("</PYACC_Text>");
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_BracedPredicate>");
+ gram_piece_pack();
+ return ~BRACED_PREDICATE;
+#else
+ return BRACED_PREDICATE;
+#endif
+ }
+ else
+ obstack_1grow (&obstack_for_string, '}');
+ }
+}
+
+ /*--------------------------------------------------------------.
+ | Scanning some prologue: from "%{" (already scanned) to "%}". |
+ `--------------------------------------------------------------*/
+
+<SC_PROLOGUE>
+{
+ "%}" {
+ STRING_FINISH;
+ loc->start = code_start;
+ val->code = last_string;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_append("</PYACC_Text>");
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_append("</PYACC_Section1_Prologue>");
+ gram_piece_pack();
+ return ~PROLOGUE;
+#else
+ return PROLOGUE;
+#endif
+ }
+
+ <<EOF>> unexpected_eof (code_start, "%}");
+}
+
+
+ /*---------------------------------------------------------------.
+ | Scanning the epilogue (everything after the second "%%", which |
+ | has already been eaten). |
+ `---------------------------------------------------------------*/
+
+<SC_EPILOGUE>
+{
+ <<EOF>> {
+ STRING_FINISH;
+ loc->start = code_start;
+ val->code = last_string;
+ BEGIN INITIAL;
+#if 1
+ gram_piece_pack();
+ return ~EPILOGUE;
+#else
+ return EPILOGUE;
+#endif
+ }
+}
+
+
+ /*-----------------------------------------------------.
+ | By default, grow the string obstack with the input. |
+ `-----------------------------------------------------*/
+
+<SC_COMMENT,SC_LINE_COMMENT,SC_BRACED_CODE,SC_PREDICATE,SC_PROLOGUE,SC_EPILOGUE,SC_STRING,SC_CHARACTER,SC_ESCAPED_STRING,SC_ESCAPED_CHARACTER>. |
+ <SC_COMMENT,SC_LINE_COMMENT,SC_BRACED_CODE,SC_PREDICATE,SC_PROLOGUE,SC_EPILOGUE>\n STRING_GROW;
+
+
+%%
+
+/* Read bytes from FP into buffer BUF of size SIZE. Return the
+ number of bytes read. Remove '\r' from input, treating \r\n
+ and isolated \r as \n. */
+
+static size_t
+no_cr_read (FILE *fp, char *buf, size_t size)
+{
+ size_t bytes_read = fread (buf, 1, size, fp);
+ if (bytes_read)
+ {
+ char *w = memchr (buf, '\r', bytes_read);
+ if (w)
+ {
+ char const *r = ++w;
+ char const *lim = buf + bytes_read;
+
+ for (;;)
+ {
+ /* Found an '\r'. Treat it like '\n', but ignore any
+ '\n' that immediately follows. */
+ w[-1] = '\n';
+ if (r == lim)
+ {
+ int ch = getc (fp);
+ if (ch != '\n' && ungetc (ch, fp) != ch)
+ break;
+ }
+ else if (*r == '\n')
+ r++;
+
+ /* Copy until the next '\r'. */
+ do
+ {
+ if (r == lim)
+ return w - buf;
+ }
+ while ((*w++ = *r++) != '\r');
+ }
+
+ return w - buf;
+ }
+ }
+
+ return bytes_read;
+}
+
+
+
+/*------------------------------------------------------.
+| Scan NUMBER for a base-BASE integer at location LOC. |
+`------------------------------------------------------*/
+
+static unsigned long int
+scan_integer (char const *number, int base, location loc)
+{
+ verify (INT_MAX < ULONG_MAX);
+ unsigned long int num = strtoul (number, NULL, base);
+
+ if (INT_MAX < num)
+ {
+ complain (&loc, complaint, _("integer out of range: %s"),
+ quote (number));
+ num = INT_MAX;
+ }
+
+ return num;
+}
+
+
+/*------------------------------------------------------------------.
+| Convert universal character name UCN to a single-byte character, |
+| and return that character. Return -1 if UCN does not correspond |
+| to a single-byte character. |
+`------------------------------------------------------------------*/
+
+static int
+convert_ucn_to_byte (char const *ucn)
+{
+ verify (UCHAR_MAX <= INT_MAX);
+ unsigned long int code = strtoul (ucn + 2, NULL, 16);
+
+ /* FIXME: Currently we assume Unicode-compatible unibyte characters
+ on ASCII hosts (i.e., Latin-1 on hosts with 8-bit bytes). On
+ non-ASCII hosts we support only the portable C character set.
+ These limitations should be removed once we add support for
+ multibyte characters. */
+
+ if (UCHAR_MAX < code)
+ return -1;
+
+#if ! ('$' == 0x24 && '@' == 0x40 && '`' == 0x60 && '~' == 0x7e)
+ {
+ /* A non-ASCII host. Use CODE to index into a table of the C
+ basic execution character set, which is guaranteed to exist on
+ all Standard C platforms. This table also includes '$', '@',
+ and '`', which are not in the basic execution character set but
+ which are unibyte characters on all the platforms that we know
+ about. */
+ static signed char const table[] =
+ {
+ '\0', -1, -1, -1, -1, -1, -1, '\a',
+ '\b', '\t', '\n', '\v', '\f', '\r', -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,
+ ' ', '!', '"', '#', '$', '%', '&', '\'',
+ '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', ':', ';', '<', '=', '>', '?',
+ '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
+ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', '{', '|', '}', '~'
+ };
+
+ code = code < sizeof table ? table[code] : -1;
+ }
+#endif
+
+ return code;
+}
+
+
+/*---------------------------------------------------------------------.
+| Handle '#line INT( "FILE")?\n'. ARGS has already skipped '#line '. |
+`---------------------------------------------------------------------*/
+
+static void
+handle_syncline (char *args, location loc)
+{
+ char *file;
+ unsigned long int lineno = strtoul (args, &file, 10);
+ if (INT_MAX <= lineno)
+ {
+ complain (&loc, Wother, _("line number overflow"));
+ lineno = INT_MAX;
+ }
+
+ file = strchr (file, '"');
+ if (file)
+ {
+ *strchr (file + 1, '"') = '\0';
+ current_file = uniqstr_new (file + 1);
+ }
+ boundary_set (&scanner_cursor, current_file, lineno, 1);
+}
+
+
+/*----------------------------------------------------------------.
+| For a token or comment starting at START, report message MSGID, |
+| which should say that an end marker was found before the |
+| expected TOKEN_END. Then, pretend that TOKEN_END was found. |
+`----------------------------------------------------------------*/
+
+static void
+unexpected_end (boundary start, char const *msgid, char const *token_end)
+{
+ location loc;
+ loc.start = start;
+ loc.end = scanner_cursor;
+ size_t i = strlen (token_end);
+
+/* Adjust scanner cursor so that any later message does not count
+ the characters about to be inserted. */
+ scanner_cursor.column -= i;
+
+ while (i != 0)
+ unput (token_end[--i]);
+
+ token_end = quote (token_end);
+ /* Instead of '\'', display "'". */
+ if (STREQ (token_end, "'\\''"))
+ token_end = "\"'\"";
+ complain (&loc, complaint, _(msgid), token_end);
+}
+
+
+/*------------------------------------------------------------------------.
+| Report an unexpected EOF in a token or comment starting at START. |
+| An end of file was encountered and the expected TOKEN_END was missing. |
+| After reporting the problem, pretend that TOKEN_END was found. |
+`------------------------------------------------------------------------*/
+
+static void
+unexpected_eof (boundary start, char const *token_end)
+{
+ unexpected_end (start, N_("missing %s at end of file"), token_end);
+}
+
+
+/*----------------------------------------.
+| Likewise, but for unexpected newlines. |
+`----------------------------------------*/
+
+static void
+unexpected_newline (boundary start, char const *token_end)
+{
+ unexpected_end (start, N_("missing %s at end of line"), token_end);
+}
+
+
+/*-------------------------.
+| Initialize the scanner. |
+`-------------------------*/
+
+void
+gram_scanner_initialize (void)
+{
+ obstack_init (&obstack_for_string);
+}
+
+
+/*-----------------------------------------------.
+| Free all the memory allocated to the scanner. |
+`-----------------------------------------------*/
+
+void
+gram_scanner_free (void)
+{
+ obstack_free (&obstack_for_string, 0);
+ /* Reclaim Flex's buffers. */
+ yylex_destroy ();
+}
+
+/* Nick */
+void gram_piece_append(const char *str) {
+ gram_piece[gram_piece1++] = strdup(str);
+}
+
+void gram_piece_insert(int n, const char *str) {
+ memmove(gram_piece + n + 1, gram_piece + n, (gram_piece1 - n) * sizeof(char *));
+ gram_piece[n] = strdup(str);
+ ++gram_piece1;
+}
+
+void gram_piece_escape(const char *p, size_t n) {
+ size_t i, j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ case '>':
+ j += 4;
+ break;
+ case '&':
+ j += 5;
+ break;
+ default:
+ ++j;
+ break;
+ }
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ memcpy(q + j, "<", 4);
+ j += 4;
+ break;
+ case '>':
+ memcpy(q + j, ">", 4);
+ j += 4;
+ break;
+ case '&':
+ memcpy(q + j, "&", 5);
+ j += 5;
+ break;
+ default:
+ q[j++] = p[i];
+ break;
+ }
+ q[j] = 0;
+ gram_piece[gram_piece1++] = q;
+}
+
+void gram_piece_flush(size_t n) {
+ gram_piece_escape(yytext, n);
+ yytext += n;
+}
+
+void gram_piece_pack() {
+ int i;
+ size_t j = 0;
+ for (i = gram_piece0; i < gram_piece1; ++i)
+ j += strlen(gram_piece[i]);
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = gram_piece0; i < gram_piece1; ++i) {
+ int k = strlen(gram_piece[i]);
+ memcpy(q + j, gram_piece[i], k);
+ free(gram_piece[i]);
+ j += k;
+ }
+ q[j] = 0;
+ gram_piece[gram_piece0++] = q;
+ gram_piece1 = gram_piece0;
+}
+
+GRAM_LEX_DECL {
+ int result = real_gram_lex(val, loc);
+ if (result < 0)
+ return ~result;
+ gram_piece_pack();
+ gram_piece_escape(yytext, strlen(yytext));
+ gram_piece_pack();
+ return result;
+}
--- /dev/null
+/* scan.l - scanner for flex input -*-C-*- */
+
+%{
+/* Copyright (c) 1990 The Regents of the University of California. */
+/* All rights reserved. */
+
+/* This code is derived from software contributed to Berkeley by */
+/* Vern Paxson. */
+
+/* The United States Government has rights in this work pursuant */
+/* to contract no. DE-AC03-76SF00098 between the United States */
+/* Department of Energy and the University of California. */
+
+/* This file is part of flex. */
+
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+
+/* 1. Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* 2. Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+
+/* Neither the name of the University nor the names of its contributors */
+/* may be used to endorse or promote products derived from this software */
+/* without specific prior written permission. */
+
+/* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
+/* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE. */
+
+#include "flexdef.h"
+#include "parse.h"
+extern bool tablesverify, tablesext;
+extern int trlcontxt; /* Set in parse.y for each rule. */
+extern const char *escaped_qstart, *escaped_qend;
+
+#define M4QSTART "[""["
+#define M4QEND "]""]"
+
+#define ESCAPED_QSTART "[" M4QEND M4QSTART "[" M4QEND M4QSTART
+#define ESCAPED_QEND M4QEND "]" M4QSTART M4QEND "]" M4QSTART
+
+#define ACTION_ECHO add_action( yytext )
+#define ACTION_IFDEF(def, should_define) \
+ { \
+ if ( should_define ) \
+ action_define( def, 1 ); \
+ }
+
+#define ACTION_ECHO_QSTART add_action (ESCAPED_QSTART)
+#define ACTION_ECHO_QEND add_action (ESCAPED_QEND)
+
+#define ACTION_M4_IFDEF(def, should_define) \
+ do{ \
+ if ( should_define ) \
+ buf_m4_define( &m4defs_buf, def, NULL);\
+ else \
+ buf_m4_undefine( &m4defs_buf, def);\
+ } while(0)
+
+#define MARK_END_OF_PROLOG mark_prolog();
+
+#if 1
+#define YY_DECL \
+ static int real_flexscan(void)
+#else
+#define YY_DECL \
+ int flexscan(void)
+#endif
+
+#define RETURNCHAR \
+ yylval = (unsigned char) yytext[0]; \
+ return CHAR;
+
+#define RETURNNAME \
+ if(yyleng < MAXLINE) \
+ { \
+ strncpy( nmstr, yytext, sizeof(nmstr) ); \
+ piece_pack(); \
+ piece_append("<PLex_Name>"); \
+ piece_escape(yytext, strlen(yytext)); \
+ piece_append("</PLex_Name>"); \
+ piece_pack(); \
+ return ~NAME; \
+ /* return NAME;*/ \
+ } \
+ else \
+ do { \
+ synerr(_("Input line too long\n")); \
+ FLEX_EXIT(EXIT_FAILURE); \
+ } while (0)
+
+#define PUT_BACK_STRING(str, start) \
+ { size_t i = strlen( str ); \
+ while ( i > start ) \
+ unput((str)[--i]); \
+ }
+
+#define CHECK_REJECT(str) \
+ if ( all_upper( str ) ) \
+ reject = true;
+
+#define CHECK_YYMORE(str) \
+ if ( all_lower( str ) ) \
+ yymore_used = true;
+
+#define YY_USER_INIT \
+ if ( getenv("POSIXLY_CORRECT") ) \
+ posix_compat = true;
+
+#define START_CODEBLOCK(x) do { \
+ /* Emit the needed line directive... */\
+ if (indented_code == false) { \
+ linenum++; \
+ line_directive_out(NULL, 1); \
+ } \
+ add_action(M4QSTART); \
+ yy_push_state(CODEBLOCK); \
+ if ((indented_code = x)) ACTION_ECHO; \
+ piece_append("<PLex_Section1Or2_CodeBlock>"); \
+} while(0)
+
+#define END_CODEBLOCK do { \
+ yy_pop_state();\
+ add_action(M4QEND); \
+ if (!indented_code) line_directive_out(NULL, 0);\
+ piece_append("</PLex_Section1Or2_CodeBlock>"); \
+} while (0)
+
+/* Nick */
+char piece_temp[100], *piece[10000];
+int piece0, piece1;
+
+void piece_append(const char *str);
+void piece_insert(int n, const char *str);
+void piece_escape(const char *p, size_t n);
+void piece_flush(size_t n);
+void piece_pack();
+
+static void markup_action(const char *text);
+static void markup_option(const char *name, int sense);
+
+%}
+
+%option caseless nodefault noreject stack noyy_top_state
+%option nostdinit
+
+%x SECT2 SECT2PROLOG SECT3 CODEBLOCK PICKUPDEF SC CARETISBOL NUM QUOTE
+%x FIRSTCCL CCL ACTION RECOVER COMMENT ACTION_STRING PERCENT_BRACE_ACTION
+%x OPTION LINEDIR CODEBLOCK_MATCH_BRACE
+%x GROUP_WITH_PARAMS
+%x GROUP_MINUS_PARAMS
+%x EXTENDED_COMMENT
+%x COMMENT_DISCARD CODE_COMMENT
+%x SECT3_NOESCAPE
+%x CHARACTER_CONSTANT
+
+WS [[:blank:]]+
+OPTWS [[:blank:]]*
+NOT_WS [^[:blank:]\r\n]
+
+NL \r?\n
+
+NAME ([[:alpha:]_][[:alnum:]_-]*)
+NOT_NAME [^[:alpha:]_*\n]+
+
+SCNAME {NAME}
+
+ESCSEQ (\\([^\n]|[0-7]{1,3}|x[[:xdigit:]]{1,2}))
+
+FIRST_CCL_CHAR ([^\\\n]|{ESCSEQ})
+CCL_CHAR ([^\\\n\]]|{ESCSEQ})
+CCL_EXPR ("[:"^?[[:alpha:]]+":]")
+
+LEXOPT [aceknopr]
+
+M4QSTART "[""["
+M4QEND "]""]"
+
+%%
+ static int bracelevel, didadef, indented_code;
+ static int doing_rule_action = false;
+ static int option_sense;
+
+ int doing_codeblock = false;
+ int brace_depth=0, brace_start_line=0;
+ char nmdef[MAXLINE];
+
+
+<INITIAL>{
+ ^{WS} START_CODEBLOCK(true); piece_append("<PLex_Text>");
+ ^"/*" add_action("/*[""["); yy_push_state( COMMENT );
+ ^#{OPTWS}line{WS} yy_push_state( LINEDIR );
+ ^"%s"{NAME}? return SCDECL;
+ ^"%x"{NAME}? return XSCDECL;
+ ^"%{".*{NL} START_CODEBLOCK(false); piece_flush(strlen(yytext)); piece_append("<PLex_Text>");
+ ^"%top"[[:blank:]]*"{"[[:blank:]]*{NL} {
+ brace_start_line = linenum;
+ ++linenum;
+ buf_linedir( &top_buf, infilename?infilename:"<stdin>", linenum);
+ brace_depth = 1;
+ yy_push_state(CODEBLOCK_MATCH_BRACE);
+ }
+
+ ^"%top".* synerr( _("malformed '%top' directive") );
+
+ {WS} /* discard */
+
+ ^"%%".* {
+ sectnum = 2;
+ bracelevel = 0;
+ mark_defs1();
+ line_directive_out(NULL, 1);
+ BEGIN(SECT2PROLOG);
+#if 1
+ piece_append("</PLex_Section1>");
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_append("<PLex_Section2>");
+ piece_pack();
+ return ~SECTEND;
+#else
+ return SECTEND;
+#endif
+ }
+
+ ^"%pointer".*{NL} yytext_is_array = false; ++linenum; piece_append("<PLex_Section1_Options><PLex_Section1_Options_Array>"); piece_flush(strlen(yytext) - 1); piece_append("</PLex_Section1_Options_Array></PLex_Section1_Options>");
+ ^"%array".*{NL} yytext_is_array = true; ++linenum; piece_append("<PLex_Section1_Options><PLex_Section1_Options_Array value=\"true\">"); piece_flush(strlen(yytext) - 1); piece_append("</PLex_Section1_Options_Array></PLex_Section1_Options>");
+
+ ^"%option" BEGIN(OPTION); return TOK_OPTION;
+
+ ^"%"{LEXOPT}{OPTWS}[[:digit:]]*{OPTWS}{NL} ++linenum; /* ignore */
+ ^"%"{LEXOPT}{WS}.*{NL} ++linenum; /* ignore */
+
+ /* xgettext: no-c-format */
+ ^"%"[^sxaceknopr{}].* synerr( _( "unrecognized '%' directive" ) );
+
+ ^{NAME} {
+ if(yyleng < MAXLINE)
+ {
+ strncpy( nmstr, yytext, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Definition name too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+
+ didadef = false;
+ BEGIN(PICKUPDEF);
+ }
+
+ {SCNAME} RETURNNAME;
+ ^{OPTWS}{NL} ++linenum; /* allows blank lines in section 1 */
+ {OPTWS}{NL} ACTION_ECHO; ++linenum; /* maybe end of comment line */
+}
+
+
+<COMMENT,CODE_COMMENT>{ /* */
+ [^\[\]\*\n]* ACTION_ECHO;
+ . ACTION_ECHO;
+
+ {NL} ++linenum; ACTION_ECHO;
+}
+<COMMENT>{
+ "*/" add_action("*/]""]"); yy_pop_state();
+}
+<CODE_COMMENT>{
+ "*/" ACTION_ECHO; yy_pop_state();
+}
+
+<COMMENT_DISCARD>{
+ /* This is the same as COMMENT, but is discarded rather than output. */
+ "*/" yy_pop_state();
+ "*" ;
+ [^*\n] ;
+ {NL} ++linenum;
+}
+
+<EXTENDED_COMMENT>{
+ ")" yy_pop_state();
+ [^\n\)]+ ;
+ {NL} ++linenum;
+}
+
+<LINEDIR>{
+ \n yy_pop_state();
+ [[:digit:]]+ linenum = myctoi( yytext );
+
+ \"[^"\n]*\" {
+ free(infilename);
+ infilename = xstrdup(yytext + 1);
+ infilename[strlen( infilename ) - 1] = '\0';
+ }
+ . /* ignore spurious characters */
+}
+<ACTION,CODEBLOCK,ACTION_STRING,PERCENT_BRACE_ACTION,CHARACTER_CONSTANT,COMMENT,CODE_COMMENT>{
+ {M4QSTART} ACTION_ECHO_QSTART;
+ {M4QEND} ACTION_ECHO_QEND;
+}
+
+<CODEBLOCK>{
+ ^"%}".*{NL} ++linenum; piece_append("</PLex_Text>"); piece_flush(strlen(yytext)); END_CODEBLOCK;
+ [^\n%\[\]]* ACTION_ECHO;
+ . ACTION_ECHO;
+ {NL} {
+ ++linenum;
+ ACTION_ECHO;
+ if ( indented_code ) { piece_flush(strlen(yytext)); piece_append("</PLex_Text>"); END_CODEBLOCK; }
+ }
+}
+
+<CODEBLOCK_MATCH_BRACE>{
+ "}" {
+ if( --brace_depth == 0){
+ /* TODO: Matched. */
+ yy_pop_state();
+ }else
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ "{" {
+ brace_depth++;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ {NL} {
+ ++linenum;
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ {M4QSTART} buf_strnappend(&top_buf, escaped_qstart, (int) strlen(escaped_qstart));
+ {M4QEND} buf_strnappend(&top_buf, escaped_qend, (int) strlen(escaped_qend));
+ ([^{}\r\n\[\]]+)|[^{}\r\n] {
+ buf_strnappend(&top_buf, yytext, yyleng);
+ }
+
+ <<EOF>> {
+ linenum = brace_start_line;
+ synerr(_("Unmatched '{'"));
+ yyterminate();
+ }
+}
+
+
+<PICKUPDEF>{
+ {WS} /* separates name and definition */
+
+ {NOT_WS}[^\r\n]* {
+ if(yyleng < MAXLINE)
+ {
+ strncpy( nmdef, yytext, sizeof(nmdef) );
+ }
+ else
+ {
+ format_synerr( _("Definition value for {%s} too long\n"), nmstr);
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+ /* Skip trailing whitespace. */
+ {
+ size_t i = strlen( nmdef );
+ while (i > 0 && (nmdef[i-1] == ' ' || nmdef[i-1] == '\t'))
+ --i;
+ nmdef[i] = '\0';
+ }
+
+ ndinstal( nmstr, nmdef );
+ didadef = true;
+ }
+
+ {NL} {
+ if ( ! didadef )
+ synerr( _( "incomplete name definition" ) );
+ BEGIN(INITIAL);
+ ++linenum;
+ }
+}
+
+
+<OPTION>{
+ {NL} ++linenum; BEGIN(INITIAL);
+ {WS} option_sense = true;
+
+ "=" return '=';
+
+ no option_sense = ! option_sense;
+
+ 7bit csize = option_sense ? 128 : 256; markup_option("SevenBit", option_sense);
+ 8bit csize = option_sense ? 256 : 128; markup_option("SevenBit", !option_sense);
+
+ align long_align = option_sense; markup_option("Align", option_sense);
+ always-interactive {
+ ACTION_M4_IFDEF( "M4""_YY_ALWAYS_INTERACTIVE", option_sense );
+ interactive = option_sense;
+ markup_option("AlwaysInteractive", option_sense);
+ }
+ array yytext_is_array = option_sense; markup_option("Array", option_sense);
+ backup backing_up_report = option_sense; markup_option("Backup", option_sense);
+ batch interactive = ! option_sense; markup_option("Interactive", !option_sense);
+ bison-bridge bison_bridge_lval = option_sense; markup_option("BisonBridge", option_sense);
+ bison-locations { if((bison_bridge_lloc = option_sense))
+ bison_bridge_lval = true;
+ markup_option("BisonLocations", option_sense);
+ }
+ "c++" C_plus_plus = option_sense; markup_option("CPlusPlus", option_sense);
+ caseful|case-sensitive sf_set_case_ins(!option_sense); markup_option("Caseless", !option_sense);
+ caseless|case-insensitive sf_set_case_ins(option_sense); markup_option("Caseless", option_sense);
+ debug ddebug = option_sense; markup_option("Debug", option_sense);
+ default spprdflt = ! option_sense; markup_option("Default", option_sense);
+ ecs useecs = option_sense; markup_option("ECS", option_sense);
+ fast {
+ useecs = usemecs = false;
+ use_read = fullspd = true;
+ markup_option("Fast", option_sense);
+ }
+ full {
+ useecs = usemecs = false;
+ use_read = fulltbl = true;
+ markup_option("Full", option_sense);
+ }
+ input ACTION_IFDEF("YY_NO_INPUT", ! option_sense); markup_option("Input", option_sense);
+ interactive interactive = option_sense; markup_option("Interactive", option_sense);
+ lex-compat lex_compat = option_sense; markup_option("LexCompat", option_sense);
+ posix-compat posix_compat = option_sense; markup_option("PosixCompat", option_sense);
+ line gen_line_dirs = option_sense; markup_option("Line", option_sense);
+ main {
+ ACTION_M4_IFDEF( "M4""_YY_MAIN", option_sense);
+ /* Override yywrap */
+ if( option_sense == true )
+ do_yywrap = false;
+ markup_option("Main", option_sense);
+ }
+ meta-ecs usemecs = option_sense; markup_option("MetaECS", option_sense);
+ never-interactive {
+ ACTION_M4_IFDEF( "M4""_YY_NEVER_INTERACTIVE", option_sense );
+ interactive = !option_sense;
+ markup_option("NeverInteractive", option_sense);
+ }
+ perf-report performance_report += option_sense ? 1 : -1; markup_option("PerfReport", option_sense);
+ pointer yytext_is_array = ! option_sense; markup_option("Array", !option_sense);
+ read use_read = option_sense; markup_option("Read", option_sense);
+ reentrant reentrant = option_sense; markup_option("Reentrant", option_sense);
+ reject reject_really_used = option_sense; markup_option("Reject", option_sense);
+ stack ACTION_M4_IFDEF( "M4""_YY_STACK_USED", option_sense ); markup_option("Stack", option_sense);
+ stdinit do_stdinit = option_sense; markup_option("StdInit", option_sense);
+ stdout use_stdout = option_sense; markup_option("StdOut", option_sense);
+ unistd ACTION_IFDEF("YY_NO_UNISTD_H", ! option_sense); markup_option("UniStd", option_sense);
+ unput ACTION_M4_IFDEF("M4""_YY_NO_UNPUT", ! option_sense); markup_option("Unput", option_sense);
+ verbose printstats = option_sense; markup_option("Verbose", option_sense);
+ warn nowarn = ! option_sense; markup_option("Warn", option_sense);
+ yylineno do_yylineno = option_sense; ACTION_M4_IFDEF("M4""_YY_USE_LINENO", option_sense); markup_option("YYLineNo", option_sense);
+ yymore yymore_really_used = option_sense; markup_option("YYMore", option_sense);
+ yywrap do_yywrap = option_sense; markup_option("YYWrap", option_sense);
+
+ yy_push_state ACTION_M4_IFDEF("M4""_YY_NO_PUSH_STATE", ! option_sense); markup_option("YYPushState", option_sense);
+ yy_pop_state ACTION_M4_IFDEF("M4""_YY_NO_POP_STATE", ! option_sense); markup_option("YYPopState", option_sense);
+ yy_top_state ACTION_M4_IFDEF("M4""_YY_NO_TOP_STATE", ! option_sense); markup_option("YYTopState", option_sense);
+
+ yy_scan_buffer ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BUFFER", ! option_sense); markup_option("YYScanBuffer", option_sense);
+ yy_scan_bytes ACTION_M4_IFDEF("M4""_YY_NO_SCAN_BYTES", ! option_sense); markup_option("YYScanBytes", option_sense);
+ yy_scan_string ACTION_M4_IFDEF("M4""_YY_NO_SCAN_STRING", ! option_sense); markup_option("YYScanString", option_sense);
+
+ yyalloc ACTION_M4_IFDEF("M4""_YY_NO_FLEX_ALLOC", ! option_sense); markup_option("YYAlloc", option_sense);
+ yyrealloc ACTION_M4_IFDEF("M4""_YY_NO_FLEX_REALLOC", ! option_sense); markup_option("YYRealloc", option_sense);
+ yyfree ACTION_M4_IFDEF("M4""_YY_NO_FLEX_FREE", ! option_sense); markup_option("YYFree", option_sense);
+
+ yyget_debug ACTION_M4_IFDEF("M4""_YY_NO_GET_DEBUG", ! option_sense); markup_option("YYGetDebug", option_sense);
+ yyset_debug ACTION_M4_IFDEF("M4""_YY_NO_SET_DEBUG", ! option_sense); markup_option("YYSetDebug", option_sense);
+ yyget_extra ACTION_M4_IFDEF("M4""_YY_NO_GET_EXTRA", ! option_sense); markup_option("YYGetExtra", option_sense);
+ yyset_extra ACTION_M4_IFDEF("M4""_YY_NO_SET_EXTRA", ! option_sense); markup_option("YYSetExtra", option_sense);
+ yyget_leng ACTION_M4_IFDEF("M4""_YY_NO_GET_LENG", ! option_sense); markup_option("YYGetLeng", option_sense);
+ yyget_text ACTION_M4_IFDEF("M4""_YY_NO_GET_TEXT", ! option_sense); markup_option("YYGetText", option_sense);
+ yyget_lineno ACTION_M4_IFDEF("M4""_YY_NO_GET_LINENO", ! option_sense); markup_option("YYGetLineNo", option_sense);
+ yyset_lineno ACTION_M4_IFDEF("M4""_YY_NO_SET_LINENO", ! option_sense); markup_option("YYSetLineNo", option_sense);
+ yyget_in ACTION_M4_IFDEF("M4""_YY_NO_GET_IN", ! option_sense); markup_option("YYGetIn", option_sense);
+ yyset_in ACTION_M4_IFDEF("M4""_YY_NO_SET_IN", ! option_sense); markup_option("YYSetIn", option_sense);
+ yyget_out ACTION_M4_IFDEF("M4""_YY_NO_GET_OUT", ! option_sense); markup_option("YYGetOut", option_sense);
+ yyset_out ACTION_M4_IFDEF("M4""_YY_NO_SET_OUT", ! option_sense); markup_option("YYSetOut", option_sense);
+ yyget_lval ACTION_M4_IFDEF("M4""_YY_NO_GET_LVAL", ! option_sense); markup_option("YYGetLVal", option_sense);
+ yyset_lval ACTION_M4_IFDEF("M4""_YY_NO_SET_LVAL", ! option_sense); markup_option("YYSetLVal", option_sense);
+ yyget_lloc ACTION_M4_IFDEF("M4""_YY_NO_GET_LLOC", ! option_sense); markup_option("YYGetLLoc", option_sense);
+ yyset_lloc ACTION_M4_IFDEF("M4""_YY_NO_SET_LLOC", ! option_sense); markup_option("YYSetLLoc", option_sense);
+
+ extra-type return TOK_EXTRA_TYPE;
+ outfile return TOK_OUTFILE;
+ prefix return TOK_PREFIX;
+ yyclass return TOK_YYCLASS;
+ header(-file)? return TOK_HEADER_FILE;
+ tables-file return TOK_TABLES_FILE;
+ tables-verify {
+ tablesverify = option_sense;
+ if(!tablesext && option_sense)
+ tablesext = true;
+ markup_option("TablesVerify", option_sense);
+ }
+
+
+ \"[^"\n]*\" {
+ if(yyleng-1 < MAXLINE)
+ {
+ strncpy( nmstr, yytext + 1, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Option line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+ nmstr[strlen( nmstr ) - 1] = '\0';
+#if 1
+ piece_pack();
+ piece_append("<PLex_String>\"<PLex_Text>");
+ piece_escape(yytext + 1, strlen(yytext + 1) - 1);
+ piece_append("</PLex_Text>\"</PLex_String>");
+ piece_pack();
+ return ~NAME; /* actually a misnomer */
+#else
+ return NAME;
+#endif
+ }
+
+ (([a-mo-z]|n[a-np-z])[[:alpha:]\-+]*)|. {
+ format_synerr( _( "unrecognized %%option: %s" ),
+ yytext );
+ BEGIN(RECOVER);
+ }
+}
+
+<RECOVER>.*{NL} ++linenum; BEGIN(INITIAL);
+
+
+<SECT2PROLOG>{
+ ^"%{".* ++bracelevel; yyless( 2 ); /* eat only %{ */
+ ^"%}".* --bracelevel; yyless( 2 ); /* eat only %} */
+
+ ^{WS} START_CODEBLOCK(true); piece_append("<PLex_Text>"); /* indented code in prolog */
+
+ ^{NOT_WS}.* {
+ /* non-indented code */
+ if ( bracelevel <= 0 ) {
+ /* not in %{ ... %} */
+ yyless( 0 ); /* put it all back */
+ yy_set_bol( 1 );
+ mark_prolog();
+ BEGIN(SECT2);
+ } else {
+ START_CODEBLOCK(true);
+ piece_append("<PLex_Text>");
+ }
+ }
+
+ . ACTION_ECHO;
+ {NL} ++linenum; ACTION_ECHO;
+
+ <<EOF>> {
+ mark_prolog();
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section2>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate(); /* to stop the parser */
+#endif
+ }
+}
+
+<SECT2>{
+ ^{OPTWS}{NL} ++linenum; /* allow blank lines in section 2 */
+
+ ^{OPTWS}"%{" {
+ indented_code = false;
+ doing_codeblock = true;
+ bracelevel = 1;
+ BEGIN(PERCENT_BRACE_ACTION);
+ piece_flush(strlen(yytext) - 2);
+ piece_append("<PLex_Section1Or2_CodeBlock>");
+ piece_flush(2);
+ piece_append("<PLex_Text>");
+ }
+
+ ^{OPTWS}"<" {
+ /* Allow "<" to appear in (?x) patterns. */
+ if (!sf_skip_ws())
+ BEGIN(SC);
+ return '<';
+ }
+ ^{OPTWS}"^" return '^';
+ \" BEGIN(QUOTE); return '"';
+ "{"/[[:digit:]] {
+ BEGIN(NUM);
+ if ( lex_compat || posix_compat )
+ return BEGIN_REPEAT_POSIX;
+ else
+ return BEGIN_REPEAT_FLEX;
+ }
+ "$"/([[:blank:]]|{NL}) return '$';
+
+ {WS}"%{" {
+ bracelevel = 1;
+ BEGIN(PERCENT_BRACE_ACTION);
+ piece_flush(strlen(yytext) - 2);
+ piece_append("<PLex_Section2_Rule_Action>");
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+#if 1
+ piece_pack();
+ piece_escape(yytext, 2);
+ piece_pack();
+ piece_append("<PLex_Text>");
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+#if 1 /* don't think this can really happen */
+ abort();
+#else
+ piece_flush(strlen(yytext));
+ piece_append("<PLex_Text>");
+#endif
+ }
+ {WS}"|".*{NL} {
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ /* Push back everything starting at the "|" */
+ int amt = (int) (strchr (yytext, '|') - yytext);
+ yyless(amt);
+ }
+ else {
+ add_action("]""]");
+ continued_action = true;
+ ++linenum;
+#if 1
+ int i;
+ for (i = 0; yytext[i] == '\t' || yytext[i] == ' '; ++i)
+ ;
+ piece_flush(i);
+ piece_pack();
+ piece_append("<PLex_Section2_Rule_Action continued=\"true\">");
+ piece_escape(yytext, strlen(yytext));
+ piece_append("</PLex_Section2_Rule_Action>");
+ piece_pack();
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+ }
+
+ ^{WS}"/*" {
+
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ yy_push_state(COMMENT_DISCARD);
+ }
+ else{
+ yyless( yyleng - 2 ); /* put back '/', '*' */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+ }
+ }
+
+ ^{WS} /* allow indented rules */ ;
+
+ {WS} {
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ }
+ else{
+ /* This rule is separate from the one below because
+ * otherwise we get variable trailing context, so
+ * we can't build the scanner using -{f,F}.
+ */
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+#if 1
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ piece_append("<PLex_Section2_Rule_Action><PLex_Text>");
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+ }
+ }
+
+ {OPTWS}{NL} {
+ if (sf_skip_ws()){
+ /* We're in the middle of a (?x: ) pattern. */
+ ++linenum;
+ }
+ else{
+ bracelevel = 0;
+ continued_action = false;
+ BEGIN(ACTION);
+#if 1
+ yyless(yyleng - 1);
+#else
+ unput( '\n' ); /* so <ACTION> sees it */
+#endif
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+#if 1
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ piece_append("<PLex_Section2_Rule_Action><PLex_Text>");
+ return ~'\n';
+#else
+ return '\n';
+#endif
+ }
+ }
+ }
+
+ ^{OPTWS}"<<EOF>>" |
+ "<<EOF>>" return EOF_OP;
+
+ ^"%%".* {
+ sectnum = 3;
+ BEGIN(no_section3_escape ? SECT3_NOESCAPE : SECT3);
+ outn("/* Begin user sect3 */");
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section2>");
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ piece_append("<PLex_Section3>");
+ return ~YY_NULL;
+#else
+ yyterminate(); /* to stop the parser */
+#endif
+
+ }
+
+ "["({FIRST_CCL_CHAR}|{CCL_EXPR})({CCL_CHAR}|{CCL_EXPR})* {
+ int cclval;
+
+ if(yyleng < MAXLINE)
+ {
+ strncpy( nmstr, yytext, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+
+ /* Check to see if we've already encountered this
+ * ccl.
+ */
+ if (0 /* <--- This "0" effectively disables the reuse of a
+ * character class (purely based on its source text).
+ * The reason it was disabled is so yacc/bison can parse
+ * ccl operations, such as ccl difference and union.
+ */
+ && (cclval = ccllookup( nmstr )) != 0 )
+ {
+ if ( input() != ']' )
+ synerr( _( "bad character class" ) );
+
+ yylval = cclval;
+ ++cclreuse;
+ return PREVCCL;
+ }
+ else
+ {
+ /* We fudge a bit. We know that this ccl will
+ * soon be numbered as lastccl + 1 by cclinit.
+ */
+ cclinstal( nmstr, lastccl + 1 );
+
+ /* Push back everything but the leading bracket
+ * so the ccl can be rescanned.
+ */
+ yyless( 1 );
+
+ BEGIN(FIRSTCCL);
+ return '[';
+ }
+ }
+ "{-}" return CCL_OP_DIFF;
+ "{+}" return CCL_OP_UNION;
+
+
+ /* Check for :space: at the end of the rule so we don't
+ * wrap the expanded regex in '(' ')' -- breaking trailing
+ * context.
+ */
+ "{"{NAME}"}"[[:space:]]? {
+ char *nmdefptr;
+ int end_is_ws, end_ch;
+
+ end_ch = yytext[yyleng-1];
+ end_is_ws = end_ch != '}' ? 1 : 0;
+
+ if(yyleng-1 < MAXLINE)
+ {
+ strncpy( nmstr, yytext + 1, sizeof(nmstr) );
+ }
+ else
+ {
+ synerr( _("Input line too long\n"));
+ FLEX_EXIT(EXIT_FAILURE);
+ }
+nmstr[yyleng - 2 - end_is_ws] = '\0'; /* chop trailing brace */
+
+ if ( (nmdefptr = ndlookup( nmstr )) == 0 )
+ format_synerr(
+ _( "undefined definition {%s}" ),
+ nmstr );
+
+ else
+ { /* push back name surrounded by ()'s */
+ size_t len = strlen( nmdefptr );
+ if (end_is_ws)
+#if 1
+ yyless(yyleng - 1);
+#else
+ unput(end_ch);
+#endif
+
+ if ( lex_compat || nmdefptr[0] == '^' ||
+ (len > 0 && nmdefptr[len - 1] == '$')
+ || (end_is_ws && trlcontxt && !sf_skip_ws()))
+ { /* don't use ()'s after all */
+ PUT_BACK_STRING(nmdefptr, 0);
+
+ if ( nmdefptr[0] == '^' )
+ BEGIN(CARETISBOL);
+ }
+
+ else
+ {
+ unput(')');
+ PUT_BACK_STRING(nmdefptr, 0);
+ unput('(');
+ }
+ }
+ }
+
+ "/*" {
+ if (sf_skip_ws())
+ yy_push_state(COMMENT_DISCARD);
+ else{
+ /* Push back the "*" and return "/" as usual. */
+ yyless(1);
+ return '/';
+ }
+ }
+
+ "(?#" {
+ if (lex_compat || posix_compat){
+ /* Push back the "?#" and treat it like a normal parens. */
+ yyless(1);
+ sf_push();
+ return '(';
+ }
+ else
+ yy_push_state(EXTENDED_COMMENT);
+ }
+ "(?" {
+ sf_push();
+ if (lex_compat || posix_compat)
+ /* Push back the "?" and treat it like a normal parens. */
+ yyless(1);
+ else
+ BEGIN(GROUP_WITH_PARAMS);
+ return '(';
+ }
+ "(" sf_push(); return '(';
+ ")" {
+ if (_sf_top_ix > 0) {
+ sf_pop();
+ return ')';
+ } else
+ synerr(_("unbalanced parenthesis"));
+ }
+
+ [/|*+?.(){}] return (unsigned char) yytext[0];
+ . RETURNCHAR;
+
+ /* Nick added this rule for consistency with rest of scanner */
+ <<EOF>> {
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section2>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate(); /* to stop the parser */
+#endif
+ }
+}
+
+
+<SC>{
+ {OPTWS}{NL}{OPTWS} ++linenum; /* Allow blank lines & continuations */
+ [,*] return (unsigned char) yytext[0];
+ ">" BEGIN(SECT2); return '>';
+ ">"/^ BEGIN(CARETISBOL); return '>';
+ {SCNAME} RETURNNAME;
+ . {
+ format_synerr( _( "bad <start condition>: %s" ),
+ yytext );
+ }
+}
+
+<CARETISBOL>"^" BEGIN(SECT2); return '^';
+
+
+<QUOTE>{
+ [^"\n] RETURNCHAR;
+ \" BEGIN(SECT2); return '"';
+
+ {NL} {
+ synerr( _( "missing quote" ) );
+ BEGIN(SECT2);
+ ++linenum;
+ return '"';
+ }
+}
+
+<GROUP_WITH_PARAMS>{
+ ":" BEGIN(SECT2);
+ "-" BEGIN(GROUP_MINUS_PARAMS);
+ i sf_set_case_ins(1);
+ s sf_set_dot_all(1);
+ x sf_set_skip_ws(1);
+}
+<GROUP_MINUS_PARAMS>{
+ ":" BEGIN(SECT2);
+ i sf_set_case_ins(0);
+ s sf_set_dot_all(0);
+ x sf_set_skip_ws(0);
+}
+
+<FIRSTCCL>{
+ "^"/[^-\]\n] BEGIN(CCL); return '^';
+ "^"/("-"|"]") return '^';
+ . BEGIN(CCL); RETURNCHAR;
+}
+
+<CCL>{
+ -/[^\]\n] return '-';
+ [^\]\n] RETURNCHAR;
+ "]" BEGIN(SECT2); return ']';
+ .|{NL} {
+ synerr( _( "bad character class" ) );
+ BEGIN(SECT2);
+ return ']';
+ }
+}
+
+<FIRSTCCL,CCL>{
+ "[:alnum:]" BEGIN(CCL); return CCE_ALNUM;
+ "[:alpha:]" BEGIN(CCL); return CCE_ALPHA;
+ "[:blank:]" BEGIN(CCL); return CCE_BLANK;
+ "[:cntrl:]" BEGIN(CCL); return CCE_CNTRL;
+ "[:digit:]" BEGIN(CCL); return CCE_DIGIT;
+ "[:graph:]" BEGIN(CCL); return CCE_GRAPH;
+ "[:lower:]" BEGIN(CCL); return CCE_LOWER;
+ "[:print:]" BEGIN(CCL); return CCE_PRINT;
+ "[:punct:]" BEGIN(CCL); return CCE_PUNCT;
+ "[:space:]" BEGIN(CCL); return CCE_SPACE;
+ "[:upper:]" BEGIN(CCL); return CCE_UPPER;
+ "[:xdigit:]" BEGIN(CCL); return CCE_XDIGIT;
+
+ "[:^alnum:]" BEGIN(CCL); return CCE_NEG_ALNUM;
+ "[:^alpha:]" BEGIN(CCL); return CCE_NEG_ALPHA;
+ "[:^blank:]" BEGIN(CCL); return CCE_NEG_BLANK;
+ "[:^cntrl:]" BEGIN(CCL); return CCE_NEG_CNTRL;
+ "[:^digit:]" BEGIN(CCL); return CCE_NEG_DIGIT;
+ "[:^graph:]" BEGIN(CCL); return CCE_NEG_GRAPH;
+ "[:^lower:]" BEGIN(CCL); return CCE_NEG_LOWER;
+ "[:^print:]" BEGIN(CCL); return CCE_NEG_PRINT;
+ "[:^punct:]" BEGIN(CCL); return CCE_NEG_PUNCT;
+ "[:^space:]" BEGIN(CCL); return CCE_NEG_SPACE;
+ "[:^upper:]" BEGIN(CCL); return CCE_NEG_UPPER;
+ "[:^xdigit:]" BEGIN(CCL); return CCE_NEG_XDIGIT;
+ {CCL_EXPR} {
+ format_synerr(
+ _( "bad character class expression: %s" ),
+ yytext );
+ BEGIN(CCL); return CCE_ALNUM;
+ }
+}
+
+<NUM>{
+ [[:digit:]]+ {
+ yylval = myctoi( yytext );
+ return NUMBER;
+ }
+
+ "," return ',';
+ "}" {
+ BEGIN(SECT2);
+ if ( lex_compat || posix_compat )
+ return END_REPEAT_POSIX;
+ else
+ return END_REPEAT_FLEX;
+ }
+
+ . {
+ synerr( _( "bad character inside {}'s" ) );
+ BEGIN(SECT2);
+ return '}';
+ }
+
+ {NL} {
+ synerr( _( "missing }" ) );
+ BEGIN(SECT2);
+ ++linenum;
+ return '}';
+ }
+}
+
+
+<PERCENT_BRACE_ACTION>{
+ {OPTWS}"%}".* bracelevel = 0; piece_append("</PLex_Text>");
+
+ <ACTION>"/*" ACTION_ECHO; yy_push_state( CODE_COMMENT );
+
+ <CODEBLOCK,ACTION>{
+ "reject" {
+ ACTION_ECHO;
+ CHECK_REJECT(yytext);
+ }
+ "yymore" {
+ ACTION_ECHO;
+ CHECK_YYMORE(yytext);
+ }
+ }
+
+ . ACTION_ECHO;
+ {NL} {
+ ++linenum;
+ ACTION_ECHO;
+ if (bracelevel <= 0 || (doing_codeblock && indented_code)) {
+ if ( doing_rule_action )
+ add_action( "\tYY_BREAK]""]\n" );
+
+ piece_flush(strlen(yytext));
+ if (doing_codeblock)
+ piece_append("</PLex_Section1Or2_CodeBlock>");
+ else
+ markup_action("</PLex_Section2_Rule_Action>");
+ doing_rule_action = doing_codeblock = false;
+ BEGIN(SECT2);
+ }
+ }
+}
+
+
+ /* Reject and YYmore() are checked for above, in PERCENT_BRACE_ACTION */
+<ACTION>{
+ "{" ACTION_ECHO; ++bracelevel;
+ "}" ACTION_ECHO; --bracelevel;
+ [^[:alpha:]_{}\"'/\n\[\]]+ ACTION_ECHO;
+ {NAME} ACTION_ECHO;
+ "'"([^\'\\\n]|\\.)"'" ACTION_ECHO; /* character constant */
+ "'" ACTION_ECHO; BEGIN(CHARACTER_CONSTANT);
+ \" ACTION_ECHO; BEGIN(ACTION_STRING);
+ {NL} {
+ ++linenum;
+ ACTION_ECHO;
+ if (bracelevel <= 0) {
+ if ( doing_rule_action )
+ {
+ add_action( "\tYY_BREAK]""]\n" );
+ piece_flush(strlen(yytext));
+ markup_action("</PLex_Text></PLex_Section2_Rule_Action>");
+ }
+
+ doing_rule_action = false;
+ BEGIN(SECT2);
+ }
+ }
+ . ACTION_ECHO;
+}
+
+<ACTION_STRING>{
+ [^\[\]\"\\\n]+ ACTION_ECHO;
+ \" ACTION_ECHO; BEGIN(ACTION);
+}
+<CHARACTER_CONSTANT>{
+ [^\[\]\'\\\n]+ ACTION_ECHO;
+ \' ACTION_ECHO; BEGIN(ACTION);
+}
+<ACTION_STRING,CHARACTER_CONSTANT>{
+ (\\\n)* ACTION_ECHO;
+ \\(\\\n)*. ACTION_ECHO;
+ {NL} ++linenum; ACTION_ECHO; if (bracelevel <= 0) { BEGIN(SECT2); piece_flush(strlen(yytext)); if (doing_rule_action) markup_action("</PLex_Text></PLex_Section2_Rule_Action>"); } else { BEGIN(ACTION); }
+ . ACTION_ECHO;
+}
+
+<COMMENT,CODE_COMMENT,COMMENT_DISCARD,ACTION,ACTION_STRING,CHARACTER_CONSTANT><<EOF>> {
+ synerr( _( "EOF encountered inside an action" ) );
+ yyterminate();
+ }
+
+<EXTENDED_COMMENT,GROUP_WITH_PARAMS,GROUP_MINUS_PARAMS><<EOF>> {
+ synerr( _( "EOF encountered inside pattern" ) );
+ yyterminate();
+ }
+
+<SECT2,QUOTE,FIRSTCCL,CCL>{ESCSEQ} {
+ yylval = myesc( (unsigned char *) yytext );
+
+ if ( YY_START == FIRSTCCL )
+ BEGIN(CCL);
+
+ return CHAR;
+ }
+
+<SECT3>{
+ {M4QSTART} fputs(escaped_qstart, yyout);
+ {M4QEND} fputs(escaped_qend, yyout);
+ [^\[\]]* ECHO;
+ [][] ECHO;
+ <<EOF>> {
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section3>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate();
+#endif
+ }
+}
+<SECT3_NOESCAPE>{
+ {M4QSTART} fprintf(yyout, "[""[%s]""]", escaped_qstart);
+ {M4QEND} fprintf(yyout, "[""[%s]""]", escaped_qend);
+ [^][]* ECHO;
+ [][] ECHO;
+ <<EOF>> {
+ sectnum = 0;
+#if 1
+ piece_pack();
+ piece_append("</PLex_Section3>");
+ piece_pack();
+ return ~YY_NULL;
+#else
+ yyterminate();
+#endif
+ }
+}
+<*>.|\n format_synerr( _( "bad character: %s" ), yytext );
+
+%%
+
+
+int yywrap(void)
+ {
+ if ( --num_input_files > 0 )
+ {
+ set_input_file( *++input_files );
+ return 0;
+ }
+
+ else
+ return 1;
+ }
+
+
+/* set_input_file - open the given file (if NULL, stdin) for scanning */
+
+void set_input_file( char *file )
+ {
+ if ( file && strcmp( file, "-" ) )
+ {
+ infilename = xstrdup(file);
+ yyin = fopen( infilename, "r" );
+
+ if ( yyin == NULL )
+ lerr( _( "can't open %s" ), file );
+ }
+
+ else
+ {
+ yyin = stdin;
+ infilename = xstrdup("<stdin>");
+ }
+
+ linenum = 1;
+ }
+
+/* Nick */
+void piece_append(const char *str) {
+ piece[piece1++] = strdup(str);
+}
+
+void piece_insert(int n, const char *str) {
+ memmove(piece + n + 1, piece + n, (piece1 - n) * sizeof(char *));
+ piece[n] = strdup(str);
+ ++piece1;
+}
+
+void piece_escape(const char *p, size_t n) {
+ size_t i, j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ case '>':
+ j += 4;
+ break;
+ case '&':
+ j += 5;
+ break;
+ default:
+ ++j;
+ break;
+ }
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = 0; i < n; ++i)
+ switch (p[i]) {
+ case '<':
+ memcpy(q + j, "<", 4);
+ j += 4;
+ break;
+ case '>':
+ memcpy(q + j, ">", 4);
+ j += 4;
+ break;
+ case '&':
+ memcpy(q + j, "&", 5);
+ j += 5;
+ break;
+ default:
+ q[j++] = p[i];
+ break;
+ }
+ q[j] = 0;
+ piece[piece1++] = q;
+}
+
+void piece_flush(size_t n) {
+ piece_escape(yytext, n);
+ yytext += n;
+}
+
+void piece_pack() {
+ int i;
+ size_t j = 0;
+ for (i = piece0; i < piece1; ++i)
+ j += strlen(piece[i]);
+ char *q = malloc(j + 1);
+ j = 0;
+ for (i = piece0; i < piece1; ++i) {
+ int k = strlen(piece[i]);
+ memcpy(q + j, piece[i], k);
+ free(piece[i]);
+ j += k;
+ }
+ q[j] = 0;
+ piece[piece0++] = q;
+ piece1 = piece0;
+}
+
+int flexscan(void) {
+ int result = real_flexscan();
+ if (result < 0)
+ return ~result;
+ piece_pack();
+ piece_escape(yytext, strlen(yytext));
+ piece_pack();
+ return result;
+}
+
+static void markup_action(const char *text) {
+ /* append to last token text so it appears inside <PLex_Section2_Rule>..</PLex_Section2_Rule> */
+ /* a problem here is that Rule has already been reduced (marked up), */
+ /* because we returned a '\n' token when we detected start of action, */
+ /* hence we need to move the closing </PLex_Section2_Rule> tag over to our right */
+ int i = strlen(piece[--piece0]);
+ if (i < 21 || strcmp(piece[piece0] + i - 21, "</PLex_Section2_Rule>") != 0)
+ abort();
+ piece[piece0][i - 21] = 0;
+ piece_append(text);
+ piece_append("</PLex_Section2_Rule>");
+ piece_pack();
+}
+
+static void markup_option(const char *name, int sense) {
+ /* a problem here is that we couldn't apply markup when scanning the "no" */
+ /* prefix because we didn't know what option it was, back up to include it */
+ int i = piece1;
+ while (--i >= piece0 && strcmp(piece[i], "no") == 0)
+ ;
+ sprintf(piece_temp, "<PLex_Section1_Options_%s%s>", name, sense ? " value=\"true\"" : "");
+ piece_insert(i + 1, piece_temp);
+ piece_flush(strlen(yytext));
+ sprintf(piece_temp, "</PLex_Section1_Options_%s>", name);
+ piece_append(piece_temp);
+ /* append to last token text so it appears inside <PLex_Section1_Options>..</PLex_Section1_Options> */
+ --piece0;
+ piece_pack();
+}
--- /dev/null
+import sys
+import element
+
+def yychunk_line(root, fin):
+ line = fin.readline()
+ while len(line):
+ element.set_text(root, -1, element.get_text(root, -1) + line)
+ yield
+ line = fin.readline()
+
+def yychunk_block(root, fin, count):
+ block = fin.read(count)
+ while len(block):
+ element.set_text(root, -1, element.get_text(root, -1) + line)
+ yield
+ block = fin.read(count)
+
+def replace_with_element(root, pos0, off0, pos1, off1, child):
+ if pos0 < 0:
+ pos0, off0 = element.to_start_relative(root, pos0, off0)
+ if pos1 < 0:
+ pos1, off1 = element.to_start_relative(root, pos1, off1)
+ count = pos1 - pos0
+ assert count >= 0
+
+ temp = element.get_text(root, pos1)
+ root[pos0:pos1] = [child]
+ element.set_text(root, pos0 + 1, temp[off1:])
+ if count != 0:
+ temp = element.get_text(root, pos0)
+ element.set_text(root, pos0, temp[:off0])
+
+def replace_with_text(root, mark, i, j, text):
+ (pos0, off0) = mark[i]
+ (pos1, off1) = mark[j]
+ count = pos1 - pos0
+ assert count >= 0
+
+ temp = element.get_tail(root, pos1)
+ del root[pos0 + 1:pos1 + 1]
+ element.set_tail(
+ root,
+ pos0,
+ element.get_tail(root, pos0)[:off0] + text + temp[off1:]
+ )
+
+ if j != i + 1:
+ mark[i + 1:j + 1] = [mark[j]]
+ k = i + 1
+ delta_pos = -count
+ delta_off = off0 + len(text) - off1
+ while k < len(mark):
+ (pos2, off2) = mark[k]
+ if pos2 > pos1:
+ break
+ mark[k] = (pos2 + delta_pos, off2 + delta_off)
+ k += 1
+ if delta_pos != 0:
+ while k < len(mark):
+ (pos2, off2) = mark[k]
+ mark[k] = (pos2 + delta_pos, off2)
+ k += 1
+
+def replace_with_content(root, mark, i, j, child):
+ text = element.get_tail(child, -1)
+ if len(child) == 0:
+ replace_with_text(root, mark, i, j, text)
+ else:
+ (pos0, off0) = mark[i]
+ (pos1, off1) = mark[j]
+ count = pos1 - pos0
+ assert count >= 0
+
+ temp = element.get_tail(root, pos1)
+ root[pos0 + 1:pos1 + 1] = child[:]
+ tail = element.get_tail(root, pos0 + len(child))
+ element.set_tail(root, pos0 + len(child), tail + temp[off1:])
+ if count != 0:
+ temp = element.get_tail(root, pos0)
+ element.set_tail(root, pos0, temp[:off0] + text)
+
+ if j != i + 1:
+ mark[i + 1:j + 1] = [mark[j]]
+ k = i + 1
+ delta_pos = len(child) - count
+ delta_off = len(tail) - off1
+ while k < len(mark):
+ (pos2, off2) = mark[k]
+ if pos2 > pos1:
+ break
+ mark[k] = (pos2 + delta_pos, off2 + delta_off)
+ k += 1
+ if delta_pos != 0:
+ while k < len(mark):
+ (pos2, off2) = mark[k]
+ mark[k] = (pos2 + delta_pos, off2)
+ k += 1
+
+def extract_element(root, mark, i, j, factory, *args, **kwargs):
+ (pos0, off0) = mark[i]
+ (pos1, off1) = mark[j]
+ count = pos1 - pos0
+ assert count >= 0
+
+ result = factory(*args, **kwargs)
+ result[:] = [i.copy() for i in root[pos0 + 1:pos1 + 1]]
+ tail = element.get_tail(root, pos1)
+ if count == 0:
+ element.set_tail(result, -1, tail[off0:off1])
+ else:
+ element.set_tail(result, count - 1, tail[:off1])
+ tail = element.get_tail(root, pos0)
+ element.set_tail(result, -1, tail[off0:])
+ return result
+
+def extract_text(root, mark, i, j):
+ (pos0, off0) = mark[i]
+ (pos1, off1) = mark[j]
+ #result = [element.get_tail(root, i) for i in range(pos0, pos1 + 1)]
+ #result[-1] = result[-1][:off1]
+ #result[0] = result[0][off0:]
+ #return ''.join(result)
+ assert pos1 == pos0
+ return element.get_tail(root, pos0)[off0:off1]
+
+def apply_markup(root, pos0, off0, pos1, off1, factory, *args, **kwargs):
+ if pos0 < 0:
+ pos0, off0 = element.to_start_relative(root, pos0, off0)
+ if pos1 < 0:
+ pos1, off1 = element.to_start_relative(root, pos1, off1)
+ count = pos1 - pos0
+ assert count >= 0
+
+ child = factory(*args, **kwargs)
+ child[:] = root[pos0:pos1]
+
+ tail = element.get_text(root, pos1)
+ # at present, if count > 0, child[-1] is shared with root[pos1 - 1],
+ # so we cannot change child[-1].tail until after the replacement
+ if count == 0:
+ replace_with_element(root, pos0, off0, pos1, off1, child)
+ element.set_text(child, 0, tail[off0:off1])
+ else:
+ temp = element.get_text(root, pos0)
+ replace_with_element(root, pos0, off0, pos1, off1, child)
+ element.set_text(child, count, tail[:off1])
+ element.set_text(child, 0, temp[off0:])
+ return child
+
+def dump(root, mark):
+ i = 0
+ pos = -1
+ result = ''
+ while True:
+ assert i >= len(mark) or mark[i][0] >= pos
+ tail = element.get_tail(root, pos)
+ off = 0
+ while off < len(tail) or (i < len(mark) and mark[i][0] == pos):
+ end = len(tail) if i >= len(mark) or mark[i][0] != pos else mark[i][1]
+ if end > off:
+ result += tail[off:end].replace('\n', '(lf)').replace('\t', '(tab)')
+ off = end
+ if i < len(mark) and mark[i][0] == pos:
+ result += '({0:d})'.format(i)
+ i += 1
+ pos += 1
+ if pos >= len(root):
+ break
+ result += '({0:s}{1:d})'.format(root[pos].tag, pos)
+ assert i >= len(mark)
+ result += '(eof)'
+ sys.stdout.write('{0:s}\n'.format(result[-159:])) #79:]))
+ sys.stdout.flush()
--- /dev/null
+def wrap_repr(text, width):
+ lines = []
+ i = 0
+ while i < len(text):
+ j = i + width
+ if j < len(text):
+ j = max(
+ [
+ text.rfind('(', i, j) + 1,
+ text.rfind('[', i, j) + 1,
+ text.rfind('{', i, j) + 1,
+ text.rfind('.', i, j) + 1,
+ text.rfind(')', i, j + 1),
+ text.rfind(']', i, j + 1),
+ text.rfind('}', i, j + 1),
+ text.rfind(' ', i, j + 1),
+ ]
+ )
+ assert j > 0
+ lines.append(text[i:j] + '\n')
+ i = j
+ while text[i:i + 1] == ' ':
+ i += 1
+ return ''.join(lines)
--- /dev/null
+#!/usr/bin/env python3
+
+import c_to_python
+import sys
+import xml.etree.ElementTree
+
+root = xml.etree.ElementTree.parse(sys.stdin).getroot()
+text = c_to_python.extract(root)
+
+# see tests/scan.l
+text = text.replace(r'{WS}[[:blank:]]+', '{WS}')
+text = text.replace(r'{WS}([[:blank:]]+)', '{WS}')
+text = text.replace(r'{OPTWS}[[:blank:]]*', '{OPTWS}')
+text = text.replace(r'{OPTWS}([[:blank:]]*)', '{OPTWS}')
+text = text.replace(r'{NOT_WS}[^[:blank:]\r\n]', '{NOT_WS}')
+text = text.replace(r'{NOT_WS}([^[:blank:]\r\n])', '{NOT_WS}')
+
+text = text.replace(r'{NL}\r?\n', '{NL}')
+text = text.replace(r'{NL}(\r?\n)', '{NL}')
+
+text = text.replace(r'{NAME}([[:alpha:]_][[:alnum:]_-]*)', '{NAME}')
+text = text.replace(r'{NAME}(([[:alpha:]_][[:alnum:]_-]*))', '{NAME}')
+text = text.replace(r'{NOT_NAME}[^[:alpha:]_*\n]+', '{NOT_NAME}')
+text = text.replace(r'{NOT_NAME}([^[:alpha:]_*\n]+)', '{NOT_NAME}')
+
+text = text.replace(r'{SCNAME}{NAME}', '{SCNAME}')
+text = text.replace(r'{SCNAME}({NAME})', '{SCNAME}')
+
+text = text.replace(r'{ESCSEQ}(\\([^\n]|[0-7]{1,3}|x[[:xdigit:]]{1,2}))', '{ESCSEQ}')
+text = text.replace(r'{ESCSEQ}((\\([^\n]|[0-7]{1,3}|x[[:xdigit:]]{1,2})))', '{ESCSEQ}')
+
+text = text.replace(r'{FIRST_CCL_CHAR}([^\\\n]|{ESCSEQ})', '{FIRST_CCL_CHAR}')
+text = text.replace(r'{FIRST_CCL_CHAR}(([^\\\n]|{ESCSEQ}))', '{FIRST_CCL_CHAR}')
+text = text.replace(r'{CCL_CHAR}([^\\\n\]]|{ESCSEQ})', '{CCL_CHAR}')
+text = text.replace(r'{CCL_CHAR}(([^\\\n\]]|{ESCSEQ}))', '{CCL_CHAR}')
+text = text.replace(r'{CCL_EXPR}("[:"^?[[:alpha:]]+":]")', '{CCL_EXPR}')
+text = text.replace(r'{CCL_EXPR}(("[:"^?[[:alpha:]]+":]"))', '{CCL_EXPR}')
+
+text = text.replace(r'{LEXOPT}[aceknopr]', '{LEXOPT}')
+text = text.replace(r'{LEXOPT}([aceknopr])', '{LEXOPT}')
+
+text = text.replace(r'{M4QSTART}"[""["', '{M4QSTART}')
+text = text.replace(r'{M4QSTART}("[""[")', '{M4QSTART}')
+text = text.replace(r'{M4QEND}"]""]"', '{M4QEND}')
+text = text.replace(r'{M4QEND}("]""]")', '{M4QEND}')
+
+sys.stdout.write(text)