develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r34871 - trunk/compilers/pirc/new

From:
kjs
Date:
January 3, 2009 04:18
Subject:
[svn:parrot] r34871 - trunk/compilers/pirc/new
Message ID:
20090103121754.0FDBACB9FA@x12.develooper.com
Author: kjs
Date: Sat Jan  3 04:17:51 2009
New Revision: 34871

Modified:
   trunk/compilers/pirc/new/pir.l
   trunk/compilers/pirc/new/pirlexer.c
   trunk/compilers/pirc/new/pirlexer.h

Log:
[pirc] add support for <encoding><charset><contents>.


Modified: trunk/compilers/pirc/new/pir.l
==============================================================================
--- trunk/compilers/pirc/new/pir.l	(original)
+++ trunk/compilers/pirc/new/pir.l	Sat Jan  3 04:17:51 2009
@@ -130,7 +130,8 @@
 ENCCHAR         {ALPHA}|{DIGIT}|"-"
 ENCCHARS        {ENCCHAR}*
 ENC             {ALPHA}{ENCCHARS}":"
-UNICODE         {ENC}{ENC}?{DQ_STRING}
+CHARSET         {ENC}
+ENCODING        {ENC}
 
 REGISTER       "$"[SNIP]{DIGITS}
 
@@ -385,30 +386,83 @@
                     return TK_STRINGC;
                   }
 
-{UNICODE}         { /* parse yytext, which contains the encoding, a ':', and the quoted string */
+{CHARSET}{DQ_STRING}  {
+                    /* parse yytext, which contains the charset, a ':', and the quoted string */
                     char        *colon = strchr(yytext, ':');
                     lexer_state *lexer = yyget_extra(yyscanner);
                     ucstring    *ustr  = (ucstring *)pir_mem_allocate(lexer, sizeof (ucstring));
-                    /* copy the encoding part */
-                    ustr->encoding     = dupstrn(lexer, yytext, colon - yytext);
+                    /* copy the charset part */
+                    ustr->charset      = dupstrn(lexer, yytext, colon - yytext);
                     /* the colon becomes a NULL character to end the encoding string */
                     *colon = '\0';
                     /* copy the string contents, strip the quotes. Example:
                      *   iso-8859-1:"hi there"
                      *   123456789012345678901
-                     *
+                     *             ^
+                     *          (colon)
                      * colon points to the colon, add 2 to point to the first character
                      * in the string ('h'). yyleng is 20 in the example, subtract
-                     * string length of the encoding part (10) and 3 for the quotes and colon.
+                     * string length of the charset part (10) and 3 for the quotes and colon.
                      */
 
-                    ustr->contents = dupstrn(lexer, colon + 2, yyleng - strlen(ustr->encoding) - 3);
+                    ustr->contents = dupstrn(lexer, colon + 2, yyleng - strlen(ustr->charset) - 3);
 
-                    fprintf(stderr, "ucstring: [%s]:[%s]\n", ustr->encoding, ustr->contents);
+                    ustr->encoding = NULL;
+
+                    fprintf(stderr, "ucstring: [%s]:[%s]\n", ustr->charset, ustr->contents);
 
                     yylval->ustr = ustr;
                     return TK_USTRINGC;
                   }
+
+{ENCODING}{CHARSET}{DQ_STRING} {
+                    /* parse yytext, which contains the encoding, a ':', a charset,
+                     * a ':', and the quoted string
+                     */
+                    char        *colon1 = strchr(yytext, ':');
+                    char        *colon2;
+                    lexer_state *lexer = yyget_extra(yyscanner);
+                    ucstring    *ustr  = (ucstring *)pir_mem_allocate(lexer, sizeof (ucstring));
+
+                    /* yytext has the following structure:
+                     *
+                     * <charset><encoding><contents>
+                     *
+                     *   utf:unicode:"hi there"
+                     *   1234567890123456789012
+                     *      ^       ^
+                     *   (colon1) (colon2)
+                     *
+                     * colon1 points to the first colon, colon2 points to the second.
+                     *
+
+                    /* copy the encoding part */
+                    ustr->encoding     = dupstrn(lexer, yytext, colon1 - yytext);
+
+                    /* look for the second colon after this one */
+                    colon2 = strchr(colon1 + 1, ':');
+                    /* the colon becomes a NULL character to end the encoding string */
+                    *colon1 = '\0';
+
+                    ustr->charset  = dupstrn(lexer, colon1 + 1, colon2 - colon1 - 1);
+
+                    /* start copying after the second colon, and skip the quote as well.
+                     * yyleng contains the total length, substract length of encoding,
+                     * length of charset, 2 quotes, and 2 colons (hence -4).
+                     */
+                    ustr->contents = dupstrn(lexer, colon2 + 2,
+                                 yyleng - strlen(ustr->charset) - strlen(ustr->encoding) - 4);
+
+                    /* fprintf(stderr, "ucstring: [%s]:[%s]:[%s]\n", ustr->encoding, ustr->charset,
+                                   ustr->contents);
+                    */
+
+                    yylval->ustr = ustr;
+                    return TK_USTRINGC;
+
+                  }
+
+
 "$P"{DIGIT}+      { yylval->ival = atoi(yytext + 2); return TK_PREG; }
 "$S"{DIGIT}+      { yylval->ival = atoi(yytext + 2); return TK_SREG; }
 "$N"{DIGIT}+      { yylval->ival = atoi(yytext + 2); return TK_NREG; }

Modified: trunk/compilers/pirc/new/pirlexer.c
==============================================================================
--- trunk/compilers/pirc/new/pirlexer.c	(original)
+++ trunk/compilers/pirc/new/pirlexer.c	Sat Jan  3 04:17:51 2009
@@ -482,8 +482,8 @@
     yyg->yy_c_buf_p = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 205
-#define YY_END_OF_BUFFER 206
+#define YY_NUM_RULES 206
+#define YY_END_OF_BUFFER 207
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -491,98 +491,98 @@
     flex_int32_t yy_verify;
     flex_int32_t yy_nxt;
     };
-static yyconst flex_int16_t yy_accept[812] =
+static yyconst flex_int16_t yy_accept[816] =
     {   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,  206,  125,    2,    4,    2,   25,
-      125,  125,  125,   22,  125,  125,   28,   29,   23,   21,
-       30,   27,  123,   24,  119,  119,  125,   35,   15,   34,
-       16,  117,  117,   31,   32,  117,  117,  117,  117,  117,
-      117,  125,   26,  205,  132,  137,  132,  134,  135,  136,
-      133,  171,  169,  171,  171,  163,  161,  162,  161,  163,
-      157,  157,  157,  157,  157,  166,  205,  205,  205,  150,
-      142,  149,  142,  150,  150,  150,  144,  145,  150,  143,
-
-      150,  146,  146,  140,  147,  148,  130,  129,  130,  130,
-      130,  130,  130,  128,  128,  127,  125,  123,  117,  117,
-      117,  117,  117,  117,  117,  117,  205,  205,  205,  205,
-      146,  146,    1,  204,  202,  203,  202,  204,  204,  204,
-      204,  172,  204,  197,  197,  204,  195,  195,  195,  195,
-      195,  173,  174,    0,    4,    4,   12,    0,  109,    0,
+        0,    0,    0,    0,  207,  126,    2,    4,    2,   25,
+      126,  126,  126,   22,  126,  126,   28,   29,   23,   21,
+       30,   27,  124,   24,  120,  120,  126,   35,   15,   34,
+       16,  118,  118,   31,   32,  118,  118,  118,  118,  118,
+      118,  126,   26,  206,  133,  138,  133,  135,  136,  137,
+      134,  172,  170,  172,  172,  164,  162,  163,  162,  164,
+      158,  158,  158,  158,  158,  167,  206,  206,  206,  151,
+      143,  150,  143,  151,  151,  151,  145,  146,  151,  144,
+
+      151,  147,  147,  141,  148,  149,  131,  130,  131,  131,
+      131,  131,  131,  129,  129,  128,  126,  124,  118,  118,
+      118,  118,  118,  118,  118,  118,  206,  206,  206,  206,
+      147,  147,    1,  205,  203,  204,  203,  205,  205,  205,
+      205,  173,  205,  198,  198,  205,  196,  196,  196,  196,
+      196,  174,  175,    0,    4,    4,   12,    0,  109,    0,
         0,    3,    0,    0,    0,    0,    0,   40,   18,   43,
-        0,    0,   39,    0,  119,   36,   37,  118,   46,  138,
-      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  138,  138,   17,   38,  118,    0,
+        0,    0,   39,    0,  120,   36,   37,  119,   46,  139,
+      139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
+      139,  139,  139,  139,  139,  139,   17,   38,  119,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    9,   13,   11,   10,   14,    8,
-        0,  117,  115,  116,  117,   47,  117,  117,  117,  117,
-      117,   42,   19,   45,   20,  137,  137,  133,  169,  169,
-        0,    0,    0,  162,  162,  158,  157,  157,  157,  157,
-      157,  166,  166,    0,    0,  165,  149,  149,    0,  146,
-        0,    0,    0,    0,  146,  146,  139,  146,    0,    0,
-        0,    0,  140,    0,  128,    0,    0,    0,    0,  128,
-      128,  128,    0,    0,    0,    0,  127,    0,    0,    0,
-        0,    0,    0,  117,  124,  116,  117,   47,  117,  117,
-
-      117,  117,  117,  203,  203,    0,  201,    0,    0,    0,
-        0,  197,  196,  188,  188,  188,  188,  188,  188,  196,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  195,
-      189,  193,  192,  191,  194,   33,    3,  114,  113,  111,
-      112,   41,    0,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  138,  138,  138,   44,  118,  121,
-        0,  118,  122,  120,    0,    0,    0,    0,    0,    0,
+        0,  118,  116,  117,  118,   47,  118,  118,  118,  118,
+      118,   42,   19,   45,   20,  138,  138,  134,  170,  170,
+        0,    0,    0,  163,  163,  159,  158,  158,  158,  158,
+      158,  167,  167,    0,    0,  166,  150,  150,    0,  147,
+        0,    0,    0,    0,  147,  147,  140,  147,    0,    0,
+        0,    0,  141,    0,  129,    0,    0,    0,    0,  129,
+      129,  129,    0,    0,    0,    0,  128,    0,    0,    0,
+        0,    0,    0,  118,  125,  117,  118,   47,  118,  118,
+
+      118,  118,  118,  204,  204,    0,  202,    0,    0,    0,
+        0,  198,  197,  189,  189,  189,  189,  189,  189,  197,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  196,
+      190,  194,  193,  192,  195,   33,    3,  115,  114,  112,
+      113,   41,    0,  139,  139,  139,  139,  139,  139,  139,
+      139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
+      139,  139,  139,  139,  139,  139,  139,   44,  119,  122,
+        0,  119,  123,  121,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    7,    6,    0,    0,    0,  117,   51,  117,
+        0,    0,    7,    6,    0,    0,    0,  118,   51,  118,
 
-       52,   53,  117,  117,    0,    0,    0,  158,  153,  155,
-      154,  157,  141,    0,  139,  146,  146,    0,  146,  146,
-      146,  128,    0,  128,  128,    0,  128,  128,  128,    0,
-      160,  114,  113,  111,  112,  159,  167,  117,   51,  117,
-       52,   53,  117,  117,  190,    0,  188,  188,  188,  188,
-      188,  188,  188,  196,  199,    0,  196,  200,  198,    0,
-        0,    0,    0,    0,    0,    0,  118,   62,  138,  138,
-      138,  138,   58,  138,  138,  138,  138,   65,  138,  138,
-      138,  138,  138,  138,  138,  138,  138,  138,   82,  138,
-      138,    0,    0,    0,    0,    0,    0,   95,    0,    0,
+       52,   53,  118,  118,    0,    0,    0,  159,  154,  156,
+      155,  158,  142,    0,  140,  147,  147,    0,  147,  147,
+      147,  129,    0,  129,  129,    0,  129,  129,  129,    0,
+      161,  115,  114,  112,  113,  160,  168,  118,   51,  118,
+       52,   53,  118,  118,  191,    0,  189,  189,  189,  189,
+      189,  189,  189,  197,  200,    0,  197,  201,  199,    0,
+        0,    0,    0,    0,    0,    0,  119,   62,  139,  139,
+      139,  139,   58,  139,  139,  139,  139,   65,  139,  139,
+      139,  139,  139,  139,  139,  139,  139,  139,   82,  139,
+      139,    0,    0,    0,    0,    0,    0,   95,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    5,    0,  110,    0,    0,    0,   48,   50,  117,
-      117,    0,    0,    0,  157,    0,  146,    0,  128,  168,
-      159,   48,   50,  117,  117,    0,  196,  188,  182,  188,
-      188,  188,  188,    0,    0,    0,    0,    0,    0,  138,
-      138,  138,   76,  138,  138,   87,   59,  138,  138,  138,
-       66,  138,  138,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,   88,  107,    0,   89,    0,    0,   90,   93,
+        0,    5,    0,  110,    0,    0,    0,   48,   50,  118,
+      118,    0,    0,    0,  158,    0,  147,    0,  129,  169,
+      160,   48,   50,  118,  118,    0,  197,  189,  183,  189,
+      189,  189,  189,    0,    0,    0,    0,    0,    0,  139,
+      139,  139,   76,  139,  139,   87,   59,  139,  139,  139,
+       66,  139,  139,  139,  139,  139,  139,  139,  139,  139,
+      139,  139,   88,  107,    0,   89,    0,    0,   90,   93,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  117,  117,  170,    0,    0,  157,  117,  117,
+        0,    0,    0,  118,  118,  171,    0,    0,  158,  118,
 
-      187,  186,  188,  188,  188,  178,    0,  177,  176,  175,
-        0,  138,  138,  138,   57,  138,  138,  138,  138,  138,
-      138,  138,   68,  131,  138,  138,  138,   72,  138,  138,
-      138,  138,  138,   83,    0,    0,    0,    0,   98,  106,
-        0,    0,    0,   96,    0,    0,   99,    0,    0,   54,
-       49,  151,    0,  156,   54,   49,  184,  188,  188,    0,
-        0,  138,  138,  138,  138,  138,  138,  138,  138,  138,
-      138,  138,  138,  138,  138,   81,  138,  138,  138,  138,
-        0,    0,    0,   94,    0,    0,    0,    0,  105,    0,
-       97,    0,  188,  188,  188,    0,    0,   63,  138,  138,
-
-      138,  138,  138,  138,  138,  138,  138,  138,   67,  138,
-      138,  138,  138,  138,   56,  138,  138,  138,    0,    0,
-        0,  101,    0,    0,    0,    0,    0,  188,  188,  181,
-        0,    0,   55,  138,  138,  138,   77,  138,  138,  138,
-      138,   64,  138,  138,  138,  138,  138,   71,  138,  138,
-       86,    0,    0,  108,  104,  103,   91,    0,    0,    0,
-      188,  188,    0,  179,  138,  138,  138,  138,   79,  138,
-      138,  138,  138,  138,   69,   70,  138,   85,   92,    0,
-        0,    0,    0,  188,  183,  180,   73,  138,  138,   78,
-       80,  138,  138,  138,  138,   84,  100,  102,    0,    0,
+      118,  188,  187,  189,  189,  189,  179,    0,  178,  177,
+      176,    0,  139,  139,  139,   57,  139,  139,  139,  139,
+      139,  139,  139,   68,  132,  139,  139,  139,   72,  139,
+      139,  139,  139,  139,   83,    0,    0,    0,    0,   98,
+      106,    0,    0,    0,   96,    0,    0,   99,    0,    0,
+        0,  111,    0,   54,   49,  152,    0,  157,   54,   49,
+      185,  189,  189,    0,    0,  139,  139,  139,  139,  139,
+      139,  139,  139,  139,  139,  139,  139,  139,  139,   81,
+      139,  139,  139,  139,    0,    0,    0,   94,    0,    0,
+        0,    0,  105,    0,   97,    0,  189,  189,  189,    0,
+
+        0,   63,  139,  139,  139,  139,  139,  139,  139,  139,
+      139,  139,   67,  139,  139,  139,  139,  139,   56,  139,
+      139,  139,    0,    0,    0,  101,    0,    0,    0,    0,
+        0,  189,  189,  182,    0,    0,   55,  139,  139,  139,
+       77,  139,  139,  139,  139,   64,  139,  139,  139,  139,
+      139,   71,  139,  139,   86,    0,    0,  108,  104,  103,
+       91,    0,    0,    0,  189,  189,    0,  180,  139,  139,
+      139,  139,   79,  139,  139,  139,  139,  139,   69,   70,
+      139,   85,   92,    0,    0,    0,    0,  189,  184,  181,
+       73,  139,  139,   78,   80,  139,  139,  139,  139,   84,
 
-      188,  138,   75,   60,   61,  126,  164,  152,  185,   74,
-        0
+      100,  102,    0,    0,  189,  139,   75,   60,   61,  127,
+      165,  153,  186,   74,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -629,205 +629,207 @@
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[867] =
+static yyconst flex_int16_t yy_base[872] =
     {   0,
         0,    0,   72,    0,  142,  143,  162,    0,  234,    0,
       306,    0,  378,    0,    0,    0,  450,    0,  516,  529,
-        0,    0,  553,    0, 2261, 2262, 2241,  147,  523, 2231,
-      619,  148,  118, 2230,  516, 2245, 2262, 2262,  515,  608,
-     2262,  616,  643,  505,  693,  635,  714, 2262,  606,  613,
-      617,  506,  706, 2262, 2262,  695,  724,  718,  630,  720,
-      728,  600,  690, 2262, 2262,  647, 2253, 2262, 2262, 2262,
-        0, 2262,  745, 2252,  683, 2262, 2262,  753, 2251,    0,
-        0, 2195, 2187, 2194, 2186,  762, 2246,    0, 2223, 2262,
-     2262,  785, 2244,  644,  753, 2234, 2262, 2262,  776, 2262,
-
-      780,  786,  793,    0, 2262, 2262, 2262, 2262,  715,  791,
-     2233,  817,  799,  835,  827,    0,  825, 2235,  817,  866,
-      846,  855,  874,  885,  891,  893,  789, 2231,  903,  907,
-        0,  913, 2262, 2262, 2262,  867, 2239,  799,  857, 2229,
-      926, 2262,  935,  977,  946,  906, 2215,  950,  959,  981,
-      990, 2262, 2262,  877,  938,  983, 2262,  868, 2262,    0,
-      152,  915,  657,  999, 1008, 1016, 1024, 2262, 2262, 2262,
-     2227, 2210, 2262, 1028, 1034, 2262, 2262, 1038, 2262,    0,
-     2200, 2178, 2184,  614, 2176, 2178,  712, 2174, 1013,  596,
-      672, 2184, 2179,  672, 2182, 2173, 2199, 2262, 1053,  879,
-
-     1072,  955,    0, 2168, 2169,  932,  855, 1018,  606,  873,
-     2165,  952, 2165, 2158, 2262, 2262, 2262, 2262, 2262,  998,
-     2196,  760, 2213, 1084, 1016,  837, 1017, 1066, 1048, 1074,
-     1045, 2262, 2262, 2262, 2262, 1108, 1112,    0, 1116, 1122,
-     2161, 2159, 2170, 1126, 1130,    0,    0, 2152, 2158, 2165,
-     2151, 1135, 1139, 2187, 2186, 2262, 1143, 1147, 1072, 2262,
-        0, 1132, 2198, 1136, 1142, 1146,    0, 1150, 1155, 1164,
-     1168,    0,    0, 1140, 2262,    0, 1181, 2197, 1185, 1191,
-     1195, 1199, 1173, 1213, 1177,    0,    0, 2178, 1217, 1230,
-     1234, 1244,    0, 1245, 2182, 1255, 1263, 1264, 1265, 1266,
-
-     1279, 1280, 1281, 1298, 1310, 1189, 2262,    0, 1295, 2194,
-     1309, 1317, 1322,    0, 2150, 1027, 2157, 2156, 2153, 1330,
-     1204, 1343, 1222,    0, 2143, 1191, 2141, 2152, 2139, 2172,
-     2262, 1353, 1361, 1366, 1371, 2262, 1257, 1348, 1376, 1380,
-     1384, 2262, 1393,    0, 2159, 2137, 2141, 2137, 2134, 2141,
-     2134, 2125, 2129, 2121, 2119, 2127,  764, 2135, 2119, 2125,
-     2126, 2118, 2115, 2114, 2129, 2121, 2124, 2262, 1397, 1250,
-     1401, 1405, 1303,    0, 2115, 2126, 2115, 1294, 2104, 2123,
-     2114, 2104, 2111, 2109, 2114, 2100, 2099, 2099, 2096, 2112,
-     2104, 2111, 2262, 2129, 2149, 1314, 2130, 1289, 1413, 1414,
-
-     1415, 1416, 1417, 1418, 2104, 2104, 2103,    0,    0,    0,
-        0, 2096, 1423, 1433,    0, 1438, 1265, 1442, 1452, 1456,
-        0, 1459, 1469, 1473, 1313, 1477, 1481, 1486,    0, 2120,
-     2124, 1489, 1493, 1504, 1508,    0, 2262, 1515, 1517, 1519,
-     1518, 1521, 1532, 1534, 1532, 1545,    0, 2092, 2080, 2088,
-     2096, 2087, 2094, 1549, 1358, 1555, 1567, 1499,    0, 2083,
-     2084, 2085, 2092, 2083, 2074, 1571, 1575, 2090, 2076, 2079,
-     2077, 2069,  735, 2080, 2084, 2081, 2069,    0, 2076, 2076,
-     2078, 2062, 2069, 2071, 2075, 2073, 2054, 2072,    0, 2061,
-     2060, 2057, 2050, 2062, 2048, 2047, 2051, 2262, 2059, 2050,
-
-     2053, 2042, 2054, 2046,  978, 2052, 2038, 2039, 2045, 2038,
-     2050, 2262, 1406, 2262,    0, 2072, 2089, 1540, 1583, 1584,
-     1585, 2038, 2047, 2031, 2034, 1583, 1590, 1594, 1598, 2262,
-        0, 1605, 1606, 1607, 1608, 1622, 1628, 2040,    0, 2039,
-     2027, 2037, 2041, 2028, 2034, 2020, 2033, 2024, 2017, 2023,
-     2015, 2020,    0, 2013, 1579,    0,    0, 2014, 2028, 2025,
-        0, 2017, 2016, 2012, 2024, 2006, 2019, 2010, 2004, 1390,
-     2016, 2014, 2262, 2262, 2013, 2262, 2015, 2012, 2262, 2262,
-     2001, 2004, 2008, 1993, 2004, 1996, 1992, 2004, 1992, 2001,
-     1985, 1993, 1609, 1635, 2262, 1990, 1986, 1988, 1636, 1638,
-
-        0,    0, 1971, 1963, 1959, 2262, 1971, 2262, 2262, 2262,
-     1968, 1969, 1960, 1952,    0, 1938, 1930, 1925, 1926, 1920,
-     1920, 1903,    0, 1908, 1904, 1890, 1902,    0, 1887, 1882,
-     1889, 1880, 1887,    0, 1875, 1871, 1878, 1874, 2262, 2262,
-     1858, 1863, 1860, 2262, 1858, 1845, 2262, 1856, 1851, 1639,
-     1649, 2262, 1855,    0, 1651, 1652, 1851, 1836, 1822, 1814,
-     1806, 1800, 1795, 1610, 1794, 1777, 1778, 1765, 1770, 1752,
-     1758, 1624, 1758, 1754, 1744,    0, 1738, 1718, 1727, 1715,
-     1723, 1715, 1705, 2262, 1691, 1701, 1683, 1643, 2262, 1653,
-     2262, 1641, 1647, 1648, 1646, 1646, 1635,    0, 1640, 1643,
-
-     1637, 1632, 1630, 1620, 1628, 1618, 1620, 1611,    0, 1599,
-     1053, 1599, 1591, 1583,    0, 1564, 1530, 1528, 1519, 1530,
-     1516, 2262, 1507, 1485, 1458, 1426, 1092, 1427, 1435,    0,
-     1404, 1407,    0, 1397, 1348, 1359,    0, 1300, 1306, 1291,
-     1262,    0, 1250, 1254, 1243, 1213, 1179,    0, 1165, 1161,
-        0, 1141, 1122, 2262, 2262, 2262, 2262, 1127, 1114, 1094,
-     1076, 1079, 1075, 2262, 1064, 1038, 1042, 1029,    0,  990,
-      980,  955,  956,  947,    0,    0,  902,    0, 2262,  902,
-      899,  893,  861,  789,    0, 2262,    0,  768,  774,    0,
-      712,  693,  687,  677,  616,    0, 2262, 2262,  493,  490,
-
-      465,  102,    0,    0,    0,    0, 2262, 2262,    0,    0,
-     2262, 1701, 1710, 1719, 1728, 1737, 1746, 1752, 1757, 1759,
-     1764, 1766, 1771, 1780, 1789, 1794, 1799, 1808, 1817, 1822,
-     1824, 1830, 1839, 1848, 1853, 1858, 1867, 1876, 1885, 1890,
-     1895, 1900, 1906, 1913, 1918, 1923, 1928, 1933, 1938, 1943,
-     1947, 1956, 1965, 1970, 1974, 1979, 1981, 1987, 1996, 2005,
-     2010, 2015, 2019, 2028, 2034, 2039
+        0,    0,  553,    0, 2273, 2274, 2253,  147,  523, 2243,
+      619,  148,  118, 2242,  516, 2257, 2274, 2274,  515,  608,
+     2274,  616,  643,  505,  693,  635,  714, 2274,  606,  613,
+      617,  506,  706, 2274, 2274,  695,  724,  718,  630,  720,
+      728,  600,  690, 2274, 2274,  647, 2265, 2274, 2274, 2274,
+        0, 2274,  745, 2264,  683, 2274, 2274,  753, 2263,    0,
+        0, 2207, 2199, 2206, 2198,  762, 2258,    0, 2235, 2274,
+     2274,  785, 2256,  644,  753, 2246, 2274, 2274,  776, 2274,
+
+      780,  786,  793,    0, 2274, 2274, 2274, 2274,  715,  791,
+     2245,  817,  799,  835,  827,    0,  825, 2247,  817,  866,
+      846,  855,  874,  885,  891,  893,  789, 2243,  903,  907,
+        0,  913, 2274, 2274, 2274,  867, 2251,  799,  857, 2241,
+      926, 2274,  935,  977,  946,  906, 2227,  950,  959,  981,
+      990, 2274, 2274,  877,  938,  983, 2274,  868, 2274,    0,
+      152,  915,  657,  999, 1008, 1016, 1024, 2274, 2274, 2274,
+     2239, 2222, 2274, 1028, 1034, 2274, 2274, 1038, 2274,    0,
+     2212, 2190, 2196,  614, 2188, 2190,  712, 2186, 1013,  596,
+      672, 2196, 2191,  672, 2194, 2185, 2211, 2274, 1053,  879,
+
+     1072,  955,    0, 2180, 2181,  932,  855, 1018,  606,  873,
+     2177,  952, 2177, 2170, 2274, 2274, 2274, 2274, 2274,  998,
+     2208,  760, 2225, 1084, 1016,  837, 1017, 1066, 1048, 1074,
+     1045, 2274, 2274, 2274, 2274, 1108, 1112,    0, 1116, 1122,
+     2173, 2171, 2182, 1126, 1130,    0,    0, 2164, 2170, 2177,
+     2163, 1135, 1139, 2199, 2198, 2274, 1143, 1147, 1072, 2274,
+        0, 1132, 2210, 1136, 1142, 1146,    0, 1150, 1155, 1164,
+     1168,    0,    0, 1140, 2274,    0, 1181, 2209, 1185, 1191,
+     1195, 1199, 1173, 1213, 1177,    0,    0, 2190, 1217, 1230,
+     1234, 1244,    0, 1245, 2194, 1255, 1263, 1264, 1265, 1266,
+
+     1279, 1280, 1281, 1298, 1310, 1189, 2274,    0, 1295, 2206,
+     1309, 1317, 1322,    0, 2162, 1027, 2169, 2168, 2165, 1330,
+     1204, 1343, 1222,    0, 2155, 1191, 2153, 2164, 2151, 2184,
+     2274, 1353, 1361, 1366, 1371, 2274, 1257, 1348, 1376, 1380,
+     1384, 2274, 1393,    0, 2171, 2149, 2153, 2149, 2146, 2153,
+     2146, 2137, 2141, 2133, 2131, 2139,  764, 2147, 2131, 2137,
+     2138, 2130, 2127, 2126, 2141, 2133, 2136, 2274, 1397, 1250,
+     1401, 1405, 1303,    0, 2127, 2138, 2127, 1294, 2116, 2135,
+     2126, 2116, 2123, 2121, 2126, 2112, 2111, 2111, 2108, 2124,
+     2116, 2123, 2274, 2141, 2161, 1314, 2142, 1289, 1413, 1414,
+
+     1415, 1416, 1417, 1418, 2116, 2116, 2115,    0,    0,    0,
+        0, 2108, 1423, 1433,    0, 1438, 1265, 1442, 1452, 1456,
+        0, 1459, 1469, 1473, 1313, 1477, 1481, 1486,    0, 2132,
+     2136, 1489, 1493, 1504, 1508,    0, 2274, 1515, 1517, 1519,
+     1518, 1521, 1532, 1534, 1532, 1545,    0, 2104, 2092, 2100,
+     2108, 2099, 2106, 1549, 1358, 1555, 1567, 1499,    0, 2095,
+     2096, 2097, 2104, 2095, 2086, 1571, 1575, 2102, 2088, 2091,
+     2089, 2081,  735, 2092, 2096, 2093, 2081,    0, 2088, 2088,
+     2090, 2074, 2081, 2083, 2087, 2085, 2066, 2084,    0, 2073,
+     2072, 2069, 2062, 2074, 2060, 2059, 2063, 2274, 2071, 2062,
+
+     2065, 2054, 2066, 2058,  978, 2064, 2050, 2051, 2057, 2050,
+     2062, 2274, 1406, 2274,    0, 2084, 2101, 1540, 1583, 1584,
+     1585, 2050, 2059, 2043, 2046, 1583, 1590, 1594, 1598, 2274,
+        0, 1605, 1606, 1607, 1608, 1622, 1628, 2052,    0, 2051,
+     2039, 2049, 2053, 2040, 2046, 2032, 2045, 2036, 2029, 2035,
+     2027, 2032,    0, 2025, 1579,    0,    0, 2026, 2040, 2037,
+        0, 2029, 2028, 2024, 2036, 2018, 2031, 2022, 2016, 1390,
+     2028, 2026, 2274, 2274, 2025, 2274, 2027, 2024, 2274, 2274,
+     2013, 2016, 2020, 2005, 2016, 2008, 2004, 2016, 2004, 2013,
+     1997, 2005, 1620, 1635, 1636, 2274, 2004, 2000, 2005, 1637,
+
+     1638,    0,    0, 1991, 1983, 1982, 2274, 1991, 2274, 2274,
+     2274, 1981, 1979, 1975, 1975,    0, 1970, 1965, 1952, 1947,
+     1929, 1934, 1925,    0, 1931, 1927, 1907, 1911,    0, 1896,
+     1891, 1899, 1894, 1898,    0, 1889, 1882, 1888, 1884, 2274,
+     2274, 1868, 1873, 1867, 2274, 1865, 1852, 2274, 1868, 1867,
+     1622, 2274,    0, 1651, 1652, 2274, 1871,    0, 1654, 1655,
+     1867, 1847, 1837, 1846, 1838, 1836, 1823, 1625, 1813, 1801,
+     1809, 1796, 1801, 1783, 1781, 1626, 1781, 1772, 1754,    0,
+     1753, 1741, 1750, 1744, 1744, 1733, 1720, 2274, 1703, 1723,
+     1717, 1706, 2274, 1713, 2274, 1692, 1681, 1653, 1650, 1650,
+
+     1639,    0, 1644, 1647, 1641, 1636, 1633, 1621, 1627, 1616,
+     1619, 1595,    0, 1599, 1053, 1601, 1591, 1583,    0, 1569,
+     1530, 1528, 1519, 1530, 1516, 2274, 1507, 1485, 1458, 1426,
+     1092, 1427, 1435,    0, 1404, 1407,    0, 1397, 1348, 1359,
+        0, 1300, 1306, 1291, 1262,    0, 1250, 1254, 1243, 1213,
+     1179,    0, 1165, 1161,    0, 1141, 1122, 2274, 2274, 2274,
+     2274, 1127, 1114, 1094, 1076, 1079, 1075, 2274, 1064, 1038,
+     1042, 1029,    0,  990,  980,  955,  956,  947,    0,    0,
+      902,    0, 2274,  902,  899,  893,  861,  789,    0, 2274,
+        0,  768,  774,    0,  712,  693,  687,  677,  616,    0,
+
+     2274, 2274,  493,  490,  465,  102,    0,    0,    0,    0,
+     2274, 2274,    0,    0, 2274, 1701, 1710, 1719, 1728, 1737,
+     1746, 1752, 1757, 1759, 1764, 1766, 1771, 1780, 1789, 1794,
+     1799, 1808, 1817, 1822, 1824, 1830, 1839, 1848, 1853, 1858,
+     1867, 1876, 1885, 1890, 1895, 1900, 1906, 1913, 1918, 1923,
+     1928, 1933, 1938, 1943, 1947, 1956, 1965, 1970, 1974, 1979,
+     1981, 1987, 1996, 2005, 2010, 2015, 2019, 2028, 2034, 2039,
+     2048
     } ;
 
-static yyconst flex_int16_t yy_def[867] =
+static yyconst flex_int16_t yy_def[872] =
     {   0,
-      811,    1,  811,    3,  812,  812,  811,    7,  811,    9,
-      811,   11,  811,   13,    1,    1,  811,   17,  813,  813,
-      814,  814,  811,   23,  811,  811,  811,  811,  811,  811,
-      815,  816,  811,  811,  811,  817,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  818,  818,  811,  811,  818,  818,  818,  818,  818,
-      818,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      819,  811,  811,  811,  811,  811,  811,  811,  811,  820,
-      821,  821,  821,  821,  821,  811,  811,  822,  823,  811,
-      811,  811,  811,  824,  811,  825,  811,  811,  811,  811,
-
-      826,  811,  811,  827,  811,  811,  811,  811,  828,  811,
-      829,  811,  811,  811,  811,  830,  831,   43,  832,  832,
-      832,  832,  832,  832,  832,  832,  824,  825,  811,  811,
-      102,  811,  811,  811,  811,  811,  811,  833,  811,  834,
-      811,  811,  835,  811,  811,  811,  836,  836,  836,  836,
-      836,  811,  811,  811,  811,  811,  811,  837,  811,  837,
-      838,  811,  838,  811,  811,  811,  811,  811,  811,  811,
-      839,  811,  811,  811,  811,  811,  811,  811,  811,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  811,  811,  811,  811,
-
-      811,  811,  841,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      842,  843,  844,  843,  843,  843,  843,  843,  843,  843,
-      843,  811,  811,  811,  811,  811,  811,  845,  811,  811,
-      811,  811,  811,  811,  811,  846,  847,  847,  847,  847,
-      847,  811,  811,  848,  848,  811,  811,  811,  824,  811,
-      824,  811,  825,  811,  811,  811,  849,  811,  811,  811,
-      811,  850,  851,  852,  811,  852,  811,  853,  811,  811,
-      811,  811,  811,  811,  811,  854,  855,  856,  856,  856,
-      856,  856,  857,  858,  811,  858,  858,  858,  858,  858,
-
-      858,  858,  858,  811,  811,  859,  811,  859,  811,  860,
-      811,  811,  811,  861,  861,  861,  861,  861,  861,  811,
-      811,  811,  811,  862,  811,  811,  811,  811,  811,  863,
-      811,  863,  863,  863,  863,  811,  811,  811,  811,  811,
-      811,  811,  811,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  811,  811,  811,
-      811,  811,  811,  841,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  844,  864,  865,  843,  843,  843,
-
-      843,  843,  843,  843,  811,  811,  811,  846,  847,  847,
-      847,  847,  811,  811,  849,  811,  811,  811,  811,  811,
-      850,  811,  811,  811,  811,  811,  811,  811,  854,  856,
-      811,  856,  856,  856,  856,  866,  811,  858,  858,  858,
-      858,  858,  858,  858,  811,  811,  861,  861,  861,  861,
-      861,  861,  861,  811,  811,  811,  811,  811,  862,  811,
-      811,  811,  811,  811,  811,  811,  811,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  864,  811,  864,  865,  811,  843,  843,  843,
-      843,  811,  811,  811,  847,  811,  811,  811,  811,  811,
-      866,  858,  858,  858,  858,  811,  811,  861,  861,  861,
-      861,  861,  861,  811,  811,  811,  811,  811,  811,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  843,  843,  811,  811,  811,  847,  858,  858,
-
-      861,  861,  861,  861,  861,  811,  811,  811,  811,  811,
-      811,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  843,
-      843,  811,  811,  847,  858,  858,  861,  861,  861,  811,
-      811,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  861,  861,  861,  811,  811,  840,  840,  840,
-
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  861,  861,  861,
-      811,  811,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  840,  840,
-      840,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      861,  861,  811,  811,  840,  840,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  840,  840,  811,  811,
-      811,  811,  811,  861,  861,  811,  840,  840,  840,  840,
-      840,  840,  840,  840,  840,  840,  811,  811,  811,  811,
-
-      861,  840,  840,  840,  840,  840,  811,  811,  861,  840,
-        0,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811
+      815,    1,  815,    3,  816,  816,  815,    7,  815,    9,
+      815,   11,  815,   13,    1,    1,  815,   17,  817,  817,
+      818,  818,  815,   23,  815,  815,  815,  815,  815,  815,
+      819,  820,  815,  815,  815,  821,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  822,  822,  815,  815,  822,  822,  822,  822,  822,
+      822,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      823,  815,  815,  815,  815,  815,  815,  815,  815,  824,
+      825,  825,  825,  825,  825,  815,  815,  826,  827,  815,
+      815,  815,  815,  828,  815,  829,  815,  815,  815,  815,
+
+      830,  815,  815,  831,  815,  815,  815,  815,  832,  815,
+      833,  815,  815,  815,  815,  834,  835,   43,  836,  836,
+      836,  836,  836,  836,  836,  836,  828,  829,  815,  815,
+      102,  815,  815,  815,  815,  815,  815,  837,  815,  838,
+      815,  815,  839,  815,  815,  815,  840,  840,  840,  840,
+      840,  815,  815,  815,  815,  815,  815,  841,  815,  841,
+      842,  815,  842,  815,  815,  815,  815,  815,  815,  815,
+      843,  815,  815,  815,  815,  815,  815,  815,  815,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  815,  815,  815,  815,
+
+      815,  815,  845,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      846,  847,  848,  847,  847,  847,  847,  847,  847,  847,
+      847,  815,  815,  815,  815,  815,  815,  849,  815,  815,
+      815,  815,  815,  815,  815,  850,  851,  851,  851,  851,
+      851,  815,  815,  852,  852,  815,  815,  815,  828,  815,
+      828,  815,  829,  815,  815,  815,  853,  815,  815,  815,
+      815,  854,  855,  856,  815,  856,  815,  857,  815,  815,
+      815,  815,  815,  815,  815,  858,  859,  860,  860,  860,
+      860,  860,  861,  862,  815,  862,  862,  862,  862,  862,
+
+      862,  862,  862,  815,  815,  863,  815,  863,  815,  864,
+      815,  815,  815,  865,  865,  865,  865,  865,  865,  815,
+      815,  815,  815,  866,  815,  815,  815,  815,  815,  867,
+      815,  867,  867,  867,  867,  815,  815,  815,  815,  815,
+      815,  815,  815,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  815,  815,  815,
+      815,  815,  815,  845,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  848,  868,  869,  847,  847,  847,
+
+      847,  847,  847,  847,  815,  815,  815,  850,  851,  851,
+      851,  851,  815,  815,  853,  815,  815,  815,  815,  815,
+      854,  815,  815,  815,  815,  815,  815,  815,  858,  860,
+      815,  860,  860,  860,  860,  870,  815,  862,  862,  862,
+      862,  862,  862,  862,  815,  815,  865,  865,  865,  865,
+      865,  865,  865,  815,  815,  815,  815,  815,  866,  815,
+      815,  815,  815,  815,  815,  815,  815,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  868,  815,  868,  869,  815,  847,  847,  847,
+      847,  815,  815,  815,  851,  815,  815,  815,  815,  815,
+      870,  862,  862,  862,  862,  815,  815,  865,  865,  865,
+      865,  865,  865,  815,  815,  815,  815,  815,  815,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  871,  847,  847,  815,  815,  815,  851,  862,
+
+      862,  865,  865,  865,  865,  865,  815,  815,  815,  815,
+      815,  815,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      871,  815,  871,  847,  847,  815,  815,  851,  862,  862,
+      865,  865,  865,  815,  815,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  865,  865,  865,  815,
+
+      815,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  865,  865,  865,  815,  815,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  844,  844,  844,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  865,  865,  815,  815,  844,  844,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+      844,  844,  815,  815,  815,  815,  815,  865,  865,  815,
+      844,  844,  844,  844,  844,  844,  844,  844,  844,  844,
+
+      815,  815,  815,  815,  865,  844,  844,  844,  844,  844,
+      815,  815,  865,  844,    0,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815
     } ;
 
-static yyconst flex_int16_t yy_nxt[2335] =
+static yyconst flex_int16_t yy_nxt[2347] =
     {   0,
        26,   27,   28,   27,   29,   30,   31,   32,   33,   34,
        35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
@@ -845,7 +847,7 @@
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
        64,   64,   64,   64,   73,   73,   74,   74,  155,  155,
-      162,  155,  163,  164,  162,  165,  163,  166,  167,  810,
+      162,  155,  163,  164,  162,  165,  163,  166,  167,  814,
        75,   75,   76,   77,   78,   77,   79,   76,   76,   76,
        80,   76,   76,   76,   76,   76,   76,   76,   76,   76,
        76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
@@ -886,9 +888,9 @@
 
       119,  119,  121,  119,  122,  119,  119,  123,  119,  124,
       119,  119,  125,  119,  126,  119,  119,  119,   26,   62,
-       26,   63,  127,  221,  197,  156,  169,  128,  809,  172,
+       26,   63,  127,  221,  197,  156,  169,  128,  813,  172,
       223,  129,  198,  129,  130,  127,  131,  132,  132,  132,
-      128,  154,  173,  170,  129,  808,  129,  130,  807,  131,
+      128,  154,  173,  170,  129,  812,  129,  130,  811,  131,
       132,  132,  132,  134,  135,  136,  135,  137,  134,  138,
       134,  139,  134,  134,  140,  134,  134,  134,  141,  142,
       141,  143,  134,  144,  145,  145,  145,  146,  134,  134,
@@ -911,184 +913,185 @@
       361,  275,  364,  221,  200,  201,  224,  224,  224,  224,
       223,  202,  556,  241,  203,  221,  365,  221,  242,  243,
       200,  221,  223,  201,  223,  221,  239,  239,  223,  239,
-      806,  202,  223,  225,  244,  244,  805,  244,  276,  203,
+      810,  202,  223,  225,  244,  244,  809,  244,  276,  203,
       204,  235,  352,  252,  252,  205,  252,  353,  206,  207,
-      208,  209,  210,  211,  804,  226,  212,  221,  213,  214,
+      208,  209,  210,  211,  808,  226,  212,  221,  213,  214,
       555,  227,  228,  230,  223,  231,  257,  257,  262,  257,
       262,  556,  262,  262,  264,  260,  265,  265,  265,  265,
 
       266,  266,  266,  266,  268,  307,  265,  265,  265,  265,
       480,  268,  481,  265,  265,  265,  265,  269,  270,  281,
-      281,  281,  281,  803,  271,  270,  277,  272,  277,  802,
+      281,  281,  281,  807,  271,  270,  277,  272,  277,  806,
       277,  277,  261,  269,  221,  279,  270,  280,  280,  280,
       280,  223,  308,  270,  271,  282,  295,  280,  280,  280,
-      280,  801,  272,  282,  221,  280,  280,  280,  280,  284,
+      280,  805,  272,  282,  221,  280,  280,  280,  280,  284,
       289,  223,  290,  221,  291,  292,  283,  284,  304,  304,
       223,  304,  221,  285,  159,  295,  286,  284,  336,  223,
       336,  336,  283,  221,  295,  284,  296,  296,  296,  296,
       223,  221,  309,  285,  309,  295,  309,  309,  223,  370,
 
-      370,  286,  221,  295,  297,  379,  298,  800,  221,  223,
+      370,  286,  221,  295,  297,  379,  298,  804,  221,  223,
       221,  160,  299,  380,  295,  223,  337,  223,  337,  337,
       295,  264,  295,  265,  265,  265,  265,  266,  266,  266,
       266,  268,  386,  265,  265,  265,  265,  387,  300,  155,
-      155,  301,  155,  799,  311,  270,  312,  312,  312,  312,
-      303,  798,  325,  797,  302,  313,  313,  313,  313,  796,
+      155,  301,  155,  803,  311,  270,  312,  312,  312,  312,
+      303,  802,  325,  801,  302,  313,  313,  313,  313,  800,
       326,  327,  328,  270,  320,  329,  312,  312,  312,  312,
       332,  332,  332,  332,  331,  373,  373,  373,  322,  333,
       333,  333,  333,  331,  155,  155,  315,  155,  377,  378,
-      316,  317,  318,  795,  319,  320,  322,  312,  312,  312,
+      316,  317,  318,  799,  319,  320,  322,  312,  312,  312,
 
-      312,  334,  334,  334,  334,  331,  794,  389,  321,  322,
-      335,  335,  335,  335,  331,  323,  390,  793,  324,  338,
+      312,  334,  334,  334,  334,  331,  798,  389,  321,  322,
+      335,  335,  335,  335,  331,  323,  390,  797,  324,  338,
       338,  338,  338,  585,  321,  393,  394,  322,  339,  339,
       339,  339,  586,  221,  221,  323,  340,  340,  340,  340,
-      223,  223,  792,  324,  341,  341,  341,  341,  178,  178,
-      178,  178,  199,  791,  175,  175,  175,  175,  178,  178,
+      223,  223,  796,  324,  341,  341,  341,  341,  178,  178,
+      178,  178,  199,  795,  175,  175,  175,  175,  178,  178,
       178,  178,  221,  355,  381,  221,  201,  356,  382,  223,
       343,  357,  223,  369,  369,  369,  369,  449,  260,  398,
-      399,  450,  383,  221,  201,  343,  790,  371,  343,  371,
-      223,  221,  372,  372,  372,  372,  402,  789,  223,  744,
+      399,  450,  383,  221,  201,  343,  794,  371,  343,  371,
+      223,  221,  372,  372,  372,  372,  402,  793,  223,  748,
 
-      404,  221,  788,  343,  224,  224,  224,  224,  223,  236,
-      236,  745,  236,  236,  236,  261,  236,  239,  239,  787,
-      239,  400,  401,  239,  239,  786,  239,  244,  244,  785,
-      244,  244,  244,  784,  244,  403,  252,  252,  759,  252,
-      252,  252,  783,  252,  257,  257,  275,  257,  257,  257,
-      760,  257,  413,  413,  413,  413,  266,  266,  266,  266,
-      268,  782,  265,  265,  265,  265,  266,  266,  266,  266,
-      416,  416,  416,  416,  270,  417,  417,  781,  414,  418,
-      780,  418,  414,  276,  419,  419,  419,  419,  420,  420,
-      420,  779,  270,  425,  425,  307,  414,  428,  428,  428,
+      404,  221,  792,  343,  224,  224,  224,  224,  223,  236,
+      236,  749,  236,  236,  236,  261,  236,  239,  239,  791,
+      239,  400,  401,  239,  239,  790,  239,  244,  244,  789,
+      244,  244,  244,  788,  244,  403,  252,  252,  763,  252,
+      252,  252,  787,  252,  257,  257,  275,  257,  257,  257,
+      764,  257,  413,  413,  413,  413,  266,  266,  266,  266,
+      268,  786,  265,  265,  265,  265,  266,  266,  266,  266,
+      416,  416,  416,  416,  270,  417,  417,  785,  414,  418,
+      784,  418,  414,  276,  419,  419,  419,  419,  420,  420,
+      420,  783,  270,  425,  425,  307,  414,  428,  428,  428,
 
       414,  422,  422,  422,  422,  281,  281,  281,  281,  282,
-      778,  280,  280,  280,  280,  281,  281,  281,  281,  424,
-      424,  424,  424,  284,  455,  455,  777,  423,  426,  776,
+      782,  280,  280,  280,  280,  281,  281,  281,  281,  424,
+      424,  424,  424,  284,  455,  455,  781,  423,  426,  780,
       426,  423,  308,  427,  427,  427,  427,  432,  432,  432,
       432,  284,  458,  458,  458,  423,  431,  461,  462,  423,
       433,  433,  433,  433,  434,  434,  434,  434,  337,  431,
-      337,  337,  221,  431,  435,  435,  435,  435,  775,  223,
+      337,  337,  221,  431,  435,  435,  435,  435,  779,  223,
       370,  370,  221,  431,  295,  296,  296,  296,  296,  223,
       221,  221,  221,  221,  295,  417,  417,  223,  223,  223,
-      223,  774,  295,  295,  295,  295,  221,  221,  221,  304,
+      223,  778,  295,  295,  295,  295,  221,  221,  221,  304,
 
-      304,  773,  304,  223,  223,  223,  221,  772,  295,  295,
-      295,  304,  304,  223,  304,  445,  445,  445,  445,  771,
+      304,  777,  304,  223,  223,  223,  221,  776,  295,  295,
+      295,  304,  304,  223,  304,  445,  445,  445,  445,  775,
       514,  440,  441,  373,  373,  373,  438,  442,  439,  313,
       313,  313,  313,  425,  425,  320,  444,  312,  312,  312,
-      312,  443,  313,  313,  313,  313,  770,  518,  495,  322,
-      454,  454,  454,  454,  446,  769,  496,  515,  456,  497,
-      456,  768,  446,  457,  457,  457,  457,  322,  338,  338,
+      312,  443,  313,  313,  313,  313,  774,  518,  495,  322,
+      454,  454,  454,  454,  446,  773,  496,  515,  456,  497,
+      456,  772,  446,  457,  457,  457,  457,  322,  338,  338,
       338,  338,  446,  332,  332,  332,  332,  331,  455,  455,
       446,  333,  333,  333,  333,  331,  334,  334,  334,  334,
       331,  335,  335,  335,  335,  331,  339,  339,  339,  339,
 
-      340,  340,  340,  340,  341,  341,  341,  341,  466,  767,
-      466,  766,  514,  467,  467,  467,  467,  369,  369,  369,
+      340,  340,  340,  340,  341,  341,  341,  341,  466,  771,
+      466,  770,  514,  467,  467,  467,  467,  369,  369,  369,
       369,  372,  372,  372,  372,  372,  372,  372,  372,  343,
-      221,  221,  221,  221,  221,  221,  630,  223,  223,  223,
+      221,  221,  221,  221,  221,  221,  631,  223,  223,  223,
       223,  223,  223,  413,  413,  413,  413,  343,  526,  515,
-      526,  631,  765,  527,  527,  527,  527,  632,  416,  416,
-      416,  416,  419,  419,  419,  419,  764,  763,  521,  519,
+      526,  632,  769,  527,  527,  527,  527,  633,  416,  416,
+      416,  416,  419,  419,  419,  419,  768,  767,  521,  519,
       414,  520,  419,  419,  419,  419,  420,  420,  420,  422,
-      422,  422,  422,  762,  528,  761,  528,  758,  414,  529,
+      422,  422,  422,  766,  528,  765,  528,  762,  414,  529,
       529,  529,  529,  424,  424,  424,  424,  427,  427,  427,
 
       427,  427,  427,  427,  427,  423,  428,  428,  428,  432,
-      432,  432,  432,  433,  433,  433,  433,  757,  431,  458,
+      432,  432,  432,  433,  433,  433,  433,  761,  431,  458,
       458,  458,  431,  423,  434,  434,  434,  434,  435,  435,
       435,  435,  221,  431,  221,  221,  221,  431,  221,  223,
-      756,  223,  223,  223,  295,  223,  295,  295,  295,  221,
-      295,  221,  445,  445,  445,  445,  223,  221,  223,  755,
+      760,  223,  223,  223,  295,  223,  295,  295,  295,  221,
+      295,  221,  445,  445,  445,  445,  223,  221,  223,  759,
       536,  295,  536,  295,  223,  537,  537,  537,  537,  454,
-      454,  454,  454,  532,  533,  457,  457,  457,  457,  754,
-      753,  446,  752,  751,  535,  750,  534,  457,  457,  457,
+      454,  454,  454,  532,  533,  457,  457,  457,  457,  758,
+      757,  446,  756,  755,  535,  754,  534,  457,  457,  457,
       457,  467,  467,  467,  467,  467,  467,  467,  467,  446,
 
       221,  221,  221,  527,  527,  527,  527,  223,  223,  223,
       527,  527,  527,  527,  529,  529,  529,  529,  529,  529,
-      529,  529,  221,  221,  221,  221,  221,  616,  749,  223,
-      223,  223,  223,  223,  295,  295,  295,  295,  748,  747,
-      617,  593,  537,  537,  537,  537,  618,  594,  537,  537,
-      537,  537,  221,  221,  746,  221,  221,  743,  700,  223,
-      223,  650,  223,  223,  599,  295,  221,  295,  221,  221,
-      600,  701,  710,  223,  742,  223,  223,  702,  741,  711,
-      295,  295,  740,  739,  738,  737,  736,  735,  655,  734,
-      733,  732,  731,  730,  729,  728,  727,  651,  726,  725,
+      529,  529,  221,  221,  221,  221,  652,  617,  652,  223,
+      223,  223,  223,  753,  295,  295,  295,  295,  752,  751,
+      618,  594,  537,  537,  537,  537,  619,  595,  537,  537,
+      537,  537,  221,  221,  221,  221,  750,  747,  746,  223,
+      223,  223,  223,  653,  600,  653,  295,  295,  221,  221,
+      601,  221,  221,  704,  714,  223,  223,  745,  223,  223,
+      744,  715,  743,  295,  295,  742,  705,  654,  741,  659,
+      740,  739,  706,  738,  737,  736,  735,  734,  655,  733,
 
-      656,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+      660,   72,   72,   72,   72,   72,   72,   72,   72,   72,
        64,   64,   64,   64,   64,   64,   64,   64,   64,  133,
-      133,  133,  133,  133,  133,  133,  133,  133,  158,  724,
+      133,  133,  133,  133,  133,  133,  133,  133,  158,  732,
       158,  158,  158,  158,  158,  158,  158,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  171,  723,  171,  171,
-      171,  171,  171,  171,  171,  222,  222,  222,  722,  222,
-      222,  238,  721,  720,  238,  238,  246,  246,  247,  719,
-      718,  247,  247,  254,  254,  255,  255,  717,  255,  255,
-      259,  716,  259,  259,  259,  259,  259,  259,  259,  263,
-      715,  263,  263,  263,  263,  263,  263,  263,  267,  714,
-
-      713,  267,  267,  273,  712,  709,  273,  273,  274,  708,
-      274,  274,  274,  274,  274,  274,  274,  278,  707,  278,
-      278,  278,  278,  278,  278,  278,  287,  706,  705,  287,
+      161,  161,  161,  161,  161,  161,  171,  731,  171,  171,
+      171,  171,  171,  171,  171,  222,  222,  222,  730,  222,
+      222,  238,  729,  728,  238,  238,  246,  246,  247,  727,
+      726,  247,  247,  254,  254,  255,  255,  725,  255,  255,
+      259,  724,  259,  259,  259,  259,  259,  259,  259,  263,
+      723,  263,  263,  263,  263,  263,  263,  263,  267,  722,
+
+      721,  267,  267,  273,  720,  719,  273,  273,  274,  718,
+      274,  274,  274,  274,  274,  274,  274,  278,  717,  278,
+      278,  278,  278,  278,  278,  278,  287,  716,  713,  287,
       287,  288,  288,  294,  294,  294,  294,  294,  294,  306,
-      704,  306,  306,  306,  306,  306,  306,  306,  310,  703,
-      310,  310,  310,  310,  310,  310,  310,  314,  699,  698,
-      314,  314,  330,  330,  697,  330,  330,  158,  696,  158,
+      712,  306,  306,  306,  306,  306,  306,  306,  310,  711,
+      310,  310,  310,  310,  310,  310,  310,  314,  710,  709,
+      314,  314,  330,  330,  708,  330,  330,  158,  707,  158,
       158,  158,  158,  158,  158,  158,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  171,  695,  171,  171,  171,
-      171,  171,  171,  171,  344,  694,  693,  344,  344,  374,
+      161,  161,  161,  161,  161,  171,  703,  171,  171,  171,
+      171,  171,  171,  171,  344,  702,  701,  344,  344,  374,
 
-      692,  691,  374,  221,  221,  221,  690,  221,  221,  222,
-      222,  222,  689,  222,  222,  397,  688,  687,  686,  685,
-      397,  397,  238,  684,  683,  238,  238,  408,  682,  681,
-      408,  408,  247,  680,  679,  247,  247,  255,  255,  678,
-      255,  255,  415,  677,  676,  415,  415,  421,  675,  674,
-      421,  273,  673,  672,  273,  273,  274,  671,  274,  274,
-      274,  274,  274,  274,  274,  278,  670,  278,  278,  278,
-      278,  278,  278,  278,  429,  669,  668,  429,  287,  667,
-      666,  287,  287,  430,  665,  430,  430,  430,  436,  436,
-      294,  294,  294,  294,  294,  294,  306,  664,  306,  306,
-
-      306,  306,  306,  306,  306,  310,  663,  310,  310,  310,
-      310,  310,  310,  310,  447,  662,  661,  447,  447,  459,
-      660,  659,  459,  330,  330,  658,  330,  330,  513,  657,
+      700,  699,  374,  221,  221,  221,  698,  221,  221,  222,
+      222,  222,  697,  222,  222,  397,  696,  695,  694,  693,
+      397,  397,  238,  692,  691,  238,  238,  408,  690,  689,
+      408,  408,  247,  688,  687,  247,  247,  255,  255,  686,
+      255,  255,  415,  685,  684,  415,  415,  421,  683,  682,
+      421,  273,  681,  680,  273,  273,  274,  679,  274,  274,
+      274,  274,  274,  274,  274,  278,  678,  278,  278,  278,
+      278,  278,  278,  278,  429,  677,  676,  429,  287,  675,
+      674,  287,  287,  430,  673,  430,  430,  430,  436,  436,
+      294,  294,  294,  294,  294,  294,  306,  672,  306,  306,
+
+      306,  306,  306,  306,  306,  310,  671,  310,  310,  310,
+      310,  310,  310,  310,  447,  670,  669,  447,  447,  459,
+      668,  667,  459,  330,  330,  666,  330,  330,  513,  665,
       513,  513,  513,  513,  513,  513,  513,  516,  516,  516,
-      654,  516,  516,  531,  653,  652,  531,  531,  649,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
-      637,  636,  635,  634,  633,  629,  628,  627,  626,  625,
-      624,  623,  622,  621,  620,  619,  615,  614,  613,  612,
-      611,  610,  609,  608,  607,  606,  605,  604,  603,  602,
-      601,  598,  597,  596,  595,  396,  517,  592,  591,  590,
-
-      589,  588,  587,  584,  583,  582,  581,  580,  579,  578,
-      577,  576,  575,  574,  573,  572,  571,  570,  569,  568,
-      567,  566,  565,  564,  563,  562,  561,  560,  559,  558,
-      557,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-      545,  544,  543,  542,  541,  540,  539,  538,  530,  431,
-      525,  524,  523,  522,  517,  396,  512,  511,  510,  509,
-      508,  507,  506,  505,  504,  503,  502,  501,  500,  499,
-      498,  494,  493,  492,  491,  490,  489,  488,  487,  486,
-      485,  484,  483,  482,  479,  478,  477,  476,  475,  474,
-      473,  472,  471,  470,  469,  468,  331,  465,  464,  463,
-
-      460,  453,  452,  451,  448,  307,  437,  431,  275,  260,
-      256,  256,  412,  411,  410,  409,  407,  406,  405,  396,
-      395,  392,  391,  388,  376,  375,  368,  367,  366,  363,
-      362,  354,  351,  350,  347,  346,  345,  342,  159,  331,
-      307,  305,  260,  293,  275,  260,  258,  256,  253,  251,
-      250,  249,  248,  245,  240,  237,  159,  168,  157,  154,
-      811,   25,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811
+      664,  516,  516,  531,  663,  662,  531,  531,  651,  661,
+      651,  651,  651,  651,  651,  651,  651,  658,  657,  656,
+      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
+      640,  639,  638,  637,  636,  635,  634,  630,  629,  628,
+      627,  626,  625,  624,  623,  622,  621,  620,  616,  615,
+      614,  613,  612,  611,  610,  609,  608,  607,  606,  605,
+
+      604,  603,  602,  599,  598,  597,  596,  593,  517,  592,
+      591,  590,  589,  588,  587,  584,  583,  582,  581,  580,
+      579,  578,  577,  576,  575,  574,  573,  572,  571,  570,
+      569,  568,  567,  566,  565,  564,  563,  562,  561,  560,
+      559,  558,  557,  554,  553,  552,  551,  550,  549,  548,
+      547,  546,  545,  544,  543,  542,  541,  540,  539,  538,
+      530,  431,  525,  524,  523,  522,  517,  396,  512,  511,
+      510,  509,  508,  507,  506,  505,  504,  503,  502,  501,
+      500,  499,  498,  494,  493,  492,  491,  490,  489,  488,
+      487,  486,  485,  484,  483,  482,  479,  478,  477,  476,
+
+      475,  474,  473,  472,  471,  470,  469,  468,  331,  465,
+      464,  463,  460,  453,  452,  451,  448,  307,  437,  431,
+      275,  260,  256,  256,  412,  411,  410,  409,  407,  406,
+      405,  396,  395,  392,  391,  388,  376,  375,  368,  367,
+      366,  363,  362,  354,  351,  350,  347,  346,  345,  342,
+      159,  331,  307,  305,  260,  293,  275,  260,  258,  256,
+      253,  251,  250,  249,  248,  245,  240,  237,  159,  168,
+      157,  154,  815,   25,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815
     } ;
 
-static yyconst flex_int16_t yy_chk[2335] =
+static yyconst flex_int16_t yy_chk[2347] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1106,7 +1109,7 @@
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    5,    6,    5,    6,   28,   28,
-       32,   28,   32,   33,  161,   33,  161,   33,   33,  802,
+       32,   28,   32,   33,  161,   33,  161,   33,   33,  806,
         5,    6,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
@@ -1147,9 +1150,9 @@
 
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
-       17,   17,   19,   52,   44,   29,   35,   19,  801,   39,
+       17,   17,   19,   52,   44,   29,   35,   19,  805,   39,
        52,   19,   44,   19,   19,   20,   19,   19,   19,   19,
-       20,   29,   39,   35,   20,  800,   20,   20,  799,   20,
+       20,   29,   39,   35,   20,  804,   20,   20,  803,   20,
        20,   20,   20,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
@@ -1163,194 +1166,195 @@
        50,   50,  190,   42,   51,   51,  190,   59,   66,   66,
        94,   66,  209,   46,   59,   46,   46,   46,   46,  163,
       184,  163,   31,   43,   43,   43,   43,   46,  209,   62,
-       43,  795,  184,   43,   43,   43,   43,   43,   43,   43,
+       43,  799,  184,   43,   43,   43,   43,   43,   43,   43,
        43,   43,   43,   43,   43,   46,   59,   94,   43,   43,
        43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
 
        43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
        43,   45,   56,   45,   45,   45,   45,   63,  191,   56,
       191,  109,  194,   53,   45,   45,   53,   53,   53,   53,
-       53,   45,  794,   75,   45,   58,  194,   60,   75,   75,
+       53,   45,  798,   75,   45,   58,  194,   60,   75,   75,
        45,   57,   58,   45,   60,   61,   73,   73,   57,   73,
-      793,   45,   61,   56,   78,   78,  792,   78,  109,   45,
+      797,   45,   61,   56,   78,   78,  796,   78,  109,   45,
        47,   63,  187,   86,   86,   47,   86,  187,   47,   47,
-       47,   47,   47,   47,  791,   57,   47,  222,   47,   47,
+       47,   47,   47,   47,  795,   57,   47,  222,   47,   47,
       473,   57,   58,   60,  222,   61,   92,   92,   95,   92,
        95,  473,   95,   95,   99,  127,   99,   99,   99,   99,
 
       101,  101,  101,  101,  102,  138,  102,  102,  102,  102,
       357,  103,  357,  103,  103,  103,  103,  102,  102,  113,
-      113,  113,  113,  789,  102,  103,  110,  102,  110,  788,
+      113,  113,  113,  793,  102,  103,  110,  102,  110,  792,
       110,  110,  127,  102,  119,  112,  102,  112,  112,  112,
       112,  119,  138,  103,  102,  115,  119,  115,  115,  115,
-      115,  784,  102,  114,  226,  114,  114,  114,  114,  115,
+      115,  788,  102,  114,  226,  114,  114,  114,  114,  115,
       117,  226,  117,  121,  117,  117,  114,  114,  136,  136,
       121,  136,  122,  114,  158,  121,  114,  115,  154,  122,
       154,  154,  114,  120,  122,  114,  120,  120,  120,  120,
       120,  123,  139,  114,  139,  120,  139,  139,  123,  200,
 
-      200,  114,  124,  123,  121,  207,  122,  783,  125,  124,
+      200,  114,  124,  123,  121,  207,  122,  787,  125,  124,
       126,  158,  122,  207,  124,  125,  162,  126,  162,  162,
       125,  129,  126,  129,  129,  129,  129,  130,  130,  130,
       130,  132,  210,  132,  132,  132,  132,  210,  123,  155,
-      155,  124,  155,  782,  141,  132,  141,  141,  141,  141,
-      126,  781,  146,  780,  125,  143,  143,  143,  143,  777,
+      155,  124,  155,  786,  141,  132,  141,  141,  141,  141,
+      126,  785,  146,  784,  125,  143,  143,  143,  143,  781,
       146,  146,  146,  132,  145,  146,  145,  145,  145,  145,
       148,  148,  148,  148,  148,  202,  202,  202,  145,  149,
       149,  149,  149,  149,  156,  156,  143,  156,  206,  206,
-      143,  143,  143,  774,  143,  144,  145,  144,  144,  144,
+      143,  143,  143,  778,  143,  144,  145,  144,  144,  144,
 
-      144,  150,  150,  150,  150,  150,  773,  212,  144,  144,
-      151,  151,  151,  151,  151,  144,  212,  772,  144,  164,
+      144,  150,  150,  150,  150,  150,  777,  212,  144,  144,
+      151,  151,  151,  151,  151,  144,  212,  776,  144,  164,
       164,  164,  164,  505,  144,  220,  220,  144,  165,  165,
       165,  165,  505,  225,  227,  144,  166,  166,  166,  166,
-      225,  227,  771,  144,  167,  167,  167,  167,  174,  174,
-      174,  174,  175,  770,  175,  175,  175,  175,  178,  178,
+      225,  227,  775,  144,  167,  167,  167,  167,  174,  174,
+      174,  174,  175,  774,  175,  175,  175,  175,  178,  178,
       178,  178,  231,  189,  208,  229,  175,  189,  208,  231,
       178,  189,  229,  199,  199,  199,  199,  316,  259,  225,
-      227,  316,  208,  228,  175,  199,  768,  201,  178,  201,
-      228,  230,  201,  201,  201,  201,  229,  767,  230,  711,
+      227,  316,  208,  228,  175,  199,  772,  201,  178,  201,
+      228,  230,  201,  201,  201,  201,  229,  771,  230,  715,
 
-      231,  224,  766,  199,  224,  224,  224,  224,  224,  236,
-      236,  711,  236,  237,  237,  259,  237,  239,  239,  765,
-      239,  228,  228,  240,  240,  763,  240,  244,  244,  762,
-      244,  245,  245,  761,  245,  230,  252,  252,  727,  252,
-      253,  253,  760,  253,  257,  257,  274,  257,  258,  258,
-      727,  258,  262,  262,  262,  262,  264,  264,  264,  264,
-      265,  759,  265,  265,  265,  265,  266,  266,  266,  266,
-      268,  268,  268,  268,  265,  269,  269,  758,  266,  270,
-      753,  270,  268,  274,  270,  270,  270,  270,  271,  271,
-      271,  752,  265,  283,  283,  306,  266,  285,  285,  285,
+      231,  224,  770,  199,  224,  224,  224,  224,  224,  236,
+      236,  715,  236,  237,  237,  259,  237,  239,  239,  769,
+      239,  228,  228,  240,  240,  767,  240,  244,  244,  766,
+      244,  245,  245,  765,  245,  230,  252,  252,  731,  252,
+      253,  253,  764,  253,  257,  257,  274,  257,  258,  258,
+      731,  258,  262,  262,  262,  262,  264,  264,  264,  264,
+      265,  763,  265,  265,  265,  265,  266,  266,  266,  266,
+      268,  268,  268,  268,  265,  269,  269,  762,  266,  270,
+      757,  270,  268,  274,  270,  270,  270,  270,  271,  271,
+      271,  756,  265,  283,  283,  306,  266,  285,  285,  285,
 
       268,  277,  277,  277,  277,  279,  279,  279,  279,  280,
-      750,  280,  280,  280,  280,  281,  281,  281,  281,  282,
-      282,  282,  282,  280,  321,  321,  749,  281,  284,  747,
+      754,  280,  280,  280,  280,  281,  281,  281,  281,  282,
+      282,  282,  282,  280,  321,  321,  753,  281,  284,  751,
       284,  282,  306,  284,  284,  284,  284,  289,  289,  289,
       289,  280,  323,  323,  323,  281,  289,  326,  326,  282,
       290,  290,  290,  290,  291,  291,  291,  291,  337,  290,
-      337,  337,  294,  291,  292,  292,  292,  292,  746,  294,
+      337,  337,  294,  291,  292,  292,  292,  292,  750,  294,
       370,  370,  296,  292,  294,  296,  296,  296,  296,  296,
       297,  298,  299,  300,  296,  417,  417,  297,  298,  299,
-      300,  745,  297,  298,  299,  300,  301,  302,  303,  304,
+      300,  749,  297,  298,  299,  300,  301,  302,  303,  304,
 
-      304,  744,  304,  301,  302,  303,  398,  743,  301,  302,
-      303,  305,  305,  398,  305,  309,  309,  309,  309,  741,
+      304,  748,  304,  301,  302,  303,  398,  747,  301,  302,
+      303,  305,  305,  398,  305,  309,  309,  309,  309,  745,
       396,  300,  300,  373,  373,  373,  297,  301,  299,  311,
       311,  311,  311,  425,  425,  312,  303,  312,  312,  312,
-      312,  302,  313,  313,  313,  313,  740,  398,  378,  312,
-      320,  320,  320,  320,  313,  739,  378,  396,  322,  378,
-      322,  738,  320,  322,  322,  322,  322,  312,  338,  338,
+      312,  302,  313,  313,  313,  313,  744,  398,  378,  312,
+      320,  320,  320,  320,  313,  743,  378,  396,  322,  378,
+      322,  742,  320,  322,  322,  322,  322,  312,  338,  338,
       338,  338,  313,  332,  332,  332,  332,  332,  455,  455,
       320,  333,  333,  333,  333,  333,  334,  334,  334,  334,
       334,  335,  335,  335,  335,  335,  339,  339,  339,  339,
 
-      340,  340,  340,  340,  341,  341,  341,  341,  343,  736,
-      343,  735,  513,  343,  343,  343,  343,  369,  369,  369,
+      340,  340,  340,  340,  341,  341,  341,  341,  343,  740,
+      343,  739,  513,  343,  343,  343,  343,  369,  369,  369,
       369,  371,  371,  371,  371,  372,  372,  372,  372,  369,
       399,  400,  401,  402,  403,  404,  570,  399,  400,  401,
       402,  403,  404,  413,  413,  413,  413,  369,  414,  513,
-      414,  570,  734,  414,  414,  414,  414,  570,  416,  416,
-      416,  416,  418,  418,  418,  418,  732,  731,  404,  400,
+      414,  570,  738,  414,  414,  414,  414,  570,  416,  416,
+      416,  416,  418,  418,  418,  418,  736,  735,  404,  400,
       416,  403,  419,  419,  419,  419,  420,  420,  420,  422,
-      422,  422,  422,  729,  423,  728,  423,  726,  416,  423,
+      422,  422,  422,  733,  423,  732,  423,  730,  416,  423,
       423,  423,  423,  424,  424,  424,  424,  426,  426,  426,
 
       426,  427,  427,  427,  427,  424,  428,  428,  428,  432,
-      432,  432,  432,  433,  433,  433,  433,  725,  432,  458,
+      432,  432,  432,  433,  433,  433,  433,  729,  432,  458,
       458,  458,  433,  424,  434,  434,  434,  434,  435,  435,
       435,  435,  438,  434,  439,  441,  440,  435,  442,  438,
-      724,  439,  441,  440,  438,  442,  439,  441,  440,  443,
-      442,  444,  445,  445,  445,  445,  443,  518,  444,  723,
+      728,  439,  441,  440,  438,  442,  439,  441,  440,  443,
+      442,  444,  445,  445,  445,  445,  443,  518,  444,  727,
       446,  443,  446,  444,  518,  446,  446,  446,  446,  454,
-      454,  454,  454,  438,  440,  456,  456,  456,  456,  721,
-      720,  454,  719,  718,  444,  717,  443,  457,  457,  457,
+      454,  454,  454,  438,  440,  456,  456,  456,  456,  725,
+      724,  454,  723,  722,  444,  721,  443,  457,  457,  457,
       457,  466,  466,  466,  466,  467,  467,  467,  467,  454,
 
       519,  520,  521,  526,  526,  526,  526,  519,  520,  521,
       527,  527,  527,  527,  528,  528,  528,  528,  529,  529,
-      529,  529,  532,  533,  534,  535,  593,  555,  716,  532,
-      533,  534,  535,  593,  532,  533,  534,  535,  714,  713,
+      529,  529,  532,  533,  534,  535,  593,  555,  651,  532,
+      533,  534,  535,  720,  532,  533,  534,  535,  718,  717,
       555,  520,  536,  536,  536,  536,  555,  521,  537,  537,
-      537,  537,  594,  599,  712,  600,  650,  710,  664,  594,
-      599,  593,  600,  650,  534,  599,  651,  600,  655,  656,
-      535,  664,  672,  651,  708,  655,  656,  664,  707,  672,
-      655,  656,  706,  705,  704,  703,  702,  701,  599,  700,
-      699,  697,  696,  695,  694,  693,  692,  594,  690,  688,
-
-      600,  812,  812,  812,  812,  812,  812,  812,  812,  812,
-      813,  813,  813,  813,  813,  813,  813,  813,  813,  814,
-      814,  814,  814,  814,  814,  814,  814,  814,  815,  687,
-      815,  815,  815,  815,  815,  815,  815,  816,  816,  816,
-      816,  816,  816,  816,  816,  816,  817,  686,  817,  817,
-      817,  817,  817,  817,  817,  818,  818,  818,  685,  818,
-      818,  819,  683,  682,  819,  819,  820,  820,  821,  681,
-      680,  821,  821,  822,  822,  823,  823,  679,  823,  823,
-      824,  678,  824,  824,  824,  824,  824,  824,  824,  825,
-      677,  825,  825,  825,  825,  825,  825,  825,  826,  675,
-
-      674,  826,  826,  827,  673,  671,  827,  827,  828,  670,
-      828,  828,  828,  828,  828,  828,  828,  829,  669,  829,
-      829,  829,  829,  829,  829,  829,  830,  668,  667,  830,
-      830,  831,  831,  832,  832,  832,  832,  832,  832,  833,
-      666,  833,  833,  833,  833,  833,  833,  833,  834,  665,
-      834,  834,  834,  834,  834,  834,  834,  835,  663,  662,
-      835,  835,  836,  836,  661,  836,  836,  837,  660,  837,
-      837,  837,  837,  837,  837,  837,  838,  838,  838,  838,
-      838,  838,  838,  838,  838,  839,  659,  839,  839,  839,
-      839,  839,  839,  839,  840,  658,  657,  840,  840,  841,
-
-      653,  649,  841,  842,  842,  842,  648,  842,  842,  843,
-      843,  843,  646,  843,  843,  844,  645,  643,  642,  641,
-      844,  844,  845,  638,  637,  845,  845,  846,  636,  635,
-      846,  846,  847,  633,  632,  847,  847,  848,  848,  631,
-      848,  848,  849,  630,  629,  849,  849,  850,  627,  626,
-      850,  851,  625,  624,  851,  851,  852,  622,  852,  852,
-      852,  852,  852,  852,  852,  853,  621,  853,  853,  853,
-      853,  853,  853,  853,  854,  620,  619,  854,  855,  618,
-      617,  855,  855,  856,  616,  856,  856,  856,  857,  857,
-      858,  858,  858,  858,  858,  858,  859,  614,  859,  859,
-
-      859,  859,  859,  859,  859,  860,  613,  860,  860,  860,
-      860,  860,  860,  860,  861,  612,  611,  861,  861,  862,
-      607,  605,  862,  863,  863,  604,  863,  863,  864,  603,
-      864,  864,  864,  864,  864,  864,  864,  865,  865,  865,
-      598,  865,  865,  866,  597,  596,  866,  866,  592,  591,
-      590,  589,  588,  587,  586,  585,  584,  583,  582,  581,
-      578,  577,  575,  572,  571,  569,  568,  567,  566,  565,
-      564,  563,  562,  560,  559,  558,  554,  552,  551,  550,
-      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
-      538,  525,  524,  523,  522,  517,  516,  511,  510,  509,
-
-      508,  507,  506,  504,  503,  502,  501,  500,  499,  497,
-      496,  495,  494,  493,  492,  491,  490,  488,  487,  486,
-      485,  484,  483,  482,  481,  480,  479,  477,  476,  475,
-      474,  472,  471,  470,  469,  468,  465,  464,  463,  462,
-      461,  460,  453,  452,  451,  450,  449,  448,  431,  430,
-      412,  407,  406,  405,  397,  395,  394,  392,  391,  390,
-      389,  388,  387,  386,  385,  384,  383,  382,  381,  380,
-      379,  377,  376,  375,  367,  366,  365,  364,  363,  362,
-      361,  360,  359,  358,  356,  355,  354,  353,  352,  351,
-      350,  349,  348,  347,  346,  345,  330,  329,  328,  327,
-
-      325,  319,  318,  317,  315,  310,  295,  288,  278,  263,
-      255,  254,  251,  250,  249,  248,  243,  242,  241,  223,
-      221,  214,  213,  211,  205,  204,  197,  196,  195,  193,
-      192,  188,  186,  185,  183,  182,  181,  172,  171,  147,
-      140,  137,  128,  118,  111,   96,   93,   89,   87,   85,
-       84,   83,   82,   79,   74,   67,   36,   34,   30,   27,
-       25,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
-      811,  811,  811,  811
+      537,  537,  594,  595,  600,  601,  716,  714,  712,  594,
+      595,  600,  601,  593,  534,  651,  600,  601,  654,  655,
+      535,  659,  660,  668,  676,  654,  655,  711,  659,  660,
+      710,  676,  709,  659,  660,  708,  668,  594,  707,  600,
+      706,  705,  668,  704,  703,  701,  700,  699,  595,  698,
+
+      601,  816,  816,  816,  816,  816,  816,  816,  816,  816,
+      817,  817,  817,  817,  817,  817,  817,  817,  817,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  819,  697,
+      819,  819,  819,  819,  819,  819,  819,  820,  820,  820,
+      820,  820,  820,  820,  820,  820,  821,  696,  821,  821,
+      821,  821,  821,  821,  821,  822,  822,  822,  694,  822,
+      822,  823,  692,  691,  823,  823,  824,  824,  825,  690,
+      689,  825,  825,  826,  826,  827,  827,  687,  827,  827,
+      828,  686,  828,  828,  828,  828,  828,  828,  828,  829,
+      685,  829,  829,  829,  829,  829,  829,  829,  830,  684,
+
+      683,  830,  830,  831,  682,  681,  831,  831,  832,  679,
+      832,  832,  832,  832,  832,  832,  832,  833,  678,  833,
+      833,  833,  833,  833,  833,  833,  834,  677,  675,  834,
+      834,  835,  835,  836,  836,  836,  836,  836,  836,  837,
+      674,  837,  837,  837,  837,  837,  837,  837,  838,  673,
+      838,  838,  838,  838,  838,  838,  838,  839,  672,  671,
+      839,  839,  840,  840,  670,  840,  840,  841,  669,  841,
+      841,  841,  841,  841,  841,  841,  842,  842,  842,  842,
+      842,  842,  842,  842,  842,  843,  667,  843,  843,  843,
+      843,  843,  843,  843,  844,  666,  665,  844,  844,  845,
+
+      664,  663,  845,  846,  846,  846,  662,  846,  846,  847,
+      847,  847,  661,  847,  847,  848,  657,  650,  649,  647,
+      848,  848,  849,  646,  644,  849,  849,  850,  643,  642,
+      850,  850,  851,  639,  638,  851,  851,  852,  852,  637,
+      852,  852,  853,  636,  634,  853,  853,  854,  633,  632,
+      854,  855,  631,  630,  855,  855,  856,  628,  856,  856,
+      856,  856,  856,  856,  856,  857,  627,  857,  857,  857,
+      857,  857,  857,  857,  858,  626,  625,  858,  859,  623,
+      622,  859,  859,  860,  621,  860,  860,  860,  861,  861,
+      862,  862,  862,  862,  862,  862,  863,  620,  863,  863,
+
+      863,  863,  863,  863,  863,  864,  619,  864,  864,  864,
+      864,  864,  864,  864,  865,  618,  617,  865,  865,  866,
+      615,  614,  866,  867,  867,  613,  867,  867,  868,  612,
+      868,  868,  868,  868,  868,  868,  868,  869,  869,  869,
+      608,  869,  869,  870,  606,  605,  870,  870,  871,  604,
+      871,  871,  871,  871,  871,  871,  871,  599,  598,  597,
+      592,  591,  590,  589,  588,  587,  586,  585,  584,  583,
+      582,  581,  578,  577,  575,  572,  571,  569,  568,  567,
+      566,  565,  564,  563,  562,  560,  559,  558,  554,  552,
+      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
+
+      541,  540,  538,  525,  524,  523,  522,  517,  516,  511,
+      510,  509,  508,  507,  506,  504,  503,  502,  501,  500,
+      499,  497,  496,  495,  494,  493,  492,  491,  490,  488,
+      487,  486,  485,  484,  483,  482,  481,  480,  479,  477,
+      476,  475,  474,  472,  471,  470,  469,  468,  465,  464,
+      463,  462,  461,  460,  453,  452,  451,  450,  449,  448,
+      431,  430,  412,  407,  406,  405,  397,  395,  394,  392,
+      391,  390,  389,  388,  387,  386,  385,  384,  383,  382,
+      381,  380,  379,  377,  376,  375,  367,  366,  365,  364,
+      363,  362,  361,  360,  359,  358,  356,  355,  354,  353,
+
+      352,  351,  350,  349,  348,  347,  346,  345,  330,  329,
+      328,  327,  325,  319,  318,  317,  315,  310,  295,  288,
+      278,  263,  255,  254,  251,  250,  249,  248,  243,  242,
+      241,  223,  221,  214,  213,  211,  205,  204,  197,  196,
+      195,  193,  192,  188,  186,  185,  183,  182,  181,  172,
+      171,  147,  140,  137,  128,  118,  111,   96,   93,   89,
+       87,   85,   84,   83,   82,   79,   74,   67,   36,   34,
+       30,   27,   25,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  815,  815,  815,  815,  815
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[206] =
+static yyconst flex_int32_t yy_rule_can_match_eol[207] =
     {   0,
 1, 0, 1, 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,
@@ -1358,37 +1362,37 @@
     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,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 1, 0, 0, 0, 1, 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, 1, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0,     };
+    0, 0, 0, 0, 1, 0, 0,     };
 
-static yyconst flex_int16_t yy_rule_linenum[205] =
+static yyconst flex_int16_t yy_rule_linenum[206] =
     {   0,
-      224,  246,  248,  250,  255,  256,  257,  258,  259,  260,
-      261,  262,  263,  264,  265,  266,  268,  269,  270,  271,
-      273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
-      283,  284,  286,  291,  292,  294,  295,  296,  297,  298,
-      299,  300,  301,  302,  303,  304,  306,  307,  308,  309,
-      311,  312,  313,  314,  316,  317,  318,  319,  320,  322,
-      323,  324,  325,  326,  327,  328,  329,  330,  332,  333,
-      334,  335,  336,  337,  338,  339,  340,  341,  342,  343,
-      344,  345,  346,  347,  348,  349,  352,  359,  360,  361,
-      362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
-
-      372,  374,  375,  376,  377,  378,  379,  380,  383,  388,
-      412,  413,  414,  415,  417,  422,  434,  449,  450,  451,
-      452,  453,  455,  507,  520,  542,  547,  552,  559,  560,
-      575,  580,  581,  586,  587,  588,  590,  606,  660,  688,
-      693,  698,  699,  700,  701,  706,  717,  718,  720,  722,
-      733,  747,  752,  753,  754,  755,  757,  772,  786,  815,
-      840,  842,  847,  857,  862,  880,  886,  893,  926,  928,
-      933,  969,  970,  971,  973,  974,  975,  976,  977,  978,
-      980,  981,  982,  984,  989,  994,  995,  998, 1032, 1037,
-     1040, 1041, 1042, 1043, 1045, 1050, 1051, 1052, 1053, 1054,
+      225,  247,  249,  251,  256,  257,  258,  259,  260,  261,
+      262,  263,  264,  265,  266,  267,  269,  270,  271,  272,
+      274,  275,  276,  277,  278,  279,  280,  281,  282,  283,
+      284,  285,  287,  292,  293,  295,  296,  297,  298,  299,
+      300,  301,  302,  303,  304,  305,  307,  308,  309,  310,
+      312,  313,  314,  315,  317,  318,  319,  320,  321,  323,
+      324,  325,  326,  327,  328,  329,  330,  331,  333,  334,
+      335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
+      345,  346,  347,  348,  349,  350,  353,  360,  361,  362,
+      363,  364,  365,  366,  367,  368,  369,  370,  371,  372,
+
+      373,  375,  376,  377,  378,  379,  380,  381,  384,  389,
+      418,  466,  467,  468,  469,  471,  476,  488,  503,  504,
+      505,  506,  507,  509,  561,  574,  596,  601,  606,  613,
+      614,  629,  634,  635,  640,  641,  642,  644,  660,  714,
+      742,  747,  752,  753,  754,  755,  760,  771,  772,  774,
+      776,  787,  801,  806,  807,  808,  809,  811,  826,  840,
+      869,  894,  896,  901,  911,  916,  934,  940,  947,  980,
+      982,  987, 1023, 1024, 1025, 1027, 1028, 1029, 1030, 1031,
+     1032, 1034, 1035, 1036, 1038, 1043, 1048, 1049, 1052, 1086,
+     1091, 1094, 1095, 1096, 1097, 1099, 1104, 1105, 1106, 1107,
 
-     1056, 1061, 1063, 1065
+     1108, 1110, 1115, 1117, 1119
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1507,7 +1511,7 @@
 
 /* The PASM state is an exclusive state, recognizing ONLY PASM tokens. */
 
-#line 1511 "pirlexer.c"
+#line 1515 "pirlexer.c"
 
 #define INITIAL 0
 #define MACROHEAD 1
@@ -1813,11 +1817,11 @@
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 /* %% [7.0] user's declarations go here */
-#line 221 "pir.l"
+#line 222 "pir.l"
 
 
 
-#line 1821 "pirlexer.c"
+#line 1825 "pirlexer.c"
 
     yylval = yylval_param;
 
@@ -1882,13 +1886,13 @@
             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 >= 812 )
+                if ( yy_current_state >= 816 )
                     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 != 811 );
+        while ( yy_current_state != 815 );
         yy_cp = yyg->yy_last_accepting_cpos;
         yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1919,13 +1923,13 @@
             {
             if ( yy_act == 0 )
                 fprintf( stderr, "--scanner backing up\n" );
-            else if ( yy_act < 205 )
+            else if ( yy_act < 206 )
                 fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                          (long)yy_rule_linenum[yy_act], yytext );
-            else if ( yy_act == 205 )
+            else if ( yy_act == 206 )
                 fprintf( stderr, "--accepting default rule (\"%s\")\n",
                          yytext );
-            else if ( yy_act == 206 )
+            else if ( yy_act == 207 )
                 fprintf( stderr, "--(end of buffer or a NUL)\n" );
             else
                 fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1944,7 +1948,7 @@
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 224 "pir.l"
+#line 225 "pir.l"
 { /* only when the scanning starts, is this state used. Only a single
                          * character is read, pushed back, and then, depending on the
                          * lexer flags, either PASM or PIR mode (INITIAL state) is activated.
@@ -1969,19 +1973,19 @@
     YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 246 "pir.l"
+#line 247 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 248 "pir.l"
+#line 249 "pir.l"
 { /* ignore line comments */ }
     YY_BREAK
 case 4:
 /* rule 4 can match eol */
 YY_RULE_SETUP
-#line 250 "pir.l"
+#line 251 "pir.l"
 { /* a set of continuous newlines yields a single newline token. */
                     yylval->sval = "\n";
                     return TK_NL;
@@ -1989,419 +1993,419 @@
     YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 255 "pir.l"
+#line 256 "pir.l"
 { return TK_ASSIGN_USHIFT; }
     YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 256 "pir.l"
+#line 257 "pir.l"
 { return TK_USHIFT; }
     YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 257 "pir.l"
+#line 258 "pir.l"
 { return TK_ASSIGN_RSHIFT; }
     YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 258 "pir.l"
+#line 259 "pir.l"
 { return TK_RSHIFT; }
     YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 259 "pir.l"
+#line 260 "pir.l"
 { return TK_LSHIFT; }
     YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 260 "pir.l"
+#line 261 "pir.l"
 { return TK_ARROW; }
     YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 261 "pir.l"
+#line 262 "pir.l"
 { return TK_EQ; }
     YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 262 "pir.l"
+#line 263 "pir.l"
 { return TK_NE; }
     YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 263 "pir.l"
+#line 264 "pir.l"
 { return TK_LE; }
     YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 264 "pir.l"
+#line 265 "pir.l"
 { return TK_GE; }
     YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 265 "pir.l"
+#line 266 "pir.l"
 { return TK_LT; }
     YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 266 "pir.l"
+#line 267 "pir.l"
 { return TK_GT; }
     YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 268 "pir.l"
+#line 269 "pir.l"
 { return TK_FDIV; }
     YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 269 "pir.l"
+#line 270 "pir.l"
 { return TK_AND; }
     YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 270 "pir.l"
+#line 271 "pir.l"
 { return TK_OR; }
     YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 271 "pir.l"
+#line 272 "pir.l"
 { return TK_XOR; }
     YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 273 "pir.l"
+#line 274 "pir.l"
 { return '+'; }
     YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 274 "pir.l"
+#line 275 "pir.l"
 { return '%'; }
     YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 275 "pir.l"
+#line 276 "pir.l"
 { return '*'; }
     YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 276 "pir.l"
+#line 277 "pir.l"
 { return '/'; }
     YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 277 "pir.l"
+#line 278 "pir.l"
 { return '!'; }
     YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 278 "pir.l"
+#line 279 "pir.l"
 { return '~'; }
     YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 279 "pir.l"
+#line 280 "pir.l"
 { return '-'; }
     YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 280 "pir.l"
+#line 281 "pir.l"
 { return '('; }
     YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 281 "pir.l"
+#line 282 "pir.l"
 { return ')'; }
     YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 282 "pir.l"
+#line 283 "pir.l"
 { return ','; }
     YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 283 "pir.l"
+#line 284 "pir.l"
 { return '['; }
     YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 284 "pir.l"
+#line 285 "pir.l"
 { return ']'; }
     YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 286 "pir.l"
+#line 287 "pir.l"
 { /* if the dot is surrounded by whitespace, it's a concatenation operator */
                     return TK_CONC;
                   }
     YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 291 "pir.l"
+#line 292 "pir.l"
 { return '='; }
     YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 292 "pir.l"
+#line 293 "pir.l"
 { return ';'; }
     YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 294 "pir.l"
+#line 295 "pir.l"
 { return TK_ASSIGN_INC; }
     YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 295 "pir.l"
+#line 296 "pir.l"
 { return TK_ASSIGN_DEC; }
     YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 296 "pir.l"
+#line 297 "pir.l"
 { return TK_ASSIGN_DIV; }
     YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 297 "pir.l"
+#line 298 "pir.l"
 { return TK_ASSIGN_MUL; }
     YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 298 "pir.l"
+#line 299 "pir.l"
 { return TK_ASSIGN_MOD; }
     YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 299 "pir.l"
+#line 300 "pir.l"
 { return TK_ASSIGN_POW; }
     YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 300 "pir.l"
+#line 301 "pir.l"
 { return TK_ASSIGN_BOR; }
     YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 301 "pir.l"
+#line 302 "pir.l"
 { return TK_ASSIGN_BAND; }
     YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 302 "pir.l"
+#line 303 "pir.l"
 { return TK_ASSIGN_FDIV; }
     YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 303 "pir.l"
+#line 304 "pir.l"
 { return TK_ASSIGN_BNOT; }
     YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 304 "pir.l"
+#line 305 "pir.l"
 { return TK_ASSIGN_CONC; }
     YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 306 "pir.l"
+#line 307 "pir.l"
 { return TK_IF; }
     YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 307 "pir.l"
+#line 308 "pir.l"
 { return TK_GOTO; }
     YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 308 "pir.l"
+#line 309 "pir.l"
 { return TK_UNLESS; }
     YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 309 "pir.l"
+#line 310 "pir.l"
 { return TK_NULL; }
     YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 311 "pir.l"
+#line 312 "pir.l"
 { return TK_INT; }
     YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 312 "pir.l"
+#line 313 "pir.l"
 { return TK_NUM; }
     YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 313 "pir.l"
+#line 314 "pir.l"
 { return TK_PMC; }
     YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 314 "pir.l"
+#line 315 "pir.l"
 { return TK_STRING; }
     YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 316 "pir.l"
+#line 317 "pir.l"
 { return TK_ANNOTATE; }
     YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 317 "pir.l"
+#line 318 "pir.l"
 { return TK_SET_ARG; }
     YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 318 "pir.l"
+#line 319 "pir.l"
 { return TK_CONST; }
     YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 319 "pir.l"
+#line 320 "pir.l"
 { return TK_END; }
     YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 320 "pir.l"
+#line 321 "pir.l"
 { return TK_FILE; }
     YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 322 "pir.l"
+#line 323 "pir.l"
 { return TK_GET_RESULTS; }
     YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 323 "pir.l"
+#line 324 "pir.l"
 { return TK_GLOBALCONST; }
     YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 324 "pir.l"
+#line 325 "pir.l"
 { return TK_HLL; }
     YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 325 "pir.l"
+#line 326 "pir.l"
 { return TK_HLL_MAP; }
     YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 326 "pir.l"
+#line 327 "pir.l"
 { return TK_INVOCANT; }
     YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 327 "pir.l"
+#line 328 "pir.l"
 { return TK_LEX; }
     YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 328 "pir.l"
+#line 329 "pir.l"
 { return TK_LINE; }
     YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 329 "pir.l"
+#line 330 "pir.l"
 { return TK_LOADLIB; }
     YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 330 "pir.l"
+#line 331 "pir.l"
 { return TK_LOCAL; }
     YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 332 "pir.l"
+#line 333 "pir.l"
 { return TK_METH_CALL; }
     YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 333 "pir.l"
+#line 334 "pir.l"
 { return TK_NAMESPACE; }
     YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 334 "pir.l"
+#line 335 "pir.l"
 { return TK_NCI_CALL; }
     YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 335 "pir.l"
+#line 336 "pir.l"
 { return TK_PARAM; }
     YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 336 "pir.l"
+#line 337 "pir.l"
 { return TK_BEGIN_CALL; }
     YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 337 "pir.l"
+#line 338 "pir.l"
 { return TK_BEGIN_RETURN; }
     YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 338 "pir.l"
+#line 339 "pir.l"
 { return TK_BEGIN_YIELD; }
     YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 339 "pir.l"
+#line 340 "pir.l"
 { return TK_CALL; }
     YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 340 "pir.l"
+#line 341 "pir.l"
 { return TK_END_CALL; }
     YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 341 "pir.l"
+#line 342 "pir.l"
 { return TK_END_RETURN; }
     YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 342 "pir.l"
+#line 343 "pir.l"
 { return TK_END_YIELD; }
     YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 343 "pir.l"
+#line 344 "pir.l"
 { return TK_GET_RESULT; }
     YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 344 "pir.l"
+#line 345 "pir.l"
 { return TK_RETURN; }
     YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 345 "pir.l"
+#line 346 "pir.l"
 { return TK_SUB; }
     YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 346 "pir.l"
+#line 347 "pir.l"
 { return TK_YIELD; }
     YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 347 "pir.l"
+#line 348 "pir.l"
 { return TK_SET_RETURN; }
     YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 348 "pir.l"
+#line 349 "pir.l"
 { return TK_SET_YIELD; }
     YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 349 "pir.l"
+#line 350 "pir.l"
 { return TK_TAILCALL; }
     YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 352 "pir.l"
+#line 353 "pir.l"
 { /* make sure these are not used outside macro defs */
                     yypirerror(yyscanner, yypirget_extra(yyscanner),
                                "cannot use '%s' outside of macro definitions", yytext);
@@ -2409,112 +2413,112 @@
     YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 359 "pir.l"
+#line 360 "pir.l"
 { return TK_FLAG_ANON; }
     YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 360 "pir.l"
+#line 361 "pir.l"
 { return TK_FLAG_INIT; }
     YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 361 "pir.l"
+#line 362 "pir.l"
 { return TK_FLAG_LOAD; }
     YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 362 "pir.l"
+#line 363 "pir.l"
 { return TK_FLAG_POSTCOMP; }
     YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 363 "pir.l"
+#line 364 "pir.l"
 { return TK_FLAG_IMMEDIATE; }
     YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 364 "pir.l"
+#line 365 "pir.l"
 { return TK_FLAG_MAIN; }
     YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 365 "pir.l"
+#line 366 "pir.l"
 { return TK_FLAG_METHOD; }
     YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 366 "pir.l"
+#line 367 "pir.l"
 { return TK_FLAG_LEX; }
     YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 367 "pir.l"
+#line 368 "pir.l"
 { return TK_FLAG_OUTER; }
     YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 368 "pir.l"
+#line 369 "pir.l"
 { return TK_FLAG_VTABLE; }
     YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 369 "pir.l"
+#line 370 "pir.l"
 { return TK_FLAG_MULTI; }
     YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 370 "pir.l"
+#line 371 "pir.l"
 { return TK_FLAG_SUBID; }
     YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 371 "pir.l"
+#line 372 "pir.l"
 { return TK_FLAG_INSTANCEOF; }
     YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 372 "pir.l"
+#line 373 "pir.l"
 { return TK_FLAG_NSENTRY; }
     YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 374 "pir.l"
+#line 375 "pir.l"
 { return TK_FLAG_UNIQUE_REG; }
     YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 375 "pir.l"
+#line 376 "pir.l"
 { return TK_FLAG_OPTIONAL; }
     YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 376 "pir.l"
+#line 377 "pir.l"
 { return TK_FLAG_OPT_FLAG; }
     YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 377 "pir.l"
+#line 378 "pir.l"
 { return TK_FLAG_SLURPY; }
     YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 378 "pir.l"
+#line 379 "pir.l"
 { return TK_FLAG_NAMED; }
     YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 379 "pir.l"
+#line 380 "pir.l"
 { return TK_FLAG_FLAT; }
     YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 380 "pir.l"
+#line 381 "pir.l"
 { return TK_FLAG_INVOCANT; }
     YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 383 "pir.l"
+#line 384 "pir.l"
 { /* copy the string, remove the quotes. */
                     yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext + 1, yyleng - 2);
                     return TK_STRINGC;
@@ -2522,27 +2526,31 @@
     YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 388 "pir.l"
-{ /* parse yytext, which contains the encoding, a ':', and the quoted string */
-                    char *colon        = strchr(yytext, ':');
+#line 389 "pir.l"
+{
+                    /* parse yytext, which contains the charset, a ':', and the quoted string */
+                    char        *colon = strchr(yytext, ':');
                     lexer_state *lexer = yypirget_extra(yyscanner);
-                    ucstring *ustr     = (ucstring *)pir_mem_allocate(lexer, sizeof (ucstring));
-                    /* copy the encoding part */
-                    ustr->encoding     = dupstrn(lexer, yytext, colon - yytext);
+                    ucstring    *ustr  = (ucstring *)pir_mem_allocate(lexer, sizeof (ucstring));
+                    /* copy the charset part */
+                    ustr->charset      = dupstrn(lexer, yytext, colon - yytext);
                     /* the colon becomes a NULL character to end the encoding string */
                     *colon = '\0';
                     /* copy the string contents, strip the quotes. Example:
                      *   iso-8859-1:"hi there"
                      *   123456789012345678901
-                     *
+                     *             ^
+                     *          (colon)
                      * colon points to the colon, add 2 to point to the first character
                      * in the string ('h'). yyleng is 20 in the example, subtract
-                     * string length of the encoding part (10) and 3 for the quotes and colon.
+                     * string length of the charset part (10) and 3 for the quotes and colon.
                      */
 
-                    ustr->contents = dupstrn(lexer, colon + 2, yyleng - strlen(ustr->encoding) - 3);
+                    ustr->contents = dupstrn(lexer, colon + 2, yyleng - strlen(ustr->charset) - 3);
+
+                    ustr->encoding = NULL;
 
-                    fprintf(stderr, "ucstring: [%s]:[%s]\n", ustr->encoding, ustr->contents);
+                    fprintf(stderr, "ucstring: [%s]:[%s]\n", ustr->charset, ustr->contents);
 
                     yylval->ustr = ustr;
                     return TK_USTRINGC;
@@ -2550,35 +2558,85 @@
     YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 412 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_PREG; }
+#line 418 "pir.l"
+{
+                    /* parse yytext, which contains the encoding, a ':', a charset,
+                     * a ':', and the quoted string
+                     */
+                    char        *colon1 = strchr(yytext, ':');
+                    char        *colon2;
+                    lexer_state *lexer = yypirget_extra(yyscanner);
+                    ucstring    *ustr  = (ucstring *)pir_mem_allocate(lexer, sizeof (ucstring));
+
+                    /* yytext has the following structure:
+                     *
+                     * <charset><encoding><contents>
+                     *
+                     *   utf:unicode:"hi there"
+                     *   1234567890123456789012
+                     *      ^       ^
+                     *   (colon1) (colon2)
+                     *
+                     * colon1 points to the first colon, colon2 points to the second.
+                     *
+
+                    /* copy the encoding part */
+                    ustr->encoding     = dupstrn(lexer, yytext, colon1 - yytext);
+
+                    /* look for the second colon after this one */
+                    colon2 = strchr(colon1 + 1, ':');
+                    /* the colon becomes a NULL character to end the encoding string */
+                    *colon1 = '\0';
+
+                    ustr->charset  = dupstrn(lexer, colon1 + 1, colon2 - colon1 - 1);
+
+                    /* start copying after the second colon, and skip the quote as well.
+                     * yyleng contains the total length, substract length of encoding,
+                     * length of charset, 2 quotes, and 2 colons (hence -4).
+                     */
+                    ustr->contents = dupstrn(lexer, colon2 + 2,
+                                 yyleng - strlen(ustr->charset) - strlen(ustr->encoding) - 4);
+
+                    /* fprintf(stderr, "ucstring: [%s]:[%s]:[%s]\n", ustr->encoding, ustr->charset,
+                                   ustr->contents);
+                    */
+
+                    yylval->ustr = ustr;
+                    return TK_USTRINGC;
+
+                  }
     YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 413 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_SREG; }
+#line 466 "pir.l"
+{ yylval->ival = atoi(yytext + 2); return TK_PREG; }
     YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 414 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_NREG; }
+#line 467 "pir.l"
+{ yylval->ival = atoi(yytext + 2); return TK_SREG; }
     YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 415 "pir.l"
-{ yylval->ival = atoi(yytext + 2); return TK_IREG; }
+#line 468 "pir.l"
+{ yylval->ival = atoi(yytext + 2); return TK_NREG; }
     YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 417 "pir.l"
+#line 469 "pir.l"
+{ yylval->ival = atoi(yytext + 2); return TK_IREG; }
+    YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 471 "pir.l"
 { /* make the label Id available in the parser. remove the ":" first. */
                     yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext, yyleng - 1);
                     return TK_LABEL;
                   }
     YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 422 "pir.l"
+#line 476 "pir.l"
 { /* give a warning when using PASM registers as PIR identifiers */
                     lexer_state * const lexer = yypirget_extra(yyscanner);
 
@@ -2591,9 +2649,9 @@
                     return TK_IDENT;
                   }
     YY_BREAK
-case 117:
+case 118:
 YY_RULE_SETUP
-#line 434 "pir.l"
+#line 488 "pir.l"
 { /* identifier; can be a global (sub or const), local or parrot op */
                     lexer_state * const lexer = yypirget_extra(yyscanner);
                     constant *c = find_global_constant(lexer, yytext);
@@ -2609,34 +2667,34 @@
                     }
                   }
     YY_BREAK
-case 118:
-YY_RULE_SETUP
-#line 449 "pir.l"
-{ yylval->dval = atof(yytext); return TK_NUMC; }
-    YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 450 "pir.l"
-{ yylval->ival = atoi(yytext); return TK_INTC; }
+#line 503 "pir.l"
+{ yylval->dval = atof(yytext); return TK_NUMC; }
     YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 451 "pir.l"
+#line 504 "pir.l"
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 452 "pir.l"
+#line 505 "pir.l"
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 453 "pir.l"
+#line 506 "pir.l"
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 455 "pir.l"
+#line 507 "pir.l"
+{ yylval->ival = atoi(yytext); return TK_INTC; }
+    YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 509 "pir.l"
 { /* XXX some work to be done to disallow $P0 . foo()
                      * spaces should not be allowed.
                      */
@@ -2659,7 +2717,7 @@
 
 
 case YY_STATE_EOF(SCANSTR):
-#line 478 "pir.l"
+#line 532 "pir.l"
 { /* switch back from .macro_const buffer to file. */
                      lexer_state * const lexer = yypirget_extra(yyscanner);
                      yy_pop_state(yyscanner);
@@ -2667,7 +2725,7 @@
                    }
     YY_BREAK
 case YY_STATE_EOF(SCANMACRO):
-#line 484 "pir.l"
+#line 538 "pir.l"
 { /* override the default <<EOF>> action; go back to normal state and
                       * switch back to the saved file.
                       */
@@ -2691,9 +2749,9 @@
 
                    }
     YY_BREAK
-case 124:
+case 125:
 YY_RULE_SETUP
-#line 507 "pir.l"
+#line 561 "pir.l"
 { /* when scanning a macro body, the @ marker indicates the {IDENT} must
                           * be munged.
                           */
@@ -2704,14 +2762,14 @@
                        }
     YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 516 "pir.l"
+#line 570 "pir.l"
 { /* end of file, stop scanning. */
                     yyterminate();
                   }
     YY_BREAK
-case 125:
+case 126:
 YY_RULE_SETUP
-#line 520 "pir.l"
+#line 574 "pir.l"
 { /* any character not covered in the rules above is an error. */
                     yypirerror(yyscanner, yypirget_extra(yyscanner),
                                "unexpected character: '%c'", yytext[0]);
@@ -2730,25 +2788,25 @@
 /********************** .macro_const ****************************************/
 
 
-case 126:
+case 127:
 YY_RULE_SETUP
-#line 542 "pir.l"
+#line 596 "pir.l"
 {
                                yy_push_state(MACROCONST, yyscanner);
                                return TK_MACRO_CONST;
                              }
     YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 547 "pir.l"
+#line 601 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_IDENT;
                              }
     YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 552 "pir.l"
+#line 606 "pir.l"
 {
                                /* only these tokens can be macro constant values */
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
@@ -2756,21 +2814,21 @@
                                return TK_MACRO_CONST_VAL;
                              }
     YY_BREAK
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 559 "pir.l"
+#line 613 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 560 "pir.l"
+#line 614 "pir.l"
 {
                                yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "unknown character: '%c'", yytext[0]);
                              }
     YY_BREAK
 case YY_STATE_EOF(MACROCONST):
-#line 564 "pir.l"
+#line 618 "pir.l"
 {
                                yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "read end of file during .macro_const definition");
@@ -2781,46 +2839,46 @@
 /**************** macro header (.macro <ident> <parameters> ) ***************/
 
 
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 575 "pir.l"
+#line 629 "pir.l"
 { /* start a macro definition */
                                yy_push_state(MACROHEAD, yyscanner);
                                return TK_MACRO;
                              }
     YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 580 "pir.l"
+#line 634 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 581 "pir.l"
+#line 635 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_IDENT;
                              }
     YY_BREAK
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 586 "pir.l"
+#line 640 "pir.l"
 { return '('; }
     YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 587 "pir.l"
+#line 641 "pir.l"
 { return ')'; }
     YY_BREAK
-case 136:
+case 137:
 YY_RULE_SETUP
-#line 588 "pir.l"
+#line 642 "pir.l"
 { return ','; }
     YY_BREAK
-case 137:
-/* rule 137 can match eol */
+case 138:
+/* rule 138 can match eol */
 YY_RULE_SETUP
-#line 590 "pir.l"
+#line 644 "pir.l"
 { /* a set of continuous newlines yields a single newline token. */
                                yy_pop_state(yyscanner); /* remove MACROHEAD state */
                                yy_push_state(MACROBODY, yyscanner); /* enter MACROBODY state */
@@ -2836,9 +2894,9 @@
  */
 
 
-case 138:
+case 139:
 YY_RULE_SETUP
-#line 606 "pir.l"
+#line 660 "pir.l"
 { /* .foo; it can be a macro, macro_local, or just $P0.foo(),
                                 * but we need to check that.
                                 */
@@ -2893,9 +2951,9 @@
                                }
                              }
     YY_BREAK
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 660 "pir.l"
+#line 714 "pir.l"
 { /* expand a .macro_const or parameter in argument list */
                                lexer_state * const lexer = yypirget_extra(yyscanner);
                                macro_def   * const macro = find_macro(lexer->macros, yytext + 1);
@@ -2924,80 +2982,80 @@
                                    yypirerror(yyscanner, lexer, "'%s' is not a macro", yytext + 1);
                              }
     YY_BREAK
-case 140:
+case 141:
 YY_RULE_SETUP
-#line 688 "pir.l"
+#line 742 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_MACRO_ARG_IDENT;
                              }
     YY_BREAK
-case 141:
+case 142:
 YY_RULE_SETUP
-#line 693 "pir.l"
+#line 747 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_MACRO_ARG_OTHER;
                              }
     YY_BREAK
-case 142:
+case 143:
 YY_RULE_SETUP
-#line 698 "pir.l"
+#line 752 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 143:
+case 144:
 YY_RULE_SETUP
-#line 699 "pir.l"
+#line 753 "pir.l"
 { return ','; }
     YY_BREAK
-case 144:
+case 145:
 YY_RULE_SETUP
-#line 700 "pir.l"
+#line 754 "pir.l"
 { return '('; }
     YY_BREAK
-case 145:
+case 146:
 YY_RULE_SETUP
-#line 701 "pir.l"
+#line 755 "pir.l"
 {
                                yy_pop_state(yyscanner); /* leave MACROEXPAND state */
                                return ')';
                              }
     YY_BREAK
-case 146:
+case 147:
 YY_RULE_SETUP
-#line 706 "pir.l"
+#line 760 "pir.l"
 {
                                yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                                return TK_MACRO_ARG_OTHER;
                              }
     YY_BREAK
 case YY_STATE_EOF(STRINGEXPAND):
-#line 711 "pir.l"
+#line 765 "pir.l"
 {
                                lexer_state * const lexer = yypirget_extra(yyscanner);
                                yy_pop_state(yyscanner);
                                yypir_switch_to_buffer(lexer->buffer,yyscanner);
                              }
     YY_BREAK
-case 147:
+case 148:
 YY_RULE_SETUP
-#line 717 "pir.l"
+#line 771 "pir.l"
 { return '{'; }
     YY_BREAK
-case 148:
+case 149:
 YY_RULE_SETUP
-#line 718 "pir.l"
+#line 772 "pir.l"
 { return '}'; }
     YY_BREAK
-case 149:
-/* rule 149 can match eol */
+case 150:
+/* rule 150 can match eol */
 YY_RULE_SETUP
-#line 720 "pir.l"
+#line 774 "pir.l"
 { yylval->sval = "\n"; return TK_NL; }
     YY_BREAK
-case 150:
+case 151:
 YY_RULE_SETUP
-#line 722 "pir.l"
+#line 776 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "unknown character in macro expansion: %c", yytext[0]);
                              }
@@ -3007,9 +3065,9 @@
 /******************************** .macro_local *****************************/
 
 
-case 151:
+case 152:
 YY_RULE_SETUP
-#line 733 "pir.l"
+#line 787 "pir.l"
 { /* give a warning if the right flag is set */
                               /*
                               lexer_state * const lexer = yypirget_extra(yyscanner);
@@ -3023,37 +3081,37 @@
                               */
                             }
     YY_BREAK
-case 152:
+case 153:
 YY_RULE_SETUP
-#line 747 "pir.l"
+#line 801 "pir.l"
 {
                               yy_push_state(MACROLOCAL, yyscanner);
                               return TK_MACRO_LOCAL;
                             }
     YY_BREAK
-case 153:
+case 154:
 YY_RULE_SETUP
-#line 752 "pir.l"
+#line 806 "pir.l"
 { return TK_INT; }
     YY_BREAK
-case 154:
+case 155:
 YY_RULE_SETUP
-#line 753 "pir.l"
+#line 807 "pir.l"
 { return TK_PMC; }
     YY_BREAK
-case 155:
+case 156:
 YY_RULE_SETUP
-#line 754 "pir.l"
+#line 808 "pir.l"
 { return TK_NUM; }
     YY_BREAK
-case 156:
+case 157:
 YY_RULE_SETUP
-#line 755 "pir.l"
+#line 809 "pir.l"
 { return TK_STRING; }
     YY_BREAK
-case 157:
+case 158:
 YY_RULE_SETUP
-#line 757 "pir.l"
+#line 811 "pir.l"
 { /* normal .macro_local */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
                               /* reserve space for {IDENT}, the @ marker and the NULL char. */
@@ -3069,9 +3127,9 @@
                               return TK_MACRO_LOCAL_ID;
                             }
     YY_BREAK
-case 158:
+case 159:
 YY_RULE_SETUP
-#line 772 "pir.l"
+#line 826 "pir.l"
 { /* declare a .macro_local based on a parameter */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
 
@@ -3086,9 +3144,9 @@
 
                             }
     YY_BREAK
-case 159:
+case 160:
 YY_RULE_SETUP
-#line 786 "pir.l"
+#line 840 "pir.l"
 { /* .$foo */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
                               macro_table * const table = peek_macro_table(lexer);
@@ -3118,9 +3176,9 @@
 
                             }
     YY_BREAK
-case 160:
+case 161:
 YY_RULE_SETUP
-#line 815 "pir.l"
+#line 869 "pir.l"
 { /* expanding a .macro_local using a macro parameter value */
                              lexer_state * const lexer     = yypirget_extra(yyscanner);
                              char  const * const paramname = dupstrn(lexer, yytext + 1, yyleng - 2);
@@ -3146,23 +3204,23 @@
                              return TK_IDENT;
                            }
     YY_BREAK
-case 161:
+case 162:
 YY_RULE_SETUP
-#line 840 "pir.l"
+#line 894 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 162:
-/* rule 162 can match eol */
+case 163:
+/* rule 163 can match eol */
 YY_RULE_SETUP
-#line 842 "pir.l"
+#line 896 "pir.l"
 { /* newline after .macro_local <type> <ident> line */
                               yy_pop_state(yyscanner);
                               return TK_NL;
                             }
     YY_BREAK
-case 163:
+case 164:
 YY_RULE_SETUP
-#line 847 "pir.l"
+#line 901 "pir.l"
 { /* this state is only used for declaring .macro_locals */
                               yypirerror(yyscanner, yypirget_extra(yyscanner),
                                  "unknown character '%c' when declaring .macro_local", yytext[0]);
@@ -3173,17 +3231,17 @@
 /****************************** .macro_label ********************************/
 
 
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 857 "pir.l"
+#line 911 "pir.l"
 {
                               yy_push_state(MACROLABEL, yyscanner);
                               return TK_MACRO_LABEL;
                             }
     YY_BREAK
-case 165:
+case 166:
 YY_RULE_SETUP
-#line 862 "pir.l"
+#line 916 "pir.l"
 { /* if the "$" is there, it's a macro label using a macro
                                * parameter's value; otherwise it's a normal macro label
                                */
@@ -3201,18 +3259,18 @@
                               return TK_MACRO_LABEL_ID;
                             }
     YY_BREAK
-case 166:
-/* rule 166 can match eol */
+case 167:
+/* rule 167 can match eol */
 YY_RULE_SETUP
-#line 880 "pir.l"
+#line 934 "pir.l"
 { /* the newline character after a ".macro_label $foo:" declaration */
                               yy_pop_state(yyscanner); /* leave MACROLABEL state */
                               return TK_NL;
                             }
     YY_BREAK
-case 167:
+case 168:
 YY_RULE_SETUP
-#line 886 "pir.l"
+#line 940 "pir.l"
 { /* scan a label when expanding a buffer; declared as .macro_label */
                               lexer_state * const lexer = yypirget_extra(yyscanner);
                               char const  * const label = dupstrn(lexer, yytext, yyleng - 2);
@@ -3220,9 +3278,9 @@
                               return TK_LABEL;
                             }
     YY_BREAK
-case 168:
+case 169:
 YY_RULE_SETUP
-#line 893 "pir.l"
+#line 947 "pir.l"
 { /* scan a label when expanding macro; was a macro parameter */
                              lexer_state * const lexer     = yypirget_extra(yyscanner);
                              char const  * const paramname = dupstrn(lexer, yytext + 1, yyleng - 3);
@@ -3254,29 +3312,29 @@
 /*************************** macro body scanning (storing) ****************************/
 
 
-case 169:
-/* rule 169 can match eol */
+case 170:
+/* rule 170 can match eol */
 YY_RULE_SETUP
-#line 926 "pir.l"
+#line 980 "pir.l"
 { store_macro_char(CURRENT_MACRO(yypirget_extra(yyscanner)), '\n'); }
     YY_BREAK
-case 170:
+case 171:
 YY_RULE_SETUP
-#line 928 "pir.l"
+#line 982 "pir.l"
 {
                                yy_pop_state(yyscanner); /* leave MACROBODY state */
                                return TK_ENDM;
                              }
     YY_BREAK
-case 171:
+case 172:
 YY_RULE_SETUP
-#line 933 "pir.l"
+#line 987 "pir.l"
 { /* store everything else */
                                store_macro_char(CURRENT_MACRO(yypirget_extra(yyscanner)), yytext[0]);
                              }
     YY_BREAK
 case YY_STATE_EOF(MACROBODY):
-#line 937 "pir.l"
+#line 991 "pir.l"
 { /* catch run-away macro bodys */
                                yypirerror(yyscanner, yypirget_extra(yyscanner),
                                           "read end of file while reading macro body");
@@ -3306,95 +3364,95 @@
  * This becomes unmanageable
  */
 
-case 172:
+case 173:
 YY_RULE_SETUP
-#line 969 "pir.l"
+#line 1023 "pir.l"
 { return ','; }
     YY_BREAK
-case 173:
+case 174:
 YY_RULE_SETUP
-#line 970 "pir.l"
+#line 1024 "pir.l"
 { return '['; }
     YY_BREAK
-case 174:
+case 175:
 YY_RULE_SETUP
-#line 971 "pir.l"
+#line 1025 "pir.l"
 { return ']'; }
     YY_BREAK
-case 175:
+case 176:
 YY_RULE_SETUP
-#line 973 "pir.l"
+#line 1027 "pir.l"
 { return TK_FLAG_MAIN; }
     YY_BREAK
-case 176:
+case 177:
 YY_RULE_SETUP
-#line 974 "pir.l"
+#line 1028 "pir.l"
 { return TK_FLAG_LOAD; }
     YY_BREAK
-case 177:
+case 178:
 YY_RULE_SETUP
-#line 975 "pir.l"
+#line 1029 "pir.l"
 { return TK_FLAG_INIT; }
     YY_BREAK
-case 178:
+case 179:
 YY_RULE_SETUP
-#line 976 "pir.l"
+#line 1030 "pir.l"
 { return TK_FLAG_ANON; }
     YY_BREAK
-case 179:
+case 180:
 YY_RULE_SETUP
-#line 977 "pir.l"
+#line 1031 "pir.l"
 { return TK_FLAG_POSTCOMP; }
     YY_BREAK
-case 180:
+case 181:
 YY_RULE_SETUP
-#line 978 "pir.l"
+#line 1032 "pir.l"
 { return TK_FLAG_IMMEDIATE; }
     YY_BREAK
-case 181:
+case 182:
 YY_RULE_SETUP
-#line 980 "pir.l"
+#line 1034 "pir.l"
 { return TK_PCC_SUB; }
     YY_BREAK
-case 182:
+case 183:
 YY_RULE_SETUP
-#line 981 "pir.l"
+#line 1035 "pir.l"
 { return TK_LEX; }
     YY_BREAK
-case 183:
+case 184:
 YY_RULE_SETUP
-#line 982 "pir.l"
+#line 1036 "pir.l"
 { return TK_NAMESPACE; }
     YY_BREAK
-case 184:
+case 185:
 YY_RULE_SETUP
-#line 984 "pir.l"
+#line 1038 "pir.l"
 {
                           yy_push_state(MACROHEAD, yyscanner);
                           return TK_MACRO;
                         }
     YY_BREAK
-case 185:
+case 186:
 YY_RULE_SETUP
-#line 989 "pir.l"
+#line 1043 "pir.l"
 {
                           yy_push_state(MACROCONST, yyscanner);
                           return TK_MACRO_CONST;
                         }
     YY_BREAK
-case 186:
+case 187:
 YY_RULE_SETUP
-#line 994 "pir.l"
+#line 1048 "pir.l"
 { return TK_LINE; }
     YY_BREAK
-case 187:
+case 188:
 YY_RULE_SETUP
-#line 995 "pir.l"
+#line 1049 "pir.l"
 { return TK_FILE; }
     YY_BREAK
-case 188:
+case 189:
 YY_RULE_SETUP
-#line 998 "pir.l"
+#line 1052 "pir.l"
 { /* macro expansion in PASM mode. */
                           lexer_state * const lexer = yypirget_extra(yyscanner);
                           macro_def   * const macro = find_macro(lexer->macros, yytext + 1);
@@ -3429,110 +3487,110 @@
                           }
                         }
     YY_BREAK
-case 189:
+case 190:
 YY_RULE_SETUP
-#line 1032 "pir.l"
+#line 1086 "pir.l"
 { /* a label in PASM */
                           yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext, yyleng - 1);
                           return TK_LABEL;
                         }
     YY_BREAK
-case 190:
+case 191:
 YY_RULE_SETUP
-#line 1037 "pir.l"
+#line 1091 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                      "symbolic registers are not allowed in PASM mode");
                         }
     YY_BREAK
-case 191:
+case 192:
 YY_RULE_SETUP
-#line 1040 "pir.l"
+#line 1094 "pir.l"
 { yylval->ival = atoi(yytext + 1); return TK_PREG; }
     YY_BREAK
-case 192:
+case 193:
 YY_RULE_SETUP
-#line 1041 "pir.l"
+#line 1095 "pir.l"
 { yylval->ival = atoi(yytext + 1); return TK_NREG; }
     YY_BREAK
-case 193:
+case 194:
 YY_RULE_SETUP
-#line 1042 "pir.l"
+#line 1096 "pir.l"
 { yylval->ival = atoi(yytext + 1); return TK_IREG; }
     YY_BREAK
-case 194:
+case 195:
 YY_RULE_SETUP
-#line 1043 "pir.l"
+#line 1097 "pir.l"
 { yylval->ival = atoi(yytext + 1); return TK_SREG; }
     YY_BREAK
-case 195:
+case 196:
 YY_RULE_SETUP
-#line 1045 "pir.l"
+#line 1099 "pir.l"
 { /* can be a parrot op or a label; the check is done in the parser. */
                           yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
                           return TK_IDENT;
                         }
     YY_BREAK
-case 196:
-YY_RULE_SETUP
-#line 1050 "pir.l"
-{ yylval->dval = atof(yytext); return TK_NUMC; }
-    YY_BREAK
 case 197:
 YY_RULE_SETUP
-#line 1051 "pir.l"
-{ yylval->ival = atoi(yytext); return TK_INTC; }
+#line 1104 "pir.l"
+{ yylval->dval = atof(yytext); return TK_NUMC; }
     YY_BREAK
 case 198:
 YY_RULE_SETUP
-#line 1052 "pir.l"
+#line 1105 "pir.l"
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 199:
 YY_RULE_SETUP
-#line 1053 "pir.l"
+#line 1106 "pir.l"
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 200:
 YY_RULE_SETUP
-#line 1054 "pir.l"
+#line 1107 "pir.l"
 { yylval->ival = atoi(yytext); return TK_INTC; }
     YY_BREAK
 case 201:
 YY_RULE_SETUP
-#line 1056 "pir.l"
+#line 1108 "pir.l"
+{ yylval->ival = atoi(yytext); return TK_INTC; }
+    YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 1110 "pir.l"
 { /* copy the string, remove the quotes. */
                           yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext + 1, yyleng - 2);
                           return TK_STRINGC;
                         }
     YY_BREAK
-case 202:
+case 203:
 YY_RULE_SETUP
-#line 1061 "pir.l"
+#line 1115 "pir.l"
 { /* ignore whitespace */ }
     YY_BREAK
-case 203:
-/* rule 203 can match eol */
+case 204:
+/* rule 204 can match eol */
 YY_RULE_SETUP
-#line 1063 "pir.l"
+#line 1117 "pir.l"
 { return TK_NL; }
     YY_BREAK
-case 204:
+case 205:
 YY_RULE_SETUP
-#line 1065 "pir.l"
+#line 1119 "pir.l"
 { yypirerror(yyscanner, yypirget_extra(yyscanner),
                                      "unrecognized character: %c", yytext[0]);
                         }
     YY_BREAK
 case YY_STATE_EOF(PASM):
-#line 1068 "pir.l"
+#line 1122 "pir.l"
 { yyterminate(); }
     YY_BREAK
-case 205:
+case 206:
 YY_RULE_SETUP
-#line 1070 "pir.l"
+#line 1124 "pir.l"
 ECHO;
     YY_BREAK
-#line 3536 "pirlexer.c"
+#line 3594 "pirlexer.c"
 case YY_STATE_EOF(MACROHEAD):
 case YY_STATE_EOF(MACROLOCAL):
 case YY_STATE_EOF(MACROLABEL):
@@ -3844,7 +3902,7 @@
         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 >= 812 )
+            if ( yy_current_state >= 816 )
                 yy_c = yy_meta[(unsigned int) yy_c];
             }
         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3878,11 +3936,11 @@
     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 >= 812 )
+        if ( yy_current_state >= 816 )
             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 == 811);
+    yy_is_jam = (yy_current_state == 815);
 
     return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4786,7 +4844,7 @@
 
 /* %ok-for-header */
 
-#line 1070 "pir.l"
+#line 1124 "pir.l"
 
 
 

Modified: trunk/compilers/pirc/new/pirlexer.h
==============================================================================
--- trunk/compilers/pirc/new/pirlexer.h	(original)
+++ trunk/compilers/pirc/new/pirlexer.h	Sat Jan  3 04:17:51 2009
@@ -492,7 +492,7 @@
 #undef YY_DECL
 #endif
 
-#line 1070 "pir.l"
+#line 1124 "pir.l"
 
 
 #line 499 "pirlexer.h"



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About