OSDN Git Service

Added proper number suffixes in GLSL parser
authorAlexis Hetu <sugoi@google.com>
Tue, 9 Jun 2015 15:37:45 +0000 (11:37 -0400)
committerAlexis Hétu <sugoi@google.com>
Tue, 9 Jun 2015 19:15:34 +0000 (19:15 +0000)
Numbers like "1.0f" or "10u" are now allowed
in GLSL, so I added code to do proper parsing
of these numbers.

Change-Id: Ia4635ab2b449399bd4adea2c5c94567b5b8a5f8e
Reviewed-on: https://swiftshader-review.googlesource.com/3434
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/compiler/glslang.l
src/OpenGL/compiler/glslang_lex.cpp
src/OpenGL/compiler/preprocessor/Tokenizer.cpp
src/OpenGL/compiler/preprocessor/Tokenizer.l
src/OpenGL/compiler/util.cpp
src/OpenGL/compiler/util.h

index ed086b6..cbba975 100644 (file)
@@ -58,6 +58,9 @@ static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
 static int ES2_identifier_ES3_keyword(TParseContext *context, int token);
 static int uint_constant(TParseContext *context);
+static int int_constant(yyscan_t yyscanner);
+static int float_constant(yyscan_t yyscanner);
+static int floatsuffix_check(TParseContext* context);
 %}
 
 %option noyywrap nounput never-interactive
@@ -314,17 +317,21 @@ O           [0-7]
    return check_type(yyscanner);
 }
 
-0[xX]{H}+         { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-0{O}+             { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-0{D}+             { context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
-{D}+              { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+0[xX]{H}+         { return int_constant(yyscanner); }
+0{O}+             { return int_constant(yyscanner); }
+{D}+              { return int_constant(yyscanner); }
+
 0[xX]{H}+[uU]     { return uint_constant(context); }
 0{O}+[uU]         { return uint_constant(context); }
 {D}+[uU]          { return uint_constant(context); }
 
-{D}+{E}           { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
-{D}+"."{D}*({E})? { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
-"."{D}+({E})?     { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{D}+{E}           { return float_constant(yyscanner); }
+{D}+"."{D}*({E})? { return float_constant(yyscanner); }
+"."{D}+({E})?     { return float_constant(yyscanner); }
+
+{D}+{E}[fF]           { return floatsuffix_check(context); }
+{D}+"."{D}*({E})?[fF] { return floatsuffix_check(context); }
+"."{D}+({E})?[fF]     { return floatsuffix_check(context); }
 
 "+="            {  return(ADD_ASSIGN); }
 "-="            {  return(SUB_ASSIGN); }
@@ -479,10 +486,45 @@ int uint_constant(TParseContext *context)
         return 0;
     }
 
-    yylval->lex.u = static_cast<unsigned int>(strtol(yytext, 0, 0));
+    if (!atoi_clamp(yytext, &(yylval->lex.i)))
+        yyextra->warning(yylineno, "Integer overflow", yytext, "");
+
     return UINTCONSTANT;
 }
 
+int floatsuffix_check(TParseContext* context)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
+
+    if (context->shaderVersion < 300)
+    {
+        context->error(yylineno, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext);
+        context->recover();
+        return 0;
+    }
+
+    if (!atof_clamp(yytext, &(yylval->lex.f)))
+        yyextra->warning(yylineno, "Float overflow", yytext, "");
+
+    return(FLOATCONSTANT);
+}
+
+int int_constant(yyscan_t yyscanner) {
+    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
+
+    if (!atoi_clamp(yytext, &(yylval->lex.i)))
+        yyextra->warning(yylineno, "Integer overflow", yytext, "");
+    return INTCONSTANT;
+}
+
+int float_constant(yyscan_t yyscanner) {
+    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
+
+    if (!atof_clamp(yytext, &(yylval->lex.f)))
+        yyextra->warning(yylineno, "Float overflow", yytext, "");
+    return FLOATCONSTANT;
+}
+
 void yyerror(TParseContext* context, const char* reason) {
     struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
 
index 340b9d1..7a7b054 100644 (file)
@@ -392,8 +392,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 242
-#define YY_END_OF_BUFFER 243
+#define YY_NUM_RULES 244
+#define YY_END_OF_BUFFER 245
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -401,99 +401,99 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[826] =
+static yyconst flex_int16_t yy_accept[828] =
     {   0,
-        0,    0,    0,    0,    0,    0,  243,  241,  240,  240,
-      225,  231,  236,  220,  221,  229,  228,  217,  226,  224,
-      230,  186,  186,  218,  214,  232,  219,  233,  237,  182,
-      222,  223,  235,  182,  182,  182,  182,  182,  182,  182,
+        0,    0,    0,    0,    0,    0,  245,  243,  242,  242,
+      227,  233,  238,  222,  223,  231,  230,  219,  228,  226,
+      232,  185,  185,  220,  216,  234,  221,  235,  239,  182,
+      224,  225,  237,  182,  182,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  215,  234,  216,  227,    3,    4,    3,
-      239,  242,  238,  211,  197,  216,  205,  200,  195,  203,
-      193,  204,  194,  192,    2,    1,  196,  191,  184,  185,
-        0,  189,    0,  186,  223,  215,  222,  212,  208,  210,
-      209,  213,  182,  201,  207,  182,  182,  182,  182,  182,
+      182,  182,  182,  217,  236,  218,  229,    3,    4,    3,
+      241,  244,  240,  213,  199,  218,  207,  202,  197,  205,
+      195,  206,  196,  191,    2,    1,  198,  190,  184,  185,
+        0,  188,    0,  225,  217,  224,  214,  210,  212,  211,
+      215,  182,  203,  209,  182,  182,  182,  182,  182,  182,
 
-      182,  182,  182,  182,  182,  182,  182,   17,  182,  182,
+      182,  182,  182,  182,  182,  182,   17,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,   20,  182,  182,   28,  182,  182,  182,  182,  182,
+       20,  182,  182,   28,  182,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  202,  206,
-        5,  238,    0,    1,  191,    0,  188,    0,  190,  183,
-      198,  199,  182,  140,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  204,  208,    5,
+      240,    0,  194,    1,  190,    0,  193,  187,    0,  189,
+      183,  200,  201,  182,  140,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,   18,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   18,  182,
 
-      182,  182,  182,  182,  182,  182,  182,  182,   32,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,   32,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-       29,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   29,  182,  182,  182,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,    0,  192,    0,  191,  187,
-      182,  182,  182,   35,  182,  182,   23,  179,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,   21,  143,
-      182,  182,  182,  182,   26,  182,  182,  147,  159,  182,
+      182,  182,  182,  182,  182,  182,    0,  191,    0,  190,
+      192,  186,  182,  182,  182,   35,  182,  182,   23,  179,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       21,  143,  182,  182,  182,  182,   26,  182,  182,  147,
+      159,  182,  182,  182,  182,  182,  182,  182,  182,  182,
 
-      182,  156,    9,   40,   41,   42,  182,  182,  182,  182,
+      182,  182,  182,  156,    9,   40,   41,   42,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      146,   36,  182,  182,   33,  182,  182,  182,  182,  182,
-      182,  182,   52,   53,   54,   34,  182,  182,  182,  182,
-      182,  182,   15,   61,   62,   63,  182,  141,  182,  182,
-       12,  182,  182,  182,  182,  168,  169,  170,  182,   37,
-      182,  160,   31,  171,  172,  173,    7,  165,  166,  167,
-      182,  182,  182,   30,  163,  182,  182,  182,   55,   56,
-       57,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-
-      182,  182,   90,  182,  182,  182,  182,  182,  182,  182,
-      157,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  142,  182,  182,  181,   58,   59,   60,  182,
-      182,   19,  182,   95,  182,  182,  182,  182,   93,  182,
-      182,  182,  158,  153,   96,  182,  182,  182,  182,  182,
-      182,  148,  182,  182,  182,   82,   43,   46,   48,   47,
-       44,   50,   49,   51,   45,  182,  182,  182,  182,  164,
-      139,  182,  182,  151,  182,  182,  182,   39,   91,  178,
-       27,  152,   81,  182,  162,   22,  182,  182,  182,  182,
+      182,  182,  146,   36,  182,  182,   33,  182,  182,  182,
+      182,  182,  182,  182,   52,   53,   54,   34,  182,  182,
+      182,  182,  182,  182,   15,   61,   62,   63,  182,  141,
+      182,  182,   12,  182,  182,  182,  182,  168,  169,  170,
+      182,   37,  182,  160,   31,  171,  172,  173,    7,  165,
+      166,  167,  182,  182,  182,   30,  163,  182,  182,  182,
+       55,   56,   57,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,   90,  182,  182,  182,  182,  182,
+      182,  182,  157,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  142,  182,  182,  181,   58,   59,
+       60,  182,  182,   19,  182,   95,  182,  182,  182,  182,
+       93,  182,  182,  182,  158,  153,   96,  182,  182,  182,
+      182,  182,  182,  148,  182,  182,  182,   82,   43,   46,
+       48,   47,   44,   50,   49,   51,   45,  182,  182,  182,
+      182,  164,  139,  182,  182,  151,  182,  182,  182,   39,
+       91,  178,   27,  152,   81,  182,  162,   22,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
 
-       24,   38,  182,  182,  182,  182,  182,  182,   97,   98,
-       99,  182,  182,  182,  182,  182,    8,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  144,  182,
-      182,  182,  182,  182,   13,  182,  182,   14,  182,  182,
-      182,  182,   25,   83,   16,  154,  101,  102,  103,  182,
+      182,  182,   24,   38,  182,  182,  182,  182,  182,  182,
+       97,   98,   99,  182,  182,  182,  182,  182,    8,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  149,  182,  182,  182,   85,   87,   84,  182,  182,
-      182,  182,  182,  182,  182,  145,  105,  106,  107,  182,
-      182,  161,  182,  150,  182,  182,   11,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  100,  155,    6,  182,
-
-      182,  182,  182,  182,  180,  182,   94,   10,  174,   64,
-       67,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  182,   86,  182,  182,  182,  182,  104,
-      182,  182,  182,  182,  182,  124,   70,   71,  182,  182,
+      144,  182,  182,  182,  182,  182,   13,  182,  182,   14,
+      182,  182,  182,  182,   25,   83,   16,  154,  101,  102,
+      103,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  149,  182,  182,  182,   85,   87,   84,
+      182,  182,  182,  182,  182,  182,  182,  145,  105,  106,
+      107,  182,  182,  161,  182,  150,  182,  182,   11,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  100,  155,
+
+        6,  182,  182,  182,  182,  182,  180,  182,   94,   10,
+      174,   64,   67,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,   86,  182,  182,  182,
+      182,  104,  182,  182,  182,  182,  182,  124,   70,   71,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,   92,  182,  182,  182,  108,  126,   74,   75,  182,
-      182,   88,  182,  182,  182,  182,  182,  182,  182,  119,
+      182,  182,  182,   92,  182,  182,  182,  108,  126,   74,
+       75,  182,  182,   88,  182,  182,  182,  182,  182,  182,
+      182,  119,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  133,  182,  182,  182,  182,   65,  182,  182,
       182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      133,  182,  182,  182,  182,   65,  182,  182,  182,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  120,  109,
 
-      182,  110,  182,  182,  182,  134,  182,  182,   72,  182,
-      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  121,  182,  182,  135,  182,  182,   76,  111,
-      112,  182,  115,  182,  116,  182,  182,  182,  182,  182,
-       89,  182,  182,  182,  182,  176,  182,   68,  130,  182,
-      182,  113,  114,  182,  182,  182,  182,  182,  182,  182,
-      182,  182,  182,  128,  131,  122,  182,   69,  182,  182,
-      182,  182,  182,  182,  182,  182,  129,  132,  182,  182,
-      125,   73,  182,  182,  175,  182,  182,  182,   78,  182,
-      182,  127,   77,  182,  182,  182,  182,  182,  182,  136,
-
-      182,  182,  182,  182,  182,  182,  137,  182,  182,  182,
-       79,  182,  138,  117,  118,  182,  182,  182,   66,  182,
-      182,  177,  123,   80,    0
+      120,  109,  182,  110,  182,  182,  182,  134,  182,  182,
+       72,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  121,  182,  182,  135,  182,  182,
+       76,  111,  112,  182,  115,  182,  116,  182,  182,  182,
+      182,  182,   89,  182,  182,  182,  182,  176,  182,   68,
+      130,  182,  182,  113,  114,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  128,  131,  122,  182,   69,
+      182,  182,  182,  182,  182,  182,  182,  182,  129,  132,
+      182,  182,  125,   73,  182,  182,  175,  182,  182,  182,
+       78,  182,  182,  127,   77,  182,  182,  182,  182,  182,
+
+      182,  136,  182,  182,  182,  182,  182,  182,  137,  182,
+      182,  182,   79,  182,  138,  117,  118,  182,  182,  182,
+       66,  182,  182,  177,  123,   80,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -532,205 +532,207 @@ static yyconst flex_int32_t yy_meta[73] =
     {   0,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    3,    3,    3,    3,    3,    3,
-        3,    1,    1,    1,    1,    1,    1,    3,    3,    3,
-        3,    3,    3,    4,    4,    4,    4,    4,    4,    4,
-        1,    1,    1,    4,    3,    3,    3,    3,    3,    3,
-        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    4,    4,    4,    4,    4,    1,    1,
+        3,    1,    1,    1,    1,    1,    1,    4,    4,    4,
+        4,    3,    3,    5,    5,    5,    5,    5,    5,    5,
+        1,    1,    1,    5,    4,    4,    4,    4,    3,    3,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    1,    1,
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[831] =
+static yyconst flex_int16_t yy_base[835] =
     {   0,
-        0,    0,   70,   71,   80,    0, 1046, 1047, 1047, 1047,
-     1020,   50,  147, 1047, 1047, 1019,  144, 1047,  143,  141,
-      156,  169,  223, 1017, 1047,  169, 1017,   52, 1047,    0,
-     1047, 1047,  152,  117,  138,  118,  157,  148,  167,  983,
-      147,  173,  159,  126,  188,  977,  200,  990,  205,  199,
-      212,  226,  147, 1047,  158, 1047, 1047, 1047, 1047, 1024,
-     1047, 1047,    0, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
-     1047, 1047, 1047,  262, 1047,    0, 1047,  272,  256,  310,
-      297, 1047,    0,    0, 1047, 1047, 1047, 1012, 1047, 1047,
-     1047, 1011,    0, 1047, 1047,  973,  978,  191,  975,  983,
-
-      982,  969,  972,  983,  245,  977,  965,  962,  975,  962,
-      959,  959,  965,  158,  240,  959,  969,  955,  961,  964,
-      965,    0,  957,  967,  277,  966,  961,  942,  162,  946,
-      959,  950,  246,  943,  286,  955,  957,  289,  946,  943,
-      932,  941,  292,  294,  945,  941,  943,  932,  935,  287,
-      203,  255,  944,  932,  944,  199,  937,  936, 1047, 1047,
-     1047,    0,  345,    0,  359,  377, 1047,  384,  394,  306,
-     1047, 1047,  935,    0,  931,  926,  930,  939,  936,  305,
-      920,  920,  931,  923,  309,  933,  930,  930,  928,  925,
-      917,  923,  910,  908,  920,  906,  922,    0,  919,  907,
-
-      914,  911,  915,  916,  909,  906,  895,  894,  907,  910,
-      898,  906,  894,  900,  891,  364,  896,  899,  890,  897,
-      886,  890,  881,  895,  894,  885,  891,  248,  875,  878,
-      876,  886,  876,  871,  869,  871,  881,  867,  869,  866,
-      877,  876,  879,  861,  366,  869,  865,  863,  872,  851,
-      367,  869,  871,  860,  852,  402,  410,  417,  424, 1047,
-      849,  859,  858,    0,  856,  429,    0,    0,  849,  847,
-      847,  848,  843,  851,  840,  857,  846,  432,    0,    0,
-      840,  850,  849,  849,    0,  834,  435,    0,    0,  836,
-      438,  843,  844,  835,  829,  828,  829,  828,  828,  441,
-
-      823,    0,    0,  819,  818,  817,  819,  820,  825,  819,
-      815,  828,  823,  823,  821,  820,  814,  808,  810,  809,
-      813,  805,  808,  803,  811,  816,  804,  801,  813,  804,
-        0,    0,  810,  806,    0,  798,  798,  803,  794,  801,
-      444,  798,    0,    0,    0,    0,  788,  800,  799,  798,
-      799,  799,    0,    0,    0,    0,  786,    0,  794,  785,
-        0,  784,  785,  779,  789,    0,    0,    0,  780,    0,
-      776,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      786,  448,  785,    0,    0,  783,  779,  776,    0,    0,
-        0,  768,  450,  453,  456,  773,  769,  774,  765,  763,
-
-      776,  761,    0,  761,  774,  763,  759,  765,  760,  767,
-        0,  765,  762,  766,  750,  748,  751,  757,  763,  758,
-      757,  745,    0,  747,  748,    0,    0,    0,    0,  745,
-      748,    0,  742,    0,  755,  735,  744,  739,    0,  732,
-      732,  745,    0,  747,    0,  463,  760,  759,  758,  725,
-      724,    0,  741,  740,  735,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  724,  737,  724,  721,    0,
-        0,  726,  725,    0,  722,  729,  728,    0,  714,    0,
-        0,    0,    0,  711,    0,    0,  710,  721,  466,  714,
-      720,  719,  716,  711,  708,  701,  701,  714,  699,  711,
-
-        0,    0,  704,  727,  726,  725,  692,  691,  330,  448,
-        0,  703,  706,  704,  693,  689,    0,  701,  698,  697,
-      687,  686,  676,  693,  679,  471,  687,  690,    0,  707,
-      706,  705,  672,  671,    0,  685,  672,    0,  682,  675,
-      676,  679,    0,    0,    0,    0,  699,  698,    0,  675,
-      678,  663,  670,  661,  668,  669,  669,  668,  654,  481,
-      666,    0,  667,  656,  655,    0,    0,    0,  680,  679,
-      678,  645,  644,  640,  648,    0,  676,  675,    0,  652,
-      655,    0,  488,    0,  633,  642,    0,  638,  637,  646,
-      646,  634,  648,  632,  646,  641,    0,    0,    0,  658,
-
-      657,  656,  623,  622,    0,  622,    0,    0,  474,  485,
-      646,  632,  635,  618,  630,  618,  617,  626,  626,  643,
-      642,  641,  608,  607,    0,  607,  608,  607,  617,    0,
-      620,  616,  618,  614,  601,  632,  479,    0,  609,  612,
-      604,  596,  603,  594,  615,  603,  599,  601,  599,  599,
-      598,    0,  586,  585,  595,    0,  615,  491,    0,  592,
-      595,    0,  595,  594,  578,  570,  578,  568,  576,    0,
-      573,  572,  593,  581,  579,  579,  563,  566,  580,  564,
-      595,  575,  576,  573,  570,  580,  557,  571,  570,  554,
-      553,  552,  573,  561,  559,  559,  540,  539,    0,  567,
-
-      539,  565,  537,  541,  540,  571,  551,  548,    0,  547,
-      550,  546,  548,  532,  529,  542,  527,  528,  535,  529,
-      518,  517,    0,  523,  522,  553,  533,  530,    0,    0,
-        0,  526,    0,  525,    0,  531,  530,  514,  511,  512,
-        0,  504,  512,  502,  508,  529,  508,    0,    0,  520,
-      519,    0,    0,  518,  517,  501,  498,  499,  513,  512,
-      489,  488,  494,    0,    0,  515,  487,  513,  505,  497,
-      483,  118,  125,  130,  149,  187,    0,    0,  226,  255,
-        0,    0,  275,  272,    0,  286,  280,  311,    0,  314,
-      352,    0,    0,  345,  348,  349,  418,  445,  446,    0,
-
-      446,  443,  477,  448,  456,  459,    0,  477,  479,  471,
-        0,  492,    0,    0,    0,  473,  474,  468,    0,  469,
-      470,    0,    0,    0, 1047,  535,  537,  539,  543,  542
+        0,    0,   70,   71,   80,    0, 1032, 1033, 1033, 1033,
+     1006,   50,  147, 1033, 1033, 1005,  144, 1033,  143,  141,
+      156,  169,  223, 1003, 1033,  169, 1003,   52, 1033,    0,
+     1033, 1033,  152,  117,  138,  118,  157,  148,  167,  969,
+      147,  173,  159,  126,  188,  963,  200,  976,  205,  199,
+      212,  226,  147, 1033,  158, 1033, 1033, 1033, 1033, 1010,
+     1033, 1033,    0, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
+     1033, 1033, 1033,  245, 1033,    0, 1033,  247,  242,    0,
+      294, 1033,    0, 1033, 1033, 1033,  998, 1033, 1033, 1033,
+      997,    0, 1033, 1033,  959,  964,  191,  961,  969,  968,
+
+      955,  958,  969,  231,  963,  951,  948,  961,  948,  945,
+      945,  951,  158,  240,  945,  955,  941,  947,  950,  951,
+        0,  943,  953,  261,  952,  947,  928,  162,  932,  945,
+      936,  240,  929,  270,  941,  943,  229,  932,  929,  918,
+      927,  247,  243,  931,  927,  929,  918,  921,  244,  203,
+      273,  930,  918,  930,  199,  923,  922, 1033, 1033, 1033,
+        0,  319, 1033,    0,  295,  331, 1033, 1033,  338,  345,
+      328, 1033, 1033,  921,    0,  917,  912,  916,  925,  922,
+      319,  906,  906,  917,  909,  260,  919,  916,  916,  914,
+      911,  903,  909,  896,  894,  906,  892,  908,    0,  905,
+
+      893,  900,  897,  901,  902,  895,  892,  881,  880,  893,
+      896,  884,  892,  880,  886,  877,  352,  882,  885,  876,
+      883,  872,  876,  867,  881,  880,  871,  877,  314,  861,
+      864,  862,  872,  862,  857,  855,  857,  867,  853,  855,
+      852,  863,  862,  865,  847,  324,  855,  851,  849,  858,
+      837,  366,  855,  857,  846,  838,  381,  388,  395,  407,
+     1033, 1033,  835,  845,  844,    0,  842,  369,    0,    0,
+      835,  833,  833,  834,  829,  837,  826,  843,  832,  375,
+        0,    0,  826,  836,  835,  835,    0,  820,  400,    0,
+        0,  822,  412,  829,  830,  821,  815,  814,  815,  814,
+
+      814,  415,  809,    0,    0,  805,  804,  803,  805,  806,
+      811,  805,  801,  814,  809,  809,  807,  806,  800,  794,
+      796,  795,  799,  791,  794,  789,  797,  802,  790,  787,
+      799,  790,    0,    0,  796,  792,    0,  784,  784,  789,
+      780,  787,  418,  784,    0,    0,    0,    0,  774,  786,
+      785,  784,  785,  785,    0,    0,    0,    0,  772,    0,
+      780,  771,    0,  770,  771,  765,  775,    0,    0,    0,
+      766,    0,  762,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  772,  425,  771,    0,    0,  769,  765,  762,
+        0,    0,    0,  754,  427,  430,  433,  759,  755,  760,
+
+      751,  749,  762,  747,    0,  747,  760,  749,  745,  751,
+      746,  753,    0,  751,  748,  752,  736,  734,  737,  743,
+      749,  744,  743,  731,    0,  733,  734,    0,    0,    0,
+        0,  731,  734,    0,  728,    0,  741,  721,  730,  725,
+        0,  718,  718,  731,    0,  733,    0,  442,  746,  745,
+      744,  711,  710,    0,  727,  726,  721,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  710,  723,  710,
+      707,    0,    0,  712,  711,    0,  708,  715,  714,    0,
+      700,    0,    0,    0,    0,  697,    0,    0,  696,  707,
+      445,  700,  706,  705,  702,  697,  694,  687,  687,  700,
+
+      685,  697,    0,    0,  690,  713,  712,  711,  678,  677,
+      351,  352,    0,  689,  692,  690,  679,  675,    0,  687,
+      684,  683,  673,  672,  662,  679,  665,  448,  673,  676,
+        0,  693,  692,  691,  658,  657,    0,  671,  658,    0,
+      668,  661,  662,  665,    0,    0,    0,    0,  685,  684,
+        0,  661,  664,  649,  656,  647,  654,  655,  655,  654,
+      640,  452,  652,    0,  653,  642,  641,    0,    0,    0,
+      666,  665,  664,  631,  630,  626,  634,    0,  662,  661,
+        0,  638,  641,    0,  467,    0,  619,  628,    0,  624,
+      623,  632,  632,  620,  634,  618,  632,  627,    0,    0,
+
+        0,  644,  643,  642,  609,  608,    0,  608,    0,    0,
+      448,  463,  632,  618,  621,  604,  616,  604,  603,  612,
+      612,  629,  628,  627,  594,  593,    0,  593,  594,  593,
+      603,    0,  606,  602,  604,  600,  587,  618,  467,    0,
+      595,  598,  590,  582,  589,  580,  601,  589,  585,  587,
+      585,  585,  584,    0,  572,  571,  581,    0,  601,  471,
+        0,  578,  581,    0,  581,  580,  564,  556,  564,  554,
+      562,    0,  559,  558,  579,  567,  565,  565,  549,  552,
+      566,  550,  581,  561,  562,  559,  556,  566,  543,  557,
+      556,  540,  539,  538,  559,  547,  545,  545,  526,  525,
+
+        0,  553,  525,  551,  523,  527,  526,  557,  537,  534,
+        0,  533,  536,  532,  534,  518,  515,  528,  513,  514,
+      521,  515,  504,  503,    0,  509,  508,  539,  519,  516,
+        0,    0,    0,  512,    0,  511,    0,  517,  516,  500,
+      497,  498,    0,  490,  498,  488,  494,  515,  494,    0,
+        0,  506,  505,    0,    0,  504,  503,  487,  484,  485,
+      499,  498,  475,  474,  480,    0,    0,  501,  473,  499,
+      491,  483,  469,  118,  125,  130,  149,  187,    0,    0,
+      255,  276,    0,    0,  288,  290,    0,  321,  308,  332,
+        0,  362,  403,    0,    0,  408,  398,  409,  406,  434,
+
+      442,    0,  440,  424,  458,  425,  428,  429,    0,  455,
+      457,  449,    0,  471,    0,    0,    0,  452,  453,  447,
+        0,  448,  449,    0,    0,    0, 1033,  514,  517,  520,
+      523,  526,  525,  529
     } ;
 
-static yyconst flex_int16_t yy_def[831] =
+static yyconst flex_int16_t yy_def[835] =
     {   0,
-      825,    1,  826,  826,  825,    5,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  827,
-      825,  825,  825,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  828,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  829,  825,  825,   22,  825,
-      825,  825,  830,   23,  825,  825,  825,  825,  825,  825,
-      825,  825,  827,  825,  825,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  825,  825,
-      825,  828,  825,  829,  825,  825,  825,  825,  825,  830,
-      825,  825,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  825,  825,  825,  825,  825,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
-      827,  827,  827,  827,    0,  825,  825,  825,  825,  825
+      827,    1,  828,  828,  827,    5,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  829,
+      827,  827,  827,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  830,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  831,  827,  832,  827,  833,   22,   23,
+      827,  827,  834,  827,  827,  827,  827,  827,  827,  827,
+      827,  829,  827,  827,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  827,  827,  827,
+      830,  827,  827,  832,  833,  827,  827,  827,  827,  827,
+      834,  827,  827,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  827,  827,  827,  827,
+      827,  827,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,    0,  827,  827,  827,
+      827,  827,  827,  827
     } ;
 
-static yyconst flex_int16_t yy_nxt[1120] =
+static yyconst flex_int16_t yy_nxt[1106] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
@@ -739,7 +741,7 @@ static yyconst flex_int16_t yy_nxt[1120] =
        31,   32,   33,   30,   34,   35,   36,   37,   38,   39,
        40,   41,   42,   30,   43,   44,   45,   46,   47,   48,
        49,   50,   51,   52,   53,   30,   30,   30,   54,   55,
-       56,   57,   59,   59,   65,   66,   91,   92,   60,   60,
+       56,   57,   59,   59,   65,   66,   90,   91,   60,   60,
         8,   61,   62,    8,    8,    8,    8,    8,    8,    8,
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
 
@@ -749,115 +751,114 @@ static yyconst flex_int16_t yy_nxt[1120] =
        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
        63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
         8,    8,   67,   70,   72,   74,   74,   74,   74,   74,
-       74,   74,  102,   96,   75,  790,  103,   73,   71,   76,
-      130,   68,  104,   86,  131,  105,   94,   97,   98,  791,
-       77,   78,  159,   79,   79,   79,   79,   79,   79,   80,
-       87,  119,   88,   89,   95,   99,  792,  100,  157,  120,
-
-       81,  101,  110,  128,  111,  106,  158,   82,   83,  107,
-      121,  113,  194,  112,  108,  793,  129,   81,  214,  114,
-      109,  115,  122,  195,  116,  123,  215,  160,  124,  125,
-      117,   82,  132,  126,   83,   78,  127,   84,   84,   84,
-       84,   84,   84,   84,  135,  133,  794,  146,  175,  139,
-      147,  252,  176,  253,   81,  245,  140,  141,  148,  136,
-      142,   82,  137,  246,  150,  149,  143,  144,  151,  145,
-      154,   81,  152,  795,  155,  153,   74,   74,   74,   74,
-       74,   74,   74,  156,  196,   82,  165,  165,  165,  165,
-      165,  165,  165,  163,  167,  825,  183,  197,  219,  247,
-
-      184,  185,  796,  166,  220,  318,  168,  248,  168,  319,
-      163,  169,  169,  169,  169,  169,  169,  169,  167,  797,
-      166,  825,   78,  798,   80,   80,   80,   80,   80,   80,
-       80,  206,  222,  227,  207,  208,  234,  799,  209,  236,
-      210,   81,  243,  244,  260,  223,  800,  224,   82,  228,
-      229,  235,  237,  267,  256,  801,  256,  552,   81,  257,
-      257,  257,  257,  257,  257,  257,  268,  553,  260,  273,
-      274,  802,   82,  165,  165,  165,  165,  165,  165,  165,
-      304,  305,  306,  343,  344,  345,  258,  803,  258,  804,
-      166,  259,  259,  259,  259,  259,  259,  259,  169,  169,
-
-      169,  169,  169,  169,  169,  805,  806,  166,  169,  169,
-      169,  169,  169,  169,  169,  336,  257,  257,  257,  257,
-      257,  257,  257,  337,  257,  257,  257,  257,  257,  257,
-      257,  259,  259,  259,  259,  259,  259,  259,  259,  259,
-      259,  259,  259,  259,  259,  354,  355,  356,  366,  367,
-      368,  374,  375,  376,  378,  379,  380,  389,  390,  391,
-      427,  428,  429,  447,  448,  449,  457,  458,  459,  460,
-      461,  462,  463,  464,  465,  554,  450,  451,  504,  505,
-      506,  530,  531,  532,  807,  555,  569,  570,  571,  808,
-      809,  507,  508,  810,  533,  534,  600,  601,  602,  572,
-
-      573,  642,  574,  620,  621,  622,  672,  811,  812,  603,
-      604,  643,  644,  673,  813,  674,  623,  624,  692,  645,
-      814,  646,  647,  815,  816,  693,  817,  694,  818,  819,
-      820,  821,  822,  823,  824,   58,   58,   58,   58,   93,
-       93,  162,  162,  164,  170,  164,  164,  789,  788,  787,
-      786,  785,  784,  783,  782,  781,  780,  779,  778,  777,
-      776,  775,  774,  773,  772,  771,  770,  769,  768,  767,
-      766,  765,  764,  763,  762,  761,  760,  759,  758,  757,
-      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
-      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
-
-      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
-      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
-      716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
-      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
-      696,  695,  691,  690,  689,  688,  687,  686,  685,  684,
-      683,  682,  681,  680,  679,  678,  677,  676,  675,  671,
-      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
-      650,  649,  648,  641,  640,  639,  638,  637,  636,  635,
-      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
-
-      619,  618,  617,  616,  615,  614,  613,  612,  611,  610,
-      609,  608,  607,  606,  605,  599,  598,  597,  596,  595,
-      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
-      584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
-      568,  567,  566,  565,  564,  563,  562,  561,  560,  559,
-      558,  557,  556,  551,  550,  549,  548,  547,  546,  545,
-      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
-      529,  528,  527,  526,  525,  524,  523,  522,  521,  520,
-      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
-      509,  503,  502,  501,  500,  499,  498,  497,  496,  495,
-
-      494,  493,  492,  491,  490,  489,  488,  487,  486,  485,
-      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
-      474,  473,  472,  471,  470,  469,  468,  467,  466,  456,
-      455,  454,  453,  452,  446,  445,  444,  443,  442,  441,
-      440,  439,  438,  437,  436,  435,  434,  433,  432,  431,
-      430,  426,  425,  424,  423,  422,  421,  420,  419,  418,
-      417,  416,  415,  414,  413,  412,  411,  410,  409,  408,
-      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
-      397,  396,  395,  394,  393,  392,  388,  387,  386,  385,
-      384,  383,  382,  381,  377,  373,  372,  371,  370,  369,
-
-      365,  364,  363,  362,  361,  360,  359,  358,  357,  353,
-      352,  351,  350,  349,  348,  347,  346,  342,  341,  340,
-      339,  338,  335,  334,  333,  332,  331,  330,  329,  328,
-      327,  326,  325,  324,  323,  322,  321,  320,  317,  316,
-      315,  314,  313,  312,  311,  310,  309,  308,  307,  303,
-      302,  301,  300,  299,  298,  297,  296,  295,  294,  293,
-      292,  291,  290,  289,  288,  287,  286,  285,  284,  283,
-      282,  281,  280,  279,  278,  277,  276,  275,  272,  271,
-      270,  269,  266,  265,  264,  263,  262,  261,  255,  254,
-      251,  250,  249,  242,  241,  240,  239,  238,  233,  232,
-
-      231,  230,  226,  225,  221,  218,  217,  216,  213,  212,
-      211,  205,  204,  203,  202,  201,  200,  199,  198,  193,
-      192,  191,  190,  189,  188,  187,  186,  182,  181,  180,
-      179,  178,  177,  174,  173,  172,  171,  161,  138,  134,
-      118,   90,   85,   69,   64,  825,    7,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825
+       74,   74,  101,   95,   75,  792,  102,   73,   71,   76,
+      129,   68,  103,   85,  130,  104,   93,   96,   97,  793,
+       77,   78,  158,   79,   79,   79,   79,   79,   79,   80,
+       86,  118,   87,   88,   94,   98,  794,   99,  156,  119,
+
+       81,  100,  109,  127,  110,  105,  157,   82,   83,  106,
+      120,  112,  195,  111,  107,  795,  128,   81,  215,  113,
+      108,  114,  121,  196,  115,  122,  216,  159,  123,  124,
+      116,   82,  131,  125,   83,   78,  126,   80,   80,   80,
+       80,   80,   80,   80,  134,  132,  796,  145,  176,  138,
+      146,  253,  177,  254,   81,  246,  139,  140,  147,  135,
+      141,   82,  136,  247,  149,  148,  142,  143,  150,  144,
+      153,   81,  151,  228,  154,  152,  162,  163,  166,  167,
+      168,  827,  184,  155,  197,   82,  185,  186,  237,  229,
+      230,  235,  220,  162,  163,  166,  167,  198,  221,  244,
+
+      245,  238,  797,  169,  168,  169,  236,  827,  170,  170,
+      170,  170,  170,  170,  170,  207,  223,  248,  208,  209,
+      275,  276,  210,  798,  211,  249,  166,  167,  257,  224,
+      257,  225,  799,  258,  258,  258,  258,  258,  258,  258,
+      259,  800,  259,  166,  167,  260,  260,  260,  260,  260,
+      260,  260,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  262,  269,  306,  307,
+      308,  320,  801,  338,  802,  321,  803,  261,  554,  556,
+      270,  339,  345,  346,  347,  356,  357,  358,  555,  557,
+      262,  368,  369,  370,  261,  258,  258,  258,  258,  258,
+
+      258,  258,  258,  258,  258,  258,  258,  258,  258,  260,
+      260,  260,  260,  260,  260,  260,  376,  377,  378,  804,
+      163,  260,  260,  260,  260,  260,  260,  260,  380,  381,
+      382,  391,  392,  393,  429,  430,  431,  163,  805,  167,
+      449,  450,  451,  459,  460,  461,  462,  463,  464,  465,
+      466,  467,  806,  452,  453,  807,  167,  506,  507,  508,
+      532,  533,  534,  571,  572,  573,  808,  602,  603,  604,
+      509,  510,  809,  535,  536,  644,  574,  575,  810,  576,
+      605,  606,  622,  623,  624,  645,  811,  812,  813,  814,
+      646,  815,  816,  817,  674,  625,  626,  647,  694,  648,
+
+      649,  675,  818,  676,  819,  695,  820,  696,  821,  822,
+      823,  824,  825,  826,   58,   58,   58,   58,   58,   92,
+       92,   92,  161,  161,  161,   74,  164,  165,  164,  164,
+      164,  171,  171,  791,  790,  789,  788,  787,  786,  785,
+      784,  783,  782,  781,  780,  779,  778,  777,  776,  775,
+      774,  773,  772,  771,  770,  769,  768,  767,  766,  765,
+      764,  763,  762,  761,  760,  759,  758,  757,  756,  755,
+      754,  753,  752,  751,  750,  749,  748,  747,  746,  745,
+      744,  743,  742,  741,  740,  739,  738,  737,  736,  735,
+      734,  733,  732,  731,  730,  729,  728,  727,  726,  725,
+
+      724,  723,  722,  721,  720,  719,  718,  717,  716,  715,
+      714,  713,  712,  711,  710,  709,  708,  707,  706,  705,
+      704,  703,  702,  701,  700,  699,  698,  697,  693,  692,
+      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
+      681,  680,  679,  678,  677,  673,  672,  671,  670,  669,
+      668,  667,  666,  665,  664,  663,  662,  661,  660,  659,
+      658,  657,  656,  655,  654,  653,  652,  651,  650,  643,
+      642,  641,  640,  639,  638,  637,  636,  635,  634,  633,
+      632,  631,  630,  629,  628,  627,  621,  620,  619,  618,
+      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
+
+      607,  601,  600,  599,  598,  597,  596,  595,  594,  593,
+      592,  591,  590,  589,  588,  587,  586,  585,  584,  583,
+      582,  581,  580,  579,  578,  577,  570,  569,  568,  567,
+      566,  565,  564,  563,  562,  561,  560,  559,  558,  553,
+      552,  551,  550,  549,  548,  547,  546,  545,  544,  543,
+      542,  541,  540,  539,  538,  537,  531,  530,  529,  528,
+      527,  526,  525,  524,  523,  522,  521,  520,  519,  518,
+      517,  516,  515,  514,  513,  512,  511,  505,  504,  503,
+      502,  501,  500,  499,  498,  497,  496,  495,  494,  493,
+      492,  491,  490,  489,  488,  487,  486,  485,  484,  483,
+
+      482,  481,  480,  479,  478,  477,  476,  475,  474,  473,
+      472,  471,  470,  469,  468,  458,  457,  456,  455,  454,
+      448,  447,  446,  445,  444,  443,  442,  441,  440,  439,
+      438,  437,  436,  435,  434,  433,  432,  428,  427,  426,
+      425,  424,  423,  422,  421,  420,  419,  418,  417,  416,
+      415,  414,  413,  412,  411,  410,  409,  408,  407,  406,
+      405,  404,  403,  402,  401,  400,  399,  398,  397,  396,
+      395,  394,  390,  389,  388,  387,  386,  385,  384,  383,
+      379,  375,  374,  373,  372,  371,  367,  366,  365,  364,
+      363,  362,  361,  360,  359,  355,  354,  353,  352,  351,
+
+      350,  349,  348,  344,  343,  342,  341,  340,  337,  336,
+      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
+      325,  324,  323,  322,  319,  318,  317,  316,  315,  314,
+      313,  312,  311,  310,  309,  305,  304,  303,  302,  301,
+      300,  299,  298,  297,  296,  295,  294,  293,  292,  291,
+      290,  289,  288,  287,  286,  285,  284,  283,  282,  281,
+      280,  279,  278,  277,  274,  273,  272,  271,  268,  267,
+      266,  265,  264,  263,  256,  255,  252,  251,  250,  243,
+      242,  241,  240,  239,  234,  233,  232,  231,  227,  226,
+      222,  219,  218,  217,  214,  213,  212,  206,  205,  204,
+
+      203,  202,  201,  200,  199,  194,  193,  192,  191,  190,
+      189,  188,  187,  183,  182,  181,  180,  179,  178,  175,
+      174,  173,  172,  160,  137,  133,  117,   89,   84,   69,
+       64,  827,    7,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827
     } ;
 
-static yyconst flex_int16_t yy_chk[1120] =
+static yyconst flex_int16_t yy_chk[1106] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -876,116 +877,115 @@ static yyconst flex_int16_t yy_chk[1120] =
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,   13,   17,   19,   20,   20,   20,   20,   20,
-       20,   20,   36,   34,   21,  772,   36,   19,   17,   21,
-       44,   13,   36,   26,   44,   36,   33,   34,   34,  773,
+       20,   20,   36,   34,   21,  774,   36,   19,   17,   21,
+       44,   13,   36,   26,   44,   36,   33,   34,   34,  775,
        21,   22,   55,   22,   22,   22,   22,   22,   22,   22,
-       26,   41,   26,   26,   33,   35,  774,   35,   53,   41,
+       26,   41,   26,   26,   33,   35,  776,   35,   53,   41,
 
        22,   35,   38,   43,   38,   37,   53,   22,   22,   37,
-       41,   39,  114,   38,   37,  775,   43,   22,  129,   39,
-       37,   39,   42,  114,   39,   42,  129,   55,   42,   42,
+       41,   39,  113,   38,   37,  777,   43,   22,  128,   39,
+       37,   39,   42,  113,   39,   42,  128,   55,   42,   42,
        39,   22,   45,   42,   22,   23,   42,   23,   23,   23,
-       23,   23,   23,   23,   47,   45,  776,   50,   98,   49,
-       50,  156,   98,  156,   23,  151,   49,   49,   50,   47,
-       49,   23,   47,  151,   51,   50,   49,   49,   51,   49,
-       52,   23,   51,  779,   52,   51,   74,   74,   74,   74,
-       74,   74,   74,   52,  115,   23,   78,   78,   78,   78,
-       78,   78,   78,   74,   79,   79,  105,  115,  133,  152,
-
-      105,  105,  780,   78,  133,  228,   81,  152,   81,  228,
-       74,   81,   81,   81,   81,   81,   81,   81,   79,  783,
-       78,   79,   80,  784,   80,   80,   80,   80,   80,   80,
-       80,  125,  135,  138,  125,  125,  143,  786,  125,  144,
-      125,   80,  150,  150,  170,  135,  787,  135,   80,  138,
-      138,  143,  144,  180,  163,  788,  163,  509,   80,  163,
-      163,  163,  163,  163,  163,  163,  180,  509,  170,  185,
-      185,  790,   80,  165,  165,  165,  165,  165,  165,  165,
-      216,  216,  216,  251,  251,  251,  166,  791,  166,  794,
-      165,  166,  166,  166,  166,  166,  166,  166,  168,  168,
-
-      168,  168,  168,  168,  168,  795,  796,  165,  169,  169,
-      169,  169,  169,  169,  169,  245,  256,  256,  256,  256,
-      256,  256,  256,  245,  257,  257,  257,  257,  257,  257,
-      257,  258,  258,  258,  258,  258,  258,  258,  259,  259,
-      259,  259,  259,  259,  259,  266,  266,  266,  278,  278,
-      278,  287,  287,  287,  291,  291,  291,  300,  300,  300,
-      341,  341,  341,  382,  382,  382,  393,  393,  393,  394,
-      394,  394,  395,  395,  395,  510,  382,  382,  446,  446,
-      446,  489,  489,  489,  797,  510,  526,  526,  526,  798,
-      799,  446,  446,  801,  489,  489,  560,  560,  560,  526,
-
-      526,  609,  526,  583,  583,  583,  637,  802,  803,  560,
-      560,  609,  610,  637,  804,  637,  583,  583,  658,  610,
-      805,  610,  610,  806,  808,  658,  809,  658,  810,  812,
-      816,  817,  818,  820,  821,  826,  826,  826,  826,  827,
-      827,  828,  828,  829,  830,  829,  829,  771,  770,  769,
-      768,  767,  766,  763,  762,  761,  760,  759,  758,  757,
-      756,  755,  754,  751,  750,  747,  746,  745,  744,  743,
-      742,  740,  739,  738,  737,  736,  734,  732,  728,  727,
-      726,  725,  724,  722,  721,  720,  719,  718,  717,  716,
-      715,  714,  713,  712,  711,  710,  708,  707,  706,  705,
-
-      704,  703,  702,  701,  700,  698,  697,  696,  695,  694,
-      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
-      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
-      673,  672,  671,  669,  668,  667,  666,  665,  664,  663,
-      661,  660,  657,  655,  654,  653,  651,  650,  649,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  636,
-      635,  634,  633,  632,  631,  629,  628,  627,  626,  624,
-      623,  622,  621,  620,  619,  618,  617,  616,  615,  614,
-      613,  612,  611,  606,  604,  603,  602,  601,  600,  596,
-      595,  594,  593,  592,  591,  590,  589,  588,  586,  585,
-
-      581,  580,  578,  577,  575,  574,  573,  572,  571,  570,
-      569,  565,  564,  563,  561,  559,  558,  557,  556,  555,
-      554,  553,  552,  551,  550,  548,  547,  542,  541,  540,
-      539,  537,  536,  534,  533,  532,  531,  530,  528,  527,
-      525,  524,  523,  522,  521,  520,  519,  518,  516,  515,
-      514,  513,  512,  508,  507,  506,  505,  504,  503,  500,
-      499,  498,  497,  496,  495,  494,  493,  492,  491,  490,
-      488,  487,  484,  479,  477,  476,  475,  473,  472,  469,
-      468,  467,  466,  455,  454,  453,  451,  450,  449,  448,
-      447,  444,  442,  441,  440,  438,  437,  436,  435,  433,
-
-      431,  430,  425,  424,  422,  421,  420,  419,  418,  417,
-      416,  415,  414,  413,  412,  410,  409,  408,  407,  406,
-      405,  404,  402,  401,  400,  399,  398,  397,  396,  392,
-      388,  387,  386,  383,  381,  371,  369,  365,  364,  363,
-      362,  360,  359,  357,  352,  351,  350,  349,  348,  347,
-      342,  340,  339,  338,  337,  336,  334,  333,  330,  329,
-      328,  327,  326,  325,  324,  323,  322,  321,  320,  319,
-      318,  317,  316,  315,  314,  313,  312,  311,  310,  309,
-      308,  307,  306,  305,  304,  301,  299,  298,  297,  296,
-      295,  294,  293,  292,  290,  286,  284,  283,  282,  281,
-
-      277,  276,  275,  274,  273,  272,  271,  270,  269,  265,
-      263,  262,  261,  255,  254,  253,  252,  250,  249,  248,
-      247,  246,  244,  243,  242,  241,  240,  239,  238,  237,
-      236,  235,  234,  233,  232,  231,  230,  229,  227,  226,
-      225,  224,  223,  222,  221,  220,  219,  218,  217,  215,
-      214,  213,  212,  211,  210,  209,  208,  207,  206,  205,
-      204,  203,  202,  201,  200,  199,  197,  196,  195,  194,
-      193,  192,  191,  190,  189,  188,  187,  186,  184,  183,
-      182,  181,  179,  178,  177,  176,  175,  173,  158,  157,
-      155,  154,  153,  149,  148,  147,  146,  145,  142,  141,
-
-      140,  139,  137,  136,  134,  132,  131,  130,  128,  127,
-      126,  124,  123,  121,  120,  119,  118,  117,  116,  113,
-      112,  111,  110,  109,  108,  107,  106,  104,  103,  102,
-      101,  100,   99,   97,   96,   92,   88,   60,   48,   46,
-       40,   27,   24,   16,   11,    7,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-
-      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
-      825,  825,  825,  825,  825,  825,  825,  825,  825
+       23,   23,   23,   23,   47,   45,  778,   50,   97,   49,
+       50,  155,   97,  155,   23,  150,   49,   49,   50,   47,
+       49,   23,   47,  150,   51,   50,   49,   49,   51,   49,
+       52,   23,   51,  137,   52,   51,   74,   74,   78,   78,
+       79,   79,  104,   52,  114,   23,  104,  104,  143,  137,
+      137,  142,  132,   74,   74,   78,   78,  114,  132,  149,
+
+      149,  143,  781,   81,   79,   81,  142,   79,   81,   81,
+       81,   81,   81,   81,   81,  124,  134,  151,  124,  124,
+      186,  186,  124,  782,  124,  151,  165,  165,  162,  134,
+      162,  134,  785,  162,  162,  162,  162,  162,  162,  162,
+      166,  786,  166,  165,  165,  166,  166,  166,  166,  166,
+      166,  166,  169,  169,  169,  169,  169,  169,  169,  170,
+      170,  170,  170,  170,  170,  170,  171,  181,  217,  217,
+      217,  229,  788,  246,  789,  229,  790,  170,  511,  512,
+      181,  246,  252,  252,  252,  268,  268,  268,  511,  512,
+      171,  280,  280,  280,  170,  257,  257,  257,  257,  257,
+
+      257,  257,  258,  258,  258,  258,  258,  258,  258,  259,
+      259,  259,  259,  259,  259,  259,  289,  289,  289,  792,
+      258,  260,  260,  260,  260,  260,  260,  260,  293,  293,
+      293,  302,  302,  302,  343,  343,  343,  258,  793,  260,
+      384,  384,  384,  395,  395,  395,  396,  396,  396,  397,
+      397,  397,  796,  384,  384,  797,  260,  448,  448,  448,
+      491,  491,  491,  528,  528,  528,  798,  562,  562,  562,
+      448,  448,  799,  491,  491,  611,  528,  528,  800,  528,
+      562,  562,  585,  585,  585,  611,  801,  803,  804,  805,
+      612,  806,  807,  808,  639,  585,  585,  612,  660,  612,
+
+      612,  639,  810,  639,  811,  660,  812,  660,  814,  818,
+      819,  820,  822,  823,  828,  828,  828,  828,  828,  829,
+      829,  829,  830,  830,  830,  831,  832,  833,  832,  832,
+      832,  834,  834,  773,  772,  771,  770,  769,  768,  765,
+      764,  763,  762,  761,  760,  759,  758,  757,  756,  753,
+      752,  749,  748,  747,  746,  745,  744,  742,  741,  740,
+      739,  738,  736,  734,  730,  729,  728,  727,  726,  724,
+      723,  722,  721,  720,  719,  718,  717,  716,  715,  714,
+      713,  712,  710,  709,  708,  707,  706,  705,  704,  703,
+      702,  700,  699,  698,  697,  696,  695,  694,  693,  692,
+
+      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
+      681,  680,  679,  678,  677,  676,  675,  674,  673,  671,
+      670,  669,  668,  667,  666,  665,  663,  662,  659,  657,
+      656,  655,  653,  652,  651,  650,  649,  648,  647,  646,
+      645,  644,  643,  642,  641,  638,  637,  636,  635,  634,
+      633,  631,  630,  629,  628,  626,  625,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  614,  613,  608,
+      606,  605,  604,  603,  602,  598,  597,  596,  595,  594,
+      593,  592,  591,  590,  588,  587,  583,  582,  580,  579,
+      577,  576,  575,  574,  573,  572,  571,  567,  566,  565,
+
+      563,  561,  560,  559,  558,  557,  556,  555,  554,  553,
+      552,  550,  549,  544,  543,  542,  541,  539,  538,  536,
+      535,  534,  533,  532,  530,  529,  527,  526,  525,  524,
+      523,  522,  521,  520,  518,  517,  516,  515,  514,  510,
+      509,  508,  507,  506,  505,  502,  501,  500,  499,  498,
+      497,  496,  495,  494,  493,  492,  490,  489,  486,  481,
+      479,  478,  477,  475,  474,  471,  470,  469,  468,  457,
+      456,  455,  453,  452,  451,  450,  449,  446,  444,  443,
+      442,  440,  439,  438,  437,  435,  433,  432,  427,  426,
+      424,  423,  422,  421,  420,  419,  418,  417,  416,  415,
+
+      414,  412,  411,  410,  409,  408,  407,  406,  404,  403,
+      402,  401,  400,  399,  398,  394,  390,  389,  388,  385,
+      383,  373,  371,  367,  366,  365,  364,  362,  361,  359,
+      354,  353,  352,  351,  350,  349,  344,  342,  341,  340,
+      339,  338,  336,  335,  332,  331,  330,  329,  328,  327,
+      326,  325,  324,  323,  322,  321,  320,  319,  318,  317,
+      316,  315,  314,  313,  312,  311,  310,  309,  308,  307,
+      306,  303,  301,  300,  299,  298,  297,  296,  295,  294,
+      292,  288,  286,  285,  284,  283,  279,  278,  277,  276,
+      275,  274,  273,  272,  271,  267,  265,  264,  263,  256,
+
+      255,  254,  253,  251,  250,  249,  248,  247,  245,  244,
+      243,  242,  241,  240,  239,  238,  237,  236,  235,  234,
+      233,  232,  231,  230,  228,  227,  226,  225,  224,  223,
+      222,  221,  220,  219,  218,  216,  215,  214,  213,  212,
+      211,  210,  209,  208,  207,  206,  205,  204,  203,  202,
+      201,  200,  198,  197,  196,  195,  194,  193,  192,  191,
+      190,  189,  188,  187,  185,  184,  183,  182,  180,  179,
+      178,  177,  176,  174,  157,  156,  154,  153,  152,  148,
+      147,  146,  145,  144,  141,  140,  139,  138,  136,  135,
+      133,  131,  130,  129,  127,  126,  125,  123,  122,  120,
+
+      119,  118,  117,  116,  115,  112,  111,  110,  109,  108,
+      107,  106,  105,  103,  102,  101,  100,   99,   98,   96,
+       95,   91,   87,   60,   48,   46,   40,   27,   24,   16,
+       11,    7,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+      827,  827,  827,  827,  827,  827,  827,  827,  827,  827,
+
+      827,  827,  827,  827,  827
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[243] =
+static yyconst flex_int32_t yy_rule_can_match_eol[245] =
     {   0,
 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -999,7 +999,7 @@ static yyconst flex_int32_t yy_rule_can_match_eol[243] =
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    1, 0, 0,     };
+    0, 0, 1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1045,6 +1045,9 @@ static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
 static int ES2_identifier_ES3_keyword(TParseContext *context, int token);
 static int uint_constant(TParseContext *context);
+static int int_constant(yyscan_t yyscanner);
+static int float_constant(yyscan_t yyscanner);
+static int floatsuffix_check(TParseContext* context);
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1335,13 +1338,13 @@ yy_match:
                        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 >= 826 )
+                               if ( yy_current_state >= 828 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 825 );
+               while ( yy_current_state != 827 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1834,19 +1837,19 @@ YY_RULE_SETUP
        YY_BREAK
 case 183:
 YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+{ return int_constant(yyscanner); }
        YY_BREAK
 case 184:
 YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+{ return int_constant(yyscanner); }
        YY_BREAK
 case 185:
 YY_RULE_SETUP
-{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
+{ return int_constant(yyscanner); }
        YY_BREAK
 case 186:
 YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+{ return uint_constant(context); }
        YY_BREAK
 case 187:
 YY_RULE_SETUP
@@ -1858,214 +1861,222 @@ YY_RULE_SETUP
        YY_BREAK
 case 189:
 YY_RULE_SETUP
-{ return uint_constant(context); }
+{ return float_constant(yyscanner); }
        YY_BREAK
 case 190:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return float_constant(yyscanner); }
        YY_BREAK
 case 191:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return float_constant(yyscanner); }
        YY_BREAK
 case 192:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ return floatsuffix_check(context); }
        YY_BREAK
 case 193:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ return floatsuffix_check(context); }
        YY_BREAK
 case 194:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{ return floatsuffix_check(context); }
        YY_BREAK
 case 195:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{  return(ADD_ASSIGN); }
        YY_BREAK
 case 196:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(SUB_ASSIGN); }
        YY_BREAK
 case 197:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(MUL_ASSIGN); }
        YY_BREAK
 case 198:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(DIV_ASSIGN); }
        YY_BREAK
 case 199:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(MOD_ASSIGN); }
        YY_BREAK
 case 200:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(LEFT_ASSIGN); }
        YY_BREAK
 case 201:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
        YY_BREAK
 case 202:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(AND_ASSIGN); }
        YY_BREAK
 case 203:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(XOR_ASSIGN); }
        YY_BREAK
 case 204:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(OR_ASSIGN); }
        YY_BREAK
 case 205:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(INC_OP); }
        YY_BREAK
 case 206:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(DEC_OP); }
        YY_BREAK
 case 207:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(AND_OP); }
        YY_BREAK
 case 208:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(OR_OP); }
        YY_BREAK
 case 209:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(XOR_OP); }
        YY_BREAK
 case 210:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(LE_OP); }
        YY_BREAK
 case 211:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(GE_OP); }
        YY_BREAK
 case 212:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(EQ_OP); }
        YY_BREAK
 case 213:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(NE_OP); }
        YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(LEFT_OP); }
        YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{  return(RIGHT_OP); }
        YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{ context->lexAfterType = false; return(SEMICOLON); }
        YY_BREAK
 case 217:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
        YY_BREAK
 case 218:
 YY_RULE_SETUP
-{ return(COLON); }
+{ return(RIGHT_BRACE); }
        YY_BREAK
 case 219:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
        YY_BREAK
 case 220:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ return(COLON); }
        YY_BREAK
 case 221:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ context->lexAfterType = false; return(EQUAL); }
        YY_BREAK
 case 222:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
        YY_BREAK
 case 223:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
        YY_BREAK
 case 224:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ return(LEFT_BRACKET); }
        YY_BREAK
 case 225:
 YY_RULE_SETUP
-{ return(BANG); }
+{ return(RIGHT_BRACKET); }
        YY_BREAK
 case 226:
 YY_RULE_SETUP
-{ return(DASH); }
+{ BEGIN(FIELDS);  return(DOT); }
        YY_BREAK
 case 227:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ return(BANG); }
        YY_BREAK
 case 228:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(DASH); }
        YY_BREAK
 case 229:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(TILDE); }
        YY_BREAK
 case 230:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(PLUS); }
        YY_BREAK
 case 231:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(STAR); }
        YY_BREAK
 case 232:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(SLASH); }
        YY_BREAK
 case 233:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(PERCENT); }
        YY_BREAK
 case 234:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(LEFT_ANGLE); }
        YY_BREAK
 case 235:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(RIGHT_ANGLE); }
        YY_BREAK
 case 236:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(VERTICAL_BAR); }
        YY_BREAK
 case 237:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(CARET); }
        YY_BREAK
 case 238:
 YY_RULE_SETUP
+{ return(AMPERSAND); }
+       YY_BREAK
+case 239:
+YY_RULE_SETUP
+{ return(QUESTION); }
+       YY_BREAK
+case 240:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
        YY_BREAK
-case 239:
+case 241:
 YY_RULE_SETUP
 {}
        YY_BREAK
-case 240:
-/* rule 240 can match eol */
+case 242:
+/* rule 242 can match eol */
 YY_RULE_SETUP
 {  }
        YY_BREAK
@@ -2074,11 +2085,11 @@ case YY_STATE_EOF(COMMENT):
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
        YY_BREAK
-case 241:
+case 243:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
        YY_BREAK
-case 242:
+case 244:
 YY_RULE_SETUP
 ECHO;
        YY_BREAK
@@ -2374,7 +2385,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                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 >= 826 )
+                       if ( yy_current_state >= 828 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2403,11 +2414,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        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 >= 826 )
+               if ( yy_current_state >= 828 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 825);
+       yy_is_jam = (yy_current_state == 827);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3345,10 +3356,45 @@ int uint_constant(TParseContext *context)
         return 0;
     }
 
-    yylval->lex.u = static_cast<unsigned int>(strtol(yytext, 0, 0));
+    if (!atoi_clamp(yytext, &(yylval->lex.i)))
+        yyextra->warning(yylineno, "Integer overflow", yytext, "");
+
     return UINTCONSTANT;
 }
 
+int floatsuffix_check(TParseContext* context)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
+
+    if (context->shaderVersion < 300)
+    {
+        context->error(yylineno, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext);
+        context->recover();
+        return 0;
+    }
+
+    if (!atof_clamp(yytext, &(yylval->lex.f)))
+        yyextra->warning(yylineno, "Float overflow", yytext, "");
+
+    return(FLOATCONSTANT);
+}
+
+int int_constant(yyscan_t yyscanner) {
+    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
+
+    if (!atoi_clamp(yytext, &(yylval->lex.i)))
+        yyextra->warning(yylineno, "Integer overflow", yytext, "");
+    return INTCONSTANT;
+}
+
+int float_constant(yyscan_t yyscanner) {
+    struct yyguts_t* yyg = (struct yyguts_t*) yyscanner;
+
+    if (!atof_clamp(yytext, &(yylval->lex.f)))
+        yyextra->warning(yylineno, "Float overflow", yytext, "");
+    return FLOATCONSTANT;
+}
+
 void yyerror(TParseContext* context, const char* reason) {
     struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
 
index 934ca50..e3d0226 100644 (file)
@@ -376,7 +376,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[90] =
+static yyconst flex_int16_t yy_accept[98] =
     {   0,
         0,    0,    0,    0,   39,   37,   34,   35,   35,   33,
         7,   33,   33,   33,   33,   33,   33,   33,   33,    9,
@@ -385,8 +385,10 @@ static yyconst flex_int16_t yy_accept[90] =
        23,   13,   24,   10,    2,    1,   26,   10,    9,   11,
        11,   11,    9,   11,    9,    9,   14,   16,   18,   17,
        15,    8,   36,   36,   31,   21,   32,   22,    3,    5,
-        6,   11,   10,   11,    1,   10,   11,    0,   10,    9,
-       28,   29,    0,   10,   10,   10,    9,   10,    0
+        6,   11,   10,   11,   10,    1,   10,   11,   10,    0,
+       10,    9,    9,    9,   28,   29,    0,   10,   10,   10,
+       10,    9,   10,   10,    9,   10,    0
+
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -397,14 +399,14 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    2,    5,    1,    6,    1,    7,    8,    1,    9,
         9,   10,   11,    9,   12,   13,   14,   15,   16,   16,
        16,   16,   16,   16,   16,   17,   17,    9,    9,   18,
-       19,   20,    9,    1,   21,   21,   21,   21,   22,   21,
-       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   24,   23,   23,   25,   23,   23,
-        9,   26,    9,   27,   23,    1,   21,   21,   21,   21,
-
-       22,   21,   23,   23,   23,   23,   23,   23,   23,   23,
-       23,   23,   23,   23,   23,   23,   24,   23,   23,   25,
-       23,   23,    9,   28,    9,    9,    1,    1,    1,    1,
+       19,   20,    9,    1,   21,   21,   21,   21,   22,   23,
+       24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
+       24,   24,   24,   24,   25,   24,   24,   26,   24,   24,
+        9,   27,    9,   28,   24,    1,   21,   21,   21,   21,
+
+       22,   23,   24,   24,   24,   24,   24,   24,   24,   24,
+       24,   24,   24,   24,   24,   24,   25,   24,   24,   26,
+       24,   24,    9,   29,    9,    9,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -421,95 +423,101 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[29] =
+static yyconst flex_int32_t yy_meta[30] =
     {   0,
         1,    1,    2,    2,    1,    1,    1,    1,    1,    3,
-        1,    1,    1,    1,    4,    4,    4,    1,    1,    1,
-        4,    4,    4,    4,    4,    1,    1,    1
+        1,    1,    4,    1,    5,    5,    5,    1,    1,    1,
+        5,    5,    5,    5,    5,    5,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[94] =
+static yyconst flex_int16_t yy_base[103] =
     {   0,
-        0,    0,   26,   28,  167,  173,  164,  173,  129,  107,
-      173,  102,   25,  173,   97,   23,   27,   32,   31,   38,
-       51,   38,   88,   50,    0,   74,   16,   52,    0,  173,
-       98,   81,   80,  173,  173,  173,  173,  173,  173,  173,
-      173,  173,  173,   68,  173,    0,  173,   81,   54,   84,
-       95,  107,    0,  112,    0,    0,   46,  173,  173,  173,
-       39,    0,  173,   49,  173,  173,  173,  173,    0,  173,
-      173,   98,    0,  127,    0,    0,  134,   71,  119,   16,
-      173,  173,  137,  129,  136,  140,    0,  143,  173,  160,
-       33,  164,  168
-
+        0,    0,   27,   29,  137,  194,  133,  194,  117,  100,
+      194,   98,   26,  194,   94,   24,   28,   33,   32,   39,
+       51,   39,   80,   50,    0,   68,   25,   54,    0,  194,
+       88,   71,   80,  194,  194,  194,  194,  194,  194,  194,
+      194,  194,  194,   71,  194,    0,  194,   85,   55,   64,
+       99,  111,   53,  105,    0,   50,   55,  194,  194,  194,
+       40,    0,  194,   38,  194,  194,  194,  194,    0,  194,
+      194,  117,    0,  130,    0,    0,    0,  137,    0,   88,
+      113,    0,  131,    0,  194,  194,  143,  139,  152,  150,
+        0,   13,  153,  194,    0,  194,  194,  176,   31,  181,
+
+      186,  188
     } ;
 
-static yyconst flex_int16_t yy_def[94] =
+static yyconst flex_int16_t yy_def[103] =
     {   0,
-       89,    1,   90,   90,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   91,   89,   89,   89,   92,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   93,   89,   89,   20,   20,
-       48,   51,   51,   89,   21,   51,   89,   89,   89,   89,
-       89,   91,   89,   89,   89,   89,   89,   89,   92,   89,
-       89,   44,   44,   72,   93,   48,   51,   89,   52,   54,
-       89,   89,   89,   74,   77,   89,   51,   89,    0,   89,
-       89,   89,   89
-
+       97,    1,   98,   98,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       20,   97,   97,   97,   99,   97,   97,   97,  100,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,  101,   97,   97,   20,   20,
+       50,   51,   51,  102,   21,   51,   97,   97,   97,   97,
+       97,   99,   97,   97,   97,   97,   97,   97,  100,   97,
+       97,   44,   44,   72,   72,  101,   48,   51,   51,   97,
+       52,   51,  102,   51,   97,   97,   97,   74,   78,   97,
+       51,   51,   97,   97,   51,   97,    0,   97,   97,   97,
+
+       97,   97
     } ;
 
-static yyconst flex_int16_t yy_nxt[202] =
+static yyconst flex_int16_t yy_nxt[224] =
     {   0,
         6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
        16,   17,   18,   19,   20,   21,   21,   22,   23,   24,
-       25,   25,   25,   25,   25,   26,   27,   28,   30,   31,
-       30,   31,   37,   40,   65,   32,   62,   32,   42,   87,
-       45,   41,   66,   38,   46,   43,   44,   44,   44,   47,
-       48,   63,   49,   49,   50,   57,   58,   82,   51,   52,
-       51,   53,   54,   48,   81,   55,   55,   55,   60,   61,
-       67,   51,   52,   51,   56,   51,   63,   64,   51,   68,
-       72,   33,   73,   73,   73,   86,   86,   86,   72,   74,
-       72,   72,   72,   51,   71,   76,   76,   76,   50,   50,
-
-       70,   51,   77,   51,   51,   51,   59,   51,   51,   51,
-       51,   51,   72,   72,   72,   39,   51,   78,   78,   72,
-       36,   79,   79,   79,   51,   35,   80,   80,   80,   89,
-       89,   34,   80,   80,   51,   51,   51,   83,   83,   89,
-       89,   84,   84,   84,   83,   83,   89,   89,   85,   85,
-       85,   88,   88,   88,   86,   86,   86,   88,   88,   88,
-       29,   29,   29,   29,   69,   33,   89,   69,   75,   89,
-       75,   75,    5,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-
-       89
+       25,   25,   25,   25,   25,   25,   26,   27,   28,   30,
+       31,   30,   31,   37,   40,   62,   32,   95,   32,   42,
+       63,   45,   41,   65,   38,   46,   43,   44,   44,   44,
+       47,   48,   66,   49,   49,   50,   57,   58,   86,   51,
+       52,   51,   51,   53,   54,   55,   55,   55,   60,   61,
+       63,   64,   67,   85,   84,   56,   51,   82,   50,   50,
+       51,   33,   68,   72,   71,   73,   73,   73,   51,   51,
+       70,   72,   74,   75,   72,   72,   72,   51,   59,   77,
+
+       77,   77,   90,   90,   90,   51,   78,   79,   51,   51,
+       51,   51,   39,   51,   51,   51,   36,   51,   35,   34,
+       51,   80,   80,   97,   97,   81,   81,   81,   51,   51,
+       51,   72,   72,   72,   33,   91,   97,   97,   72,   72,
+       87,   87,   97,   51,   88,   88,   88,   87,   87,   97,
+       97,   89,   89,   89,   51,   92,   51,   93,   93,   93,
+       97,   75,   97,   97,   90,   90,   90,   93,   93,   93,
+       97,   97,   94,   97,   79,   96,   29,   29,   29,   29,
+       29,   69,   97,   97,   69,   69,   76,   97,   76,   76,
+       76,   83,   83,    5,   97,   97,   97,   97,   97,   97,
+
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97
     } ;
 
-static yyconst flex_int16_t yy_chk[202] =
+static yyconst flex_int16_t yy_chk[224] =
     {   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,    3,    3,
-        4,    4,   13,   16,   27,    3,   91,    4,   17,   80,
-       19,   16,   27,   13,   19,   17,   18,   18,   18,   19,
-       20,   64,   20,   20,   20,   22,   22,   61,   20,   20,
-       20,   20,   20,   21,   57,   21,   21,   21,   24,   24,
-       28,   21,   21,   21,   21,   21,   26,   26,   49,   28,
-       44,   33,   44,   44,   44,   78,   78,   78,   44,   44,
-       44,   44,   44,   48,   32,   48,   48,   48,   50,   50,
-
-       31,   48,   48,   48,   48,   48,   23,   50,   50,   51,
-       51,   51,   72,   72,   72,   15,   51,   52,   52,   72,
-       12,   52,   52,   52,   54,   10,   54,   54,   54,   79,
-       79,    9,   54,   54,   54,   54,   54,   74,   74,   84,
-       84,   74,   74,   74,   77,   77,   85,   85,   77,   77,
-       77,   83,   83,   83,   86,   86,   86,   88,   88,   88,
-       90,   90,   90,   90,   92,    7,    5,   92,   93,    0,
-       93,   93,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-
-       89
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
+        3,    4,    4,   13,   16,   99,    3,   92,    4,   17,
+       64,   19,   16,   27,   13,   19,   17,   18,   18,   18,
+       19,   20,   27,   20,   20,   20,   22,   22,   61,   20,
+       20,   20,   20,   20,   20,   21,   21,   21,   24,   24,
+       26,   26,   28,   57,   56,   21,   21,   53,   50,   50,
+       49,   33,   28,   44,   32,   44,   44,   44,   50,   50,
+       31,   44,   44,   44,   44,   44,   44,   48,   23,   48,
+
+       48,   48,   80,   80,   80,   48,   48,   48,   48,   48,
+       48,   51,   15,   51,   51,   51,   12,   54,   10,    9,
+       51,   52,   52,   81,   81,   52,   52,   52,   54,   54,
+       54,   72,   72,   72,    7,   81,    5,    0,   72,   72,
+       74,   74,    0,   83,   74,   74,   74,   78,   78,   88,
+       88,   78,   78,   78,   83,   83,   83,   87,   87,   87,
+        0,   88,   89,   89,   90,   90,   90,   93,   93,   93,
+        0,    0,   90,    0,   89,   93,   98,   98,   98,   98,
+       98,  100,    0,    0,  100,  100,  101,    0,  101,  101,
+      101,  102,  102,   97,   97,   97,   97,   97,   97,   97,
+
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -866,13 +874,13 @@ yy_match:
                        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 >= 90 )
+                               if ( yy_current_state >= 98 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 89 );
+               while ( yy_current_state != 97 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1464,7 +1472,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                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 >= 90 )
+                       if ( yy_current_state >= 98 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1493,11 +1501,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        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 >= 90 )
+               if ( yy_current_state >= 98 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 89);
+       yy_is_jam = (yy_current_state == 97);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
index c54b222..5e5f26d 100644 (file)
@@ -114,12 +114,12 @@ FRACTIONAL_CONSTANT  ({DIGIT}*"."{DIGIT}+)|({DIGIT}+".")
     return pp::Token::IDENTIFIER;
 }
 
-{DECIMAL_CONSTANT}|{OCTAL_CONSTANT}|{HEXADECIMAL_CONSTANT} {
+({DECIMAL_CONSTANT}[uU]?)|({OCTAL_CONSTANT}[uU]?)|({HEXADECIMAL_CONSTANT}[uU]?) {
     yylval->assign(yytext, yyleng);
     return pp::Token::CONST_INT;
 }
 
-({DIGIT}+{EXPONENT_PART})|({FRACTIONAL_CONSTANT}{EXPONENT_PART}?) {
+({DIGIT}+{EXPONENT_PART}[fF]?)|({FRACTIONAL_CONSTANT}{EXPONENT_PART}?[fF]?) {
     yylval->assign(yytext, yyleng);
     return pp::Token::CONST_FLOAT;
 }
index b46e4d0..e20068b 100644 (file)
@@ -4,30 +4,23 @@
 // found in the LICENSE file.
 //
 
-#include <math.h>
-#include <stdlib.h>
+#include <limits>
 
 #include "util.h"
+#include "preprocessor/numeric_lex.h"
 
-#ifdef _MSC_VER
-    #include <locale.h>
-#else
-    #include <sstream>
-#endif
+bool atof_clamp(const char *str, float *value)
+{
+       bool success = pp::numeric_lex_float(str, value);
+       if(!success)
+               *value = std::numeric_limits<float>::max();
+       return success;
+}
 
-double atof_dot(const char *str)
+bool atoi_clamp(const char *str, int *value)
 {
-#ifdef _MSC_VER
-    _locale_t l = _create_locale(LC_NUMERIC, "C");
-    double result = _atof_l(str, l);
-    _free_locale(l);
-    return result;
-#else
-    double result;
-    std::istringstream s(str);
-    std::locale l("C");
-    s.imbue(l);
-    s >> result;
-    return result;
-#endif
+       bool success = pp::numeric_lex_int(str, value);
+       if(!success)
+               *value = std::numeric_limits<int>::max();
+       return success;
 }
index 35288b7..61442be 100644 (file)
 extern "C" {
 #endif
 
-// atof_dot is like atof but forcing C locale, i.e. forcing '.' as decimal point.
-double atof_dot(const char *str);
+// atof_clamp is like atof but
+//   1. it forces C locale, i.e. forcing '.' as decimal point.
+//   2. it clamps the value to -FLT_MAX or FLT_MAX if overflow happens.
+// Return false if overflow happens.
+bool atof_clamp(const char *str, float *value);
+
+// If overflow happens, clamp the value to INT_MIN or INT_MAX.
+// Return false if overflow happens.
+bool atoi_clamp(const char *str, int *value);
 
 #ifdef __cplusplus
 } // end extern "C"