80% Complete C parser for bitbake.
authorTim Ansell <mithro@mithis.com>
Sun, 16 Apr 2006 06:07:15 +0000 (06:07 +0000)
committerTim Ansell <mithro@mithis.com>
Sun, 16 Apr 2006 06:07:15 +0000 (06:07 +0000)
lib/bb/parse/parse_c/BBHandler.py
lib/bb/parse/parse_c/Makefile [new file with mode: 0644]
lib/bb/parse/parse_c/bitbakec.pyx [new file with mode: 0644]
lib/bb/parse/parse_c/bitbakeparser.cc
lib/bb/parse/parse_c/bitbakeparser.h
lib/bb/parse/parse_c/bitbakeparser.y
lib/bb/parse/parse_c/bitbakescanner.cc
lib/bb/parse/parse_c/bitbakescanner.l
lib/bb/parse/parse_c/lexer.h
lib/bb/parse/parse_c/lexerc.h [new file with mode: 0644]
lib/bb/parse/parse_c/python_output.h

index 771a7a0..d9f48db 100644 (file)
@@ -1,32 +1,43 @@
 # ex:ts=4:sw=4:sts=4:et
 # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
-#
-# Copyright (C) 2006 Holger Hans Peter Freyther
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-# SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-# THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
+"""class for handling .bb files (using a C++ parser)
+
+    Reads a .bb file and obtains its metadata (using a C++ parser)
+
+    Copyright (C) 2006 Tim Robert Ansell
+       Copyright (C) 2006 Holger Hans Peter Freyther
+   
+    This program is free software; you can redistribute it and/or modify it under
+    the terms of the GNU General Public License as published by the Free Software
+    Foundation; either version 2 of the License, or (at your option) any later
+    version.
+
+       Permission is hereby granted, free of charge, to any person obtaining a copy
+       of this software and associated documentation files (the "Software"), to deal
+       in the Software without restriction, including without limitation the rights
+       to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+       copies of the Software, and to permit persons to whom the Software is
+       furnished to do so, subject to the following conditions:
+
+       The above copyright notice and this permission notice shall be included in all
+       copies or substantial portions of the Software.
+
+       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+       IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+       FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+       SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+       DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+       OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+       THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+"""
+
+import os
 
 # The Module we will use here
-from bb import data, parse
-from bb.parse import ParseError
 import bb
 
+from bitbakec import parsefile
+
 #
 # This is the Python Part of the Native Parser Implementation.
 # We will only parse .bbclass, .inc and .bb files but no
@@ -36,11 +47,6 @@ import bb
 #
 # The rest of the methods are internal implementation details.
 
-
-
-#
-# internal
-#
 def _init(fn, d):
     """
     Initialize the data implementation with values of
@@ -52,32 +58,34 @@ def _init(fn, d):
 # public
 #
 def supports(fn, data):
-    return fn[-3:] == ".bb" or fn[-8:] == ".bbclass" or fn[-4:] == ".inc"
+    return fn[-3:] == ".bb" or fn[-8:] == ".bbclass" or fn[-4:] == ".inc" or fn[-5:] == ".conf"
 
 def init(fn, data):
-    if not bb.data.getVar('TOPDIR', data):
+    if not data.getVar('TOPDIR'):
         bb.error('TOPDIR is not set')
-    if not bb.data.getVar('BBPATH', data):
+    if not data.getVar('BBPATH'):
         bb.error('BBPATH is not set')
 
 
 def handle(fn, d, include):
     print ""
     print "fn: %s" % fn
-    print "data: %s" % data
+    print "data: %s" % d
+    print dir(d)
+    print d.getVar.__doc__
     print "include: %s" % include
 
     # check if we include or are the beginning
     if include:
-        oldfile = data.getVar('FILE', d)
+        oldfile = d.getVar('FILE')
     else:
-        data.inheritFromOS(d)
+        #d.inheritFromOS()
         oldfile = None
 
     # find the file
     if not os.path.isabs(fn):
         bb.error("No Absolute FILE name")
-        abs_fn = bb.which(data.getVar('BBPATH',d), fn)
+        abs_fn = bb.which(d.getVar('BBPATH'), fn)
     else:
         abs_fn = fn
 
@@ -85,20 +93,18 @@ def handle(fn, d, include):
     if not os.path.exists(abs_fn):
         raise IOError("file '%(fn)' not found" % locals() )
 
-    fn = file(abs_fn, 'r')
-
     # now we know the file is around mark it as dep
     if include:
         parse.mark_dependency(d, abs_fn)
 
     # now parse this file - by defering it to C++
-
+    parsefile(fn, d)
 
     # restore the original FILE
     if oldfile:
-        data.setVar('FILE', oldfile, data)
+        d.setVar('FILE', oldfile)
 
-    return data
+    return d
 
 # Inform bitbake that we are a parser
 # We need to define all three
diff --git a/lib/bb/parse/parse_c/Makefile b/lib/bb/parse/parse_c/Makefile
new file mode 100644 (file)
index 0000000..9eb7ce9
--- /dev/null
@@ -0,0 +1,36 @@
+
+test: bitbakec.so
+       python test.py
+
+bitbakescanner.cc: bitbakescanner.l
+       flex -t bitbakescanner.l > bitbakescanner.cc
+
+bitbakeparser.cc: bitbakeparser.y python_output.h 
+       lemon bitbakeparser.y
+       mv bitbakeparser.c bitbakeparser.cc
+
+bitbakec.c: bitbakec.pyx
+       pyrexc bitbakec.pyx
+
+bitbakec-processed.c: bitbakec.c
+       cat bitbakec.c | sed -e"s/__pyx_f_8bitbakec_//" > bitbakec-processed.c
+
+bitbakec.o: bitbakec-processed.c
+       gcc -c bitbakec-processed.c -o bitbakec.o -fPIC -I/usr/include/python2.4
+
+bitbakeparser.o: bitbakeparser.cc 
+       g++ -c bitbakeparser.cc -fPIC -I/usr/include/python2.4
+
+bitbakescanner.o: bitbakescanner.cc
+       g++ -c bitbakescanner.cc -fPIC -I/usr/include/python2.4
+
+bitbakec.so: bitbakec.o bitbakeparser.o bitbakescanner.o
+       g++ -shared -fPIC bitbakeparser.o bitbakescanner.o bitbakec.o -o bitbakec.so
+
+clean:
+       rm *.out
+       rm *.cc
+       rm bitbakec.c
+       rm bitbakec-processed.c
+       rm *.o
+       rm *.so
diff --git a/lib/bb/parse/parse_c/bitbakec.pyx b/lib/bb/parse/parse_c/bitbakec.pyx
new file mode 100644 (file)
index 0000000..362cc20
--- /dev/null
@@ -0,0 +1,180 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+
+cdef extern from "stdio.h":
+    ctypedef int FILE
+    FILE *fopen(char*, char*)
+    int fclose(FILE *fp)
+
+
+cdef extern from "lexerc.h":
+    ctypedef struct lex_t:
+        void* parser
+        void* scanner
+        FILE* file
+        void* data
+
+    int lineError
+    int errorParse
+
+    cdef extern void parse(FILE*, object)
+
+def parsefile(object file, object data):
+    print "parsefile: 1", file, data
+
+    # Open the file
+    cdef FILE* f
+
+    f = fopen(file, "r")
+    print "parsefile: 2 opening file"
+    if (f == NULL):
+        raise IOError("No such file %s." % file)
+
+    print "parsefile: 3 parse"
+    parse(f, data)
+
+    # Close the file
+    print "parsefile: 4 closing"
+    fclose(f)
+
+cdef public void e_assign(lex_t* container, char* key, char* what):
+    print "e_assign", key, what
+    d = <object>container.data
+    d.setVar(key, what)    
+
+cdef public void e_export(lex_t* c, char* what):
+    print "e_export", what
+    #exp:
+    # bb.data.setVarFlag(key, "export", 1, data)
+    d = <object>container.data
+    d.setVarFlag(key, "export", 1)
+
+cdef public void e_immediate(lex_t* c, char* key, char* what):
+    print "e_immediate", key, what
+    #colon:
+    # val = bb.data.expand(groupd["value"], data)
+    d = <object>c.data
+    d.setVar(key, d.expand(what))
+
+cdef public void e_cond(lex_t* c, char* key, char* what):
+    print "e_cond", key, what
+    #ques:
+    # val = bb.data.getVar(key, data)
+    # if val == None:    
+    #    val = groupd["value"]
+    d = <object>c.data
+    d.setVar(key, (d.getVar(key) or what))
+
+cdef public void e_prepend(lex_t* c, char* key, char* what):
+    print "e_prepend", key, what
+    #prepend:
+    # val = "%s %s" % (groupd["value"], (bb.data.getVar(key, data) or ""))
+    d = <object>c.data
+    d.setVar(key, what + " " + (d.getVar(key) or ""))
+
+cdef public void e_append(lex_t* c, char* key, char* what):
+    print "e_append", key, what
+    #append:
+    # val = "%s %s" % ((bb.data.getVar(key, data) or ""), groupd["value"])
+    d = <object>c.data
+    d.setVar(key, (d.getVar(key) or "") + " " + what)
+
+cdef public void e_precat(lex_t* c, char* key, char* what):
+    print "e_precat", key, what
+    #predot:
+    # val = "%s%s" % (groupd["value"], (bb.data.getVar(key, data) or ""))
+    d = <object>c.data
+    d.setVar(key, what + (d.getVar(key) or ""))
+
+cdef public void e_postcat(lex_t* c, char* key, char* what):
+    print "e_postcat", key, what
+    #postdot:
+    # val = "%s%s" % ((bb.data.getVar(key, data) or ""), groupd["value"])
+    d = <object>c.data
+    d.setVar(key, (d.getVar(key) or "") + what)
+
+cdef public void e_addtask(lex_t* c, char* name, char* before, char* after):
+    print "e_addtask", name, before, after
+    # func = m.group("func")
+    # before = m.group("before")
+    # after = m.group("after")
+    # if func is None:
+    #     return
+    # var = "do_" + func
+    #
+    # data.setVarFlag(var, "task", 1, d)
+    #
+    # if after is not None:
+    # #  set up deps for function
+    #     data.setVarFlag(var, "deps", after.split(), d)
+    # if before is not None:
+    # #   set up things that depend on this func
+    #     data.setVarFlag(var, "postdeps", before.split(), d)
+    # return
+    
+    do = "do_%s" % name
+    d = <object>c.data
+    d.setVarFlag(do, "task", 1)
+
+    if strlen(before) > 0:
+        d.setVarFlag(do, "deps", ("%s" % after).split())
+    if strlen(after) > 0:
+        d.setVarFlag(do, "deps", ("%s" % before).split())
+
+
+cdef public void e_addhandler(lex_t* c, char* h):
+    print "e_addhandler", h
+    # data.setVarFlag(h, "handler", 1, d)
+    d = <object>c.data
+    d.setVarFlag(h, "handler", 1)
+
+cdef public void e_export_func(lex_t* c, char* function):
+    print "e_export_func", function
+    pass
+
+cdef public void e_inherit(lex_t* c, char* file):
+    print "e_inherit", file
+    pass
+
+cdef public void e_include(lex_t* c, char* file):
+    print "e_include", file
+    d = <object>c.data
+    d.expand(file)
+    
+    try:
+        parsefile(file, d)
+    except IOError:
+        print "Could not include required file %s" % file
+
+
+cdef public void e_require(lex_t* c, char* file):
+    print "e_require", file
+    d = <object>c.data
+    d.expand(file)
+    
+    try:
+        parsefile(file, d)
+    except IOError:
+        raise CParseError("Could not include required file %s" % file)
+
+cdef public void e_proc(lex_t* c, char* key, char* what):
+    print "e_proc", key, what
+    pass
+
+cdef public void e_proc_python(lex_t* c, char* key, char* what):
+    print "e_proc_python", key, what
+    pass
+
+cdef public void e_proc_fakeroot(lex_t* c, char* key, char* what):
+    print "e_fakeroot", key, what
+    pass
+
+cdef public void e_def(lex_t* c, char* a, char* b, char* d):
+    print "e_def", key, what
+    pass
+
+cdef public void e_parse_error(lex_t* c):
+    print "e_parse_error", "line:", lineError, "parse:", errorParse
+    raise CParseError("There was an parse error, sorry unable to give more information at the current time.")
+
index 3a3c53d..ee9a901 100644 (file)
 **                       defined, then do no error processing.
 */
 #define YYCODETYPE unsigned char
-#define YYNOCODE 42
+#define YYNOCODE 44
 #define YYACTIONTYPE unsigned char
 #define bbparseTOKENTYPE token_t
 typedef union {
   bbparseTOKENTYPE yy0;
-  int yy83;
+  int yy87;
 } YYMINORTYPE;
 #define YYSTACKDEPTH 100
 #define bbparseARG_SDECL lex_t* lex;
 #define bbparseARG_PDECL ,lex_t* lex
 #define bbparseARG_FETCH lex_t* lex = yypParser->lex
 #define bbparseARG_STORE yypParser->lex = lex
-#define YYNSTATE 74
-#define YYNRULE 41
-#define YYERRORSYMBOL 28
-#define YYERRSYMDT yy83
+#define YYNSTATE 82
+#define YYNRULE 45
+#define YYERRORSYMBOL 30
+#define YYERRSYMDT yy87
 #define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
 #define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
 #define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
@@ -127,53 +127,63 @@ typedef union {
 **  yy_default[]       Default action for each state.
 */
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */    28,   47,    5,   57,   33,   58,   30,   25,   24,   37,
- /*    10 */    45,   14,    2,   29,   41,    3,   16,    4,   23,   39,
- /*    20 */    69,    8,   11,   17,   26,   48,   47,   32,   21,   42,
- /*    30 */    31,   57,   57,   73,   44,   10,   66,    7,   34,   38,
- /*    40 */    57,   51,   72,  116,    1,   62,    6,   49,   52,   35,
- /*    50 */    36,   59,   54,    9,   20,   64,   43,   22,   40,   50,
- /*    60 */    46,   71,   67,   60,   15,   65,   61,   70,   53,   56,
- /*    70 */    27,   12,   68,   63,   84,   55,   18,   84,   13,   84,
- /*    80 */    84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
- /*    90 */    84,   19,
+ /*     0 */    82,    3,    7,    8,   38,   22,   39,   24,   26,   32,
+ /*    10 */    34,   28,   30,  128,    1,   40,   53,   70,   55,    5,
+ /*    20 */    60,   65,   67,    2,   21,   36,   69,   77,    9,    7,
+ /*    30 */    11,    6,   13,   15,   17,   19,   12,   52,   50,    4,
+ /*    40 */    74,   42,   46,   59,   57,   10,   64,   62,   38,   14,
+ /*    50 */    73,   16,   38,   38,   76,   81,   18,   20,   23,   25,
+ /*    60 */    27,   29,   31,   33,   35,   37,   56,   51,   90,   54,
+ /*    70 */    58,   71,   41,   43,   63,   45,   44,   47,   72,   48,
+ /*    80 */    75,   78,   80,   61,   90,   49,   66,   90,   90,   68,
+ /*    90 */    90,   90,   90,   90,   90,   79,
 };
 static const YYCODETYPE yy_lookahead[] = {
- /*     0 */     1,    2,    3,   21,    4,   23,    6,    7,    8,    9,
- /*    10 */    31,   32,   13,   14,    1,   16,   39,   18,   19,   20,
- /*    20 */    37,   38,   22,   24,   25,    1,    2,    4,   10,    6,
- /*    30 */     7,   21,   21,   23,   23,   22,   35,   36,   11,   12,
- /*    40 */    21,    5,   23,   29,   30,   33,   34,    5,    5,   10,
- /*    50 */    12,   10,    5,   22,   39,   15,   40,   11,   10,    5,
- /*    60 */    26,   17,   17,   10,   32,   35,   33,   17,    5,    5,
- /*    70 */     1,   22,   37,    1,   41,    5,   39,   41,   27,   41,
- /*    80 */    41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
- /*    90 */    41,   39,
+ /*     0 */     0,    1,    2,    3,   23,    4,   25,    6,    7,    8,
+ /*    10 */     9,   10,   11,   31,   32,   15,   16,    1,   18,   42,
+ /*    20 */    20,   21,   22,   33,   34,   24,   26,   27,    1,    2,
+ /*    30 */     4,   28,    6,    7,    8,    9,    5,   35,   36,   29,
+ /*    40 */    24,   13,   14,   37,   38,   34,   39,   40,   23,    5,
+ /*    50 */    25,    5,   23,   23,   25,   25,    5,    5,    5,    5,
+ /*    60 */     5,    5,    5,    5,    5,   41,   17,   35,   43,    1,
+ /*    70 */    37,   24,   12,   12,   39,   12,   14,   12,   41,   13,
+ /*    80 */    41,    1,   41,   19,   43,   12,   19,   43,   43,   19,
+ /*    90 */    43,   43,   43,   43,   43,   24,
 };
-#define YY_SHIFT_USE_DFLT (-19)
-#define YY_SHIFT_MAX 43
+#define YY_SHIFT_USE_DFLT (-20)
 static const signed char yy_shift_ofst[] = {
- /*     0 */   -19,   -1,   18,   40,   45,   24,   18,   40,   45,  -19,
- /*    10 */   -19,  -19,  -19,  -19,    0,   23,  -18,   13,   19,   10,
- /*    20 */    11,   27,   53,   50,   63,   64,   69,   49,   51,   72,
- /*    30 */    70,   36,   42,   43,   39,   38,   41,   47,   48,   44,
- /*    40 */    46,   31,   54,   34,
+ /*     0 */   -20,    0,  -20,   10,  -20,    3,  -20,  -20,   27,  -20,
+ /*    10 */    26,   31,  -20,   44,  -20,   46,  -20,   51,  -20,   52,
+ /*    20 */   -20,    1,   53,  -20,   54,  -20,   55,  -20,   56,  -20,
+ /*    30 */    57,  -20,   58,  -20,   59,  -20,  -20,  -19,  -20,  -20,
+ /*    40 */    60,   28,   61,   62,   63,  -20,   65,   66,   73,  -20,
+ /*    50 */    60,  -20,  -20,   68,  -20,   49,  -20,   49,  -20,  -20,
+ /*    60 */    64,  -20,   64,  -20,  -20,   67,  -20,   70,  -20,   16,
+ /*    70 */    47,  -20,   25,  -20,  -20,   29,  -20,   80,   71,  -20,
+ /*    80 */    30,  -20,
 };
 #define YY_REDUCE_USE_DFLT (-24)
-#define YY_REDUCE_MAX 13
 static const signed char yy_reduce_ofst[] = {
- /*     0 */    14,  -21,   12,    1,  -17,   32,   33,   30,   35,   37,
- /*    10 */    52,  -23,   15,   16,
+ /*     0 */   -18,  -10,  -24,  -24,  -23,  -24,  -24,  -24,   11,  -24,
+ /*    10 */   -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
+ /*    20 */   -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
+ /*    30 */   -24,  -24,  -24,  -24,  -24,  -24,   24,  -24,  -24,  -24,
+ /*    40 */     2,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
+ /*    50 */    32,  -24,  -24,  -24,  -24,    6,  -24,   33,  -24,  -24,
+ /*    60 */     7,  -24,   35,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
+ /*    70 */   -24,   37,  -24,  -24,   39,  -24,  -24,  -24,  -24,   41,
+ /*    80 */   -24,  -24,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */    76,   74,  115,  115,  115,  115,   94,   99,  103,  107,
- /*    10 */   107,  107,  107,  113,  115,  115,  115,  115,  115,  115,
- /*    20 */   115,   89,  115,  115,  115,  115,  115,  115,   77,  115,
- /*    30 */   115,  115,  115,  115,  115,   90,  115,  115,  115,  115,
- /*    40 */    91,  115,  115,  114,  111,   75,  112,   78,   77,   79,
- /*    50 */    80,   81,   82,   83,   84,   85,   86,  106,  108,   87,
- /*    60 */    88,   92,   93,   95,   96,   97,   98,  100,  101,  102,
- /*    70 */   104,  105,  109,  110,
+ /*     0 */    84,  127,   83,   85,  125,  126,  124,   86,  127,   85,
+ /*    10 */   127,  127,   87,  127,   88,  127,   89,  127,   90,  127,
+ /*    20 */    91,  127,  127,   92,  127,   93,  127,   94,  127,   95,
+ /*    30 */   127,   96,  127,   97,  127,   98,  119,  127,  118,  120,
+ /*    40 */   127,  101,  127,  102,  127,   99,  127,  103,  127,  100,
+ /*    50 */   106,  104,  105,  127,  107,  127,  108,  111,  109,  110,
+ /*    60 */   127,  112,  115,  113,  114,  127,  116,  127,  117,  127,
+ /*    70 */   127,  119,  127,  121,  119,  127,  122,  127,  127,  119,
+ /*    80 */   127,  123,
 };
 #define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0]))
 
@@ -260,16 +270,16 @@ void bbparseTrace(FILE *TraceFILE, char *zTracePrompt){
 ** are required.  The following table supplies these names */
 static const char *const yyTokenName[] = { 
   "$",             "SYMBOL",        "VARIABLE",      "EXPORT",      
-  "OP_ASSIGN",     "STRING",        "OP_IMMEDIATE",  "OP_COND",     
-  "OP_PREPEND",    "OP_APPEND",     "TSYMBOL",       "BEFORE",      
-  "AFTER",         "ADDTASK",       "ADDHANDLER",    "FSYMBOL",     
-  "EXPORT_FUNC",   "ISYMBOL",       "INHERIT",       "INCLUDE",     
-  "REQUIRE",       "PROC_BODY",     "PROC_OPEN",     "PROC_CLOSE",  
-  "PYTHON",        "FAKEROOT",      "DEF_BODY",      "DEF_ARGS",    
-  "error",         "program",       "statements",    "statement",   
-  "variable",      "task",          "tasks",         "func",        
-  "funcs",         "inherit",       "inherits",      "proc_body",   
-  "def_body",    
+  "OP_ASSIGN",     "STRING",        "OP_PREDOT",     "OP_POSTDOT",  
+  "OP_IMMEDIATE",  "OP_COND",       "OP_PREPEND",    "OP_APPEND",   
+  "TSYMBOL",       "BEFORE",        "AFTER",         "ADDTASK",     
+  "ADDHANDLER",    "FSYMBOL",       "EXPORT_FUNC",   "ISYMBOL",     
+  "INHERIT",       "INCLUDE",       "REQUIRE",       "PROC_BODY",   
+  "PROC_OPEN",     "PROC_CLOSE",    "PYTHON",        "FAKEROOT",    
+  "DEF_BODY",      "DEF_ARGS",      "error",         "program",     
+  "statements",    "statement",     "variable",      "task",        
+  "tasks",         "func",          "funcs",         "inherit",     
+  "inherits",      "proc_body",     "def_body",    
 };
 #endif /* NDEBUG */
 
@@ -283,41 +293,45 @@ static const char *const yyRuleName[] = {
  /*   3 */ "variable ::= SYMBOL",
  /*   4 */ "variable ::= VARIABLE",
  /*   5 */ "statement ::= EXPORT variable OP_ASSIGN STRING",
- /*   6 */ "statement ::= EXPORT variable OP_IMMEDIATE STRING",
- /*   7 */ "statement ::= EXPORT variable OP_COND STRING",
- /*   8 */ "statement ::= variable OP_ASSIGN STRING",
- /*   9 */ "statement ::= variable OP_PREPEND STRING",
- /*  10 */ "statement ::= variable OP_APPEND STRING",
- /*  11 */ "statement ::= variable OP_IMMEDIATE STRING",
- /*  12 */ "statement ::= variable OP_COND STRING",
- /*  13 */ "task ::= TSYMBOL BEFORE TSYMBOL AFTER TSYMBOL",
- /*  14 */ "task ::= TSYMBOL AFTER TSYMBOL BEFORE TSYMBOL",
- /*  15 */ "task ::= TSYMBOL",
- /*  16 */ "task ::= TSYMBOL BEFORE TSYMBOL",
- /*  17 */ "task ::= TSYMBOL AFTER TSYMBOL",
- /*  18 */ "tasks ::= tasks task",
- /*  19 */ "tasks ::= task",
- /*  20 */ "statement ::= ADDTASK tasks",
- /*  21 */ "statement ::= ADDHANDLER SYMBOL",
- /*  22 */ "func ::= FSYMBOL",
- /*  23 */ "funcs ::= funcs func",
- /*  24 */ "funcs ::= func",
- /*  25 */ "statement ::= EXPORT_FUNC funcs",
- /*  26 */ "inherit ::= ISYMBOL",
- /*  27 */ "inherits ::= inherits inherit",
- /*  28 */ "inherits ::= inherit",
- /*  29 */ "statement ::= INHERIT inherits",
- /*  30 */ "statement ::= INCLUDE ISYMBOL",
- /*  31 */ "statement ::= REQUIRE ISYMBOL",
- /*  32 */ "proc_body ::= proc_body PROC_BODY",
- /*  33 */ "proc_body ::=",
- /*  34 */ "statement ::= variable PROC_OPEN proc_body PROC_CLOSE",
- /*  35 */ "statement ::= PYTHON SYMBOL PROC_OPEN proc_body PROC_CLOSE",
- /*  36 */ "statement ::= PYTHON PROC_OPEN proc_body PROC_CLOSE",
- /*  37 */ "statement ::= FAKEROOT SYMBOL PROC_OPEN proc_body PROC_CLOSE",
- /*  38 */ "def_body ::= def_body DEF_BODY",
- /*  39 */ "def_body ::=",
- /*  40 */ "statement ::= SYMBOL DEF_ARGS def_body",
+ /*   6 */ "statement ::= EXPORT variable OP_PREDOT STRING",
+ /*   7 */ "statement ::= EXPORT variable OP_POSTDOT STRING",
+ /*   8 */ "statement ::= EXPORT variable OP_IMMEDIATE STRING",
+ /*   9 */ "statement ::= EXPORT variable OP_COND STRING",
+ /*  10 */ "statement ::= variable OP_ASSIGN STRING",
+ /*  11 */ "statement ::= variable OP_PREDOT STRING",
+ /*  12 */ "statement ::= variable OP_POSTDOT STRING",
+ /*  13 */ "statement ::= variable OP_PREPEND STRING",
+ /*  14 */ "statement ::= variable OP_APPEND STRING",
+ /*  15 */ "statement ::= variable OP_IMMEDIATE STRING",
+ /*  16 */ "statement ::= variable OP_COND STRING",
+ /*  17 */ "task ::= TSYMBOL BEFORE TSYMBOL AFTER TSYMBOL",
+ /*  18 */ "task ::= TSYMBOL AFTER TSYMBOL BEFORE TSYMBOL",
+ /*  19 */ "task ::= TSYMBOL",
+ /*  20 */ "task ::= TSYMBOL BEFORE TSYMBOL",
+ /*  21 */ "task ::= TSYMBOL AFTER TSYMBOL",
+ /*  22 */ "tasks ::= tasks task",
+ /*  23 */ "tasks ::= task",
+ /*  24 */ "statement ::= ADDTASK tasks",
+ /*  25 */ "statement ::= ADDHANDLER SYMBOL",
+ /*  26 */ "func ::= FSYMBOL",
+ /*  27 */ "funcs ::= funcs func",
+ /*  28 */ "funcs ::= func",
+ /*  29 */ "statement ::= EXPORT_FUNC funcs",
+ /*  30 */ "inherit ::= ISYMBOL",
+ /*  31 */ "inherits ::= inherits inherit",
+ /*  32 */ "inherits ::= inherit",
+ /*  33 */ "statement ::= INHERIT inherits",
+ /*  34 */ "statement ::= INCLUDE ISYMBOL",
+ /*  35 */ "statement ::= REQUIRE ISYMBOL",
+ /*  36 */ "proc_body ::= proc_body PROC_BODY",
+ /*  37 */ "proc_body ::=",
+ /*  38 */ "statement ::= variable PROC_OPEN proc_body PROC_CLOSE",
+ /*  39 */ "statement ::= PYTHON SYMBOL PROC_OPEN proc_body PROC_CLOSE",
+ /*  40 */ "statement ::= PYTHON PROC_OPEN proc_body PROC_CLOSE",
+ /*  41 */ "statement ::= FAKEROOT SYMBOL PROC_OPEN proc_body PROC_CLOSE",
+ /*  42 */ "def_body ::= def_body DEF_BODY",
+ /*  43 */ "def_body ::=",
+ /*  44 */ "statement ::= SYMBOL DEF_ARGS def_body",
 };
 #endif /* NDEBUG */
 
@@ -402,9 +416,11 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
     case 25:
     case 26:
     case 27:
+    case 28:
+    case 29:
 #line 50 "bitbakeparser.y"
 { (yypminor->yy0).release_this (); }
-#line 409 "bitbakeparser.c"
+#line 425 "bitbakeparser.c"
       break;
     default:  break;   /* If no destructor action specified: do nothing */
   }
@@ -473,7 +489,9 @@ static int yy_find_shift_action(
   int i;
   int stateno = pParser->yystack[pParser->yyidx].stateno;
  
-  if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
+  /* if( pParser->yyidx<0 ) return YY_NO_ACTION;  */
+  i = yy_shift_ofst[stateno];
+  if( i==YY_SHIFT_USE_DFLT ){
     return yy_default[stateno];
   }
   if( iLookAhead==YYNOCODE ){
@@ -515,8 +533,8 @@ static int yy_find_reduce_action(
   int i;
   /* int stateno = pParser->yystack[pParser->yyidx].stateno; */
  
-  if( stateno>YY_REDUCE_MAX ||
-      (i = yy_reduce_ofst[stateno])==YY_REDUCE_USE_DFLT ){
+  i = yy_reduce_ofst[stateno];
+  if( i==YY_REDUCE_USE_DFLT ){
     return yy_default[stateno];
   }
   if( iLookAhead==YYNOCODE ){
@@ -578,47 +596,51 @@ static const struct {
   YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
   unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
 } yyRuleInfo[] = {
-  { 29, 1 },
-  { 30, 2 },
-  { 30, 0 },
-  { 32, 1 },
-  { 32, 1 },
-  { 31, 4 },
-  { 31, 4 },
-  { 31, 4 },
-  { 31, 3 },
-  { 31, 3 },
-  { 31, 3 },
-  { 31, 3 },
-  { 31, 3 },
-  { 33, 5 },
-  { 33, 5 },
-  { 33, 1 },
+  { 31, 1 },
+  { 32, 2 },
+  { 32, 0 },
+  { 34, 1 },
+  { 34, 1 },
+  { 33, 4 },
+  { 33, 4 },
+  { 33, 4 },
+  { 33, 4 },
+  { 33, 4 },
   { 33, 3 },
   { 33, 3 },
-  { 34, 2 },
-  { 34, 1 },
-  { 31, 2 },
-  { 31, 2 },
+  { 33, 3 },
+  { 33, 3 },
+  { 33, 3 },
+  { 33, 3 },
+  { 33, 3 },
+  { 35, 5 },
+  { 35, 5 },
   { 35, 1 },
+  { 35, 3 },
+  { 35, 3 },
   { 36, 2 },
   { 36, 1 },
-  { 31, 2 },
+  { 33, 2 },
+  { 33, 2 },
   { 37, 1 },
   { 38, 2 },
   { 38, 1 },
-  { 31, 2 },
-  { 31, 2 },
-  { 31, 2 },
-  { 39, 2 },
-  { 39, 0 },
-  { 31, 4 },
-  { 31, 5 },
-  { 31, 4 },
-  { 31, 5 },
+  { 33, 2 },
+  { 39, 1 },
   { 40, 2 },
-  { 40, 0 },
-  { 31, 3 },
+  { 40, 1 },
+  { 33, 2 },
+  { 33, 2 },
+  { 33, 2 },
+  { 41, 2 },
+  { 41, 0 },
+  { 33, 4 },
+  { 33, 5 },
+  { 33, 4 },
+  { 33, 5 },
+  { 42, 2 },
+  { 42, 0 },
+  { 33, 3 },
 };
 
 static void yy_accept(yyParser*);  /* Forward Declaration */
@@ -672,7 +694,7 @@ static void yy_reduce(
 { yygotominor.yy0.assignString( (char*)yymsp[0].minor.yy0.string() );
           yymsp[0].minor.yy0.assignString( 0 );
           yymsp[0].minor.yy0.release_this(); }
-#line 677 "bitbakeparser.c"
+#line 699 "bitbakeparser.c"
         break;
       case 4:
 #line 64 "bitbakeparser.y"
@@ -680,7 +702,7 @@ static void yy_reduce(
           yygotominor.yy0.assignString( (char*)yymsp[0].minor.yy0.string() );
           yymsp[0].minor.yy0.assignString( 0 );
           yymsp[0].minor.yy0.release_this(); }
-#line 685 "bitbakeparser.c"
+#line 707 "bitbakeparser.c"
         break;
       case 5:
 #line 70 "bitbakeparser.y"
@@ -689,191 +711,223 @@ static void yy_reduce(
           yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(3,&yymsp[-3].minor);
   yy_destructor(4,&yymsp[-1].minor);
 }
-#line 694 "bitbakeparser.c"
+#line 716 "bitbakeparser.c"
         break;
       case 6:
 #line 74 "bitbakeparser.y"
-{ e_immediate ( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+{ e_precat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
           e_export( lex, yymsp[-2].minor.yy0.string() );
           yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(3,&yymsp[-3].minor);
   yy_destructor(6,&yymsp[-1].minor);
 }
-#line 703 "bitbakeparser.c"
+#line 725 "bitbakeparser.c"
         break;
       case 7:
 #line 78 "bitbakeparser.y"
-{ e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+{ e_postcat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          e_export( lex, yymsp[-2].minor.yy0.string() );
           yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(3,&yymsp[-3].minor);
   yy_destructor(7,&yymsp[-1].minor);
 }
-#line 711 "bitbakeparser.c"
+#line 734 "bitbakeparser.c"
         break;
       case 8:
 #line 82 "bitbakeparser.y"
-{ e_assign( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
-          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(4,&yymsp[-1].minor);
+{ e_immediate ( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          e_export( lex, yymsp[-2].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(3,&yymsp[-3].minor);
+  yy_destructor(8,&yymsp[-1].minor);
 }
-#line 718 "bitbakeparser.c"
+#line 743 "bitbakeparser.c"
         break;
       case 9:
-#line 85 "bitbakeparser.y"
-{ e_prepend( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
-          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(8,&yymsp[-1].minor);
+#line 86 "bitbakeparser.y"
+{ e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(3,&yymsp[-3].minor);
+  yy_destructor(9,&yymsp[-1].minor);
 }
-#line 725 "bitbakeparser.c"
+#line 751 "bitbakeparser.c"
         break;
       case 10:
-#line 88 "bitbakeparser.y"
-{ e_append( lex, yymsp[-2].minor.yy0.string() , yymsp[0].minor.yy0.string() );
-          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(9,&yymsp[-1].minor);
+#line 90 "bitbakeparser.y"
+{ e_assign( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(4,&yymsp[-1].minor);
 }
-#line 732 "bitbakeparser.c"
+#line 758 "bitbakeparser.c"
         break;
       case 11:
-#line 91 "bitbakeparser.y"
-{ e_immediate( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+#line 93 "bitbakeparser.y"
+{ e_precat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
           yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(6,&yymsp[-1].minor);
 }
-#line 739 "bitbakeparser.c"
+#line 765 "bitbakeparser.c"
         break;
       case 12:
-#line 94 "bitbakeparser.y"
-{ e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+#line 96 "bitbakeparser.y"
+{ e_postcat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
           yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(7,&yymsp[-1].minor);
 }
-#line 746 "bitbakeparser.c"
+#line 772 "bitbakeparser.c"
         break;
       case 13:
-#line 98 "bitbakeparser.y"
-{ e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
-          yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(11,&yymsp[-3].minor);
-  yy_destructor(12,&yymsp[-1].minor);
+#line 99 "bitbakeparser.y"
+{ e_prepend( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(10,&yymsp[-1].minor);
 }
-#line 754 "bitbakeparser.c"
+#line 779 "bitbakeparser.c"
         break;
       case 14:
-#line 101 "bitbakeparser.y"
-{ e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[0].minor.yy0.string(), yymsp[-2].minor.yy0.string());
-          yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(12,&yymsp[-3].minor);
-  yy_destructor(11,&yymsp[-1].minor);
+#line 102 "bitbakeparser.y"
+{ e_append( lex, yymsp[-2].minor.yy0.string() , yymsp[0].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(11,&yymsp[-1].minor);
 }
-#line 762 "bitbakeparser.c"
+#line 786 "bitbakeparser.c"
         break;
       case 15:
-#line 104 "bitbakeparser.y"
+#line 105 "bitbakeparser.y"
+{ e_immediate( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(8,&yymsp[-1].minor);
+}
+#line 793 "bitbakeparser.c"
+        break;
+      case 16:
+#line 108 "bitbakeparser.y"
+{ e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(9,&yymsp[-1].minor);
+}
+#line 800 "bitbakeparser.c"
+        break;
+      case 17:
+#line 112 "bitbakeparser.y"
+{ e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() );
+          yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(13,&yymsp[-3].minor);
+  yy_destructor(14,&yymsp[-1].minor);
+}
+#line 808 "bitbakeparser.c"
+        break;
+      case 18:
+#line 115 "bitbakeparser.y"
+{ e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[0].minor.yy0.string(), yymsp[-2].minor.yy0.string());
+          yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(14,&yymsp[-3].minor);
+  yy_destructor(13,&yymsp[-1].minor);
+}
+#line 816 "bitbakeparser.c"
+        break;
+      case 19:
+#line 118 "bitbakeparser.y"
 { e_addtask( lex, yymsp[0].minor.yy0.string(), NULL, NULL);
           yymsp[0].minor.yy0.release_this();}
-#line 768 "bitbakeparser.c"
+#line 822 "bitbakeparser.c"
         break;
-      case 16:
-#line 107 "bitbakeparser.y"
+      case 20:
+#line 121 "bitbakeparser.y"
 { e_addtask( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string(), NULL);
-          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(11,&yymsp[-1].minor);
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(13,&yymsp[-1].minor);
 }
-#line 775 "bitbakeparser.c"
+#line 829 "bitbakeparser.c"
         break;
-      case 17:
-#line 110 "bitbakeparser.y"
+      case 21:
+#line 124 "bitbakeparser.y"
 { e_addtask( lex, yymsp[-2].minor.yy0.string(), NULL, yymsp[0].minor.yy0.string());
-          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(12,&yymsp[-1].minor);
+          yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this();   yy_destructor(14,&yymsp[-1].minor);
 }
-#line 782 "bitbakeparser.c"
+#line 836 "bitbakeparser.c"
         break;
-      case 21:
-#line 117 "bitbakeparser.y"
-{ e_addhandler( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this ();   yy_destructor(14,&yymsp[-1].minor);
+      case 25:
+#line 131 "bitbakeparser.y"
+{ e_addhandler( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this ();   yy_destructor(16,&yymsp[-1].minor);
 }
-#line 788 "bitbakeparser.c"
+#line 842 "bitbakeparser.c"
         break;
-      case 22:
-#line 119 "bitbakeparser.y"
+      case 26:
+#line 133 "bitbakeparser.y"
 { e_export_func( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this(); }
-#line 793 "bitbakeparser.c"
+#line 847 "bitbakeparser.c"
         break;
-      case 26:
-#line 124 "bitbakeparser.y"
+      case 30:
+#line 138 "bitbakeparser.y"
 { e_inherit( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this (); }
-#line 798 "bitbakeparser.c"
+#line 852 "bitbakeparser.c"
         break;
-      case 30:
-#line 130 "bitbakeparser.y"
-{ e_include( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this();   yy_destructor(19,&yymsp[-1].minor);
+      case 34:
+#line 144 "bitbakeparser.y"
+{ e_include( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this();   yy_destructor(21,&yymsp[-1].minor);
 }
-#line 804 "bitbakeparser.c"
+#line 858 "bitbakeparser.c"
         break;
-      case 31:
-#line 133 "bitbakeparser.y"
-{ e_require( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this();   yy_destructor(20,&yymsp[-1].minor);
+      case 35:
+#line 147 "bitbakeparser.y"
+{ e_require( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this();   yy_destructor(22,&yymsp[-1].minor);
 }
-#line 810 "bitbakeparser.c"
+#line 864 "bitbakeparser.c"
         break;
-      case 32:
-#line 136 "bitbakeparser.y"
+      case 36:
+#line 150 "bitbakeparser.y"
 { /* concatenate body lines */
           yygotominor.yy0.assignString( token_t::concatString(yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()) );
           yymsp[-1].minor.yy0.release_this ();
           yymsp[0].minor.yy0.release_this ();
         }
-#line 819 "bitbakeparser.c"
+#line 873 "bitbakeparser.c"
         break;
-      case 33:
-#line 141 "bitbakeparser.y"
+      case 37:
+#line 155 "bitbakeparser.y"
 { yygotominor.yy0.assignString(0); }
-#line 824 "bitbakeparser.c"
+#line 878 "bitbakeparser.c"
         break;
-      case 34:
-#line 143 "bitbakeparser.y"
+      case 38:
+#line 157 "bitbakeparser.y"
 { e_proc( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() );
-          yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this();   yy_destructor(22,&yymsp[-2].minor);
-  yy_destructor(23,&yymsp[0].minor);
+          yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this();   yy_destructor(24,&yymsp[-2].minor);
+  yy_destructor(25,&yymsp[0].minor);
 }
-#line 832 "bitbakeparser.c"
+#line 886 "bitbakeparser.c"
         break;
-      case 35:
-#line 146 "bitbakeparser.y"
+      case 39:
+#line 160 "bitbakeparser.y"
 { e_proc_python ( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() );
-          yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this();   yy_destructor(24,&yymsp[-4].minor);
-  yy_destructor(22,&yymsp[-2].minor);
-  yy_destructor(23,&yymsp[0].minor);
+          yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this();   yy_destructor(26,&yymsp[-4].minor);
+  yy_destructor(24,&yymsp[-2].minor);
+  yy_destructor(25,&yymsp[0].minor);
 }
-#line 841 "bitbakeparser.c"
+#line 895 "bitbakeparser.c"
         break;
-      case 36:
-#line 149 "bitbakeparser.y"
+      case 40:
+#line 163 "bitbakeparser.y"
 { e_proc_python( lex, NULL, yymsp[-1].minor.yy0.string());
-          yymsp[-1].minor.yy0.release_this ();   yy_destructor(24,&yymsp[-3].minor);
-  yy_destructor(22,&yymsp[-2].minor);
-  yy_destructor(23,&yymsp[0].minor);
+          yymsp[-1].minor.yy0.release_this ();   yy_destructor(26,&yymsp[-3].minor);
+  yy_destructor(24,&yymsp[-2].minor);
+  yy_destructor(25,&yymsp[0].minor);
 }
-#line 850 "bitbakeparser.c"
+#line 904 "bitbakeparser.c"
         break;
-      case 37:
-#line 153 "bitbakeparser.y"
+      case 41:
+#line 167 "bitbakeparser.y"
 { e_proc_fakeroot( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() );
-          yymsp[-3].minor.yy0.release_this (); yymsp[-1].minor.yy0.release_this ();   yy_destructor(25,&yymsp[-4].minor);
-  yy_destructor(22,&yymsp[-2].minor);
-  yy_destructor(23,&yymsp[0].minor);
+          yymsp[-3].minor.yy0.release_this (); yymsp[-1].minor.yy0.release_this ();   yy_destructor(27,&yymsp[-4].minor);
+  yy_destructor(24,&yymsp[-2].minor);
+  yy_destructor(25,&yymsp[0].minor);
 }
-#line 859 "bitbakeparser.c"
+#line 913 "bitbakeparser.c"
         break;
-      case 38:
-#line 157 "bitbakeparser.y"
+      case 42:
+#line 171 "bitbakeparser.y"
 { /* concatenate body lines */
           yygotominor.yy0.assignString( token_t::concatString(yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()) );
           yymsp[-1].minor.yy0.release_this (); yymsp[0].minor.yy0.release_this ();
         }
-#line 867 "bitbakeparser.c"
+#line 921 "bitbakeparser.c"
         break;
-      case 39:
-#line 161 "bitbakeparser.y"
+      case 43:
+#line 175 "bitbakeparser.y"
 { yygotominor.yy0.assignString( 0 ); }
-#line 872 "bitbakeparser.c"
+#line 926 "bitbakeparser.c"
         break;
-      case 40:
-#line 163 "bitbakeparser.y"
+      case 44:
+#line 177 "bitbakeparser.y"
 { e_def( lex, yymsp[-2].minor.yy0.string(), yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string());
           yymsp[-2].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); }
-#line 878 "bitbakeparser.c"
+#line 932 "bitbakeparser.c"
         break;
   };
   yygoto = yyRuleInfo[yyruleno].lhs;
@@ -932,7 +986,7 @@ static void yy_syntax_error(
 #define TOKEN (yyminor.yy0)
 #line 52 "bitbakeparser.y"
  e_parse_error( lex ); 
-#line 938 "bitbakeparser.c"
+#line 992 "bitbakeparser.c"
   bbparseARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }
 
index 2e51702..a2c9aa3 100644 (file)
@@ -3,25 +3,27 @@
 #define T_EXPORT                          3
 #define T_OP_ASSIGN                       4
 #define T_STRING                          5
-#define T_OP_IMMEDIATE                    6
-#define T_OP_COND                         7
-#define T_OP_PREPEND                      8
-#define T_OP_APPEND                       9
-#define T_TSYMBOL                        10
-#define T_BEFORE                         11
-#define T_AFTER                          12
-#define T_ADDTASK                        13
-#define T_ADDHANDLER                     14
-#define T_FSYMBOL                        15
-#define T_EXPORT_FUNC                    16
-#define T_ISYMBOL                        17
-#define T_INHERIT                        18
-#define T_INCLUDE                        19
-#define T_REQUIRE                        20
-#define T_PROC_BODY                      21
-#define T_PROC_OPEN                      22
-#define T_PROC_CLOSE                     23
-#define T_PYTHON                         24
-#define T_FAKEROOT                       25
-#define T_DEF_BODY                       26
-#define T_DEF_ARGS                       27
+#define T_OP_PREDOT                       6
+#define T_OP_POSTDOT                      7
+#define T_OP_IMMEDIATE                    8
+#define T_OP_COND                         9
+#define T_OP_PREPEND                     10
+#define T_OP_APPEND                      11
+#define T_TSYMBOL                        12
+#define T_BEFORE                         13
+#define T_AFTER                          14
+#define T_ADDTASK                        15
+#define T_ADDHANDLER                     16
+#define T_FSYMBOL                        17
+#define T_EXPORT_FUNC                    18
+#define T_ISYMBOL                        19
+#define T_INHERIT                        20
+#define T_INCLUDE                        21
+#define T_REQUIRE                        22
+#define T_PROC_BODY                      23
+#define T_PROC_OPEN                      24
+#define T_PROC_CLOSE                     25
+#define T_PYTHON                         26
+#define T_FAKEROOT                       27
+#define T_DEF_BODY                       28
+#define T_DEF_ARGS                       29
index 252d877..c18e535 100644 (file)
@@ -70,6 +70,14 @@ statement ::= EXPORT variable(s) OP_ASSIGN STRING(v).
         { e_assign( lex, s.string(), v.string() );
           e_export( lex, s.string() );
           s.release_this(); v.release_this(); }
+statement ::= EXPORT variable(s) OP_PREDOT STRING(v).
+        { e_precat( lex, s.string(), v.string() );
+          e_export( lex, s.string() );
+          s.release_this(); v.release_this(); }
+statement ::= EXPORT variable(s) OP_POSTDOT STRING(v).
+        { e_postcat( lex, s.string(), v.string() );
+          e_export( lex, s.string() );
+          s.release_this(); v.release_this(); }
 statement ::= EXPORT variable(s) OP_IMMEDIATE STRING(v).
         { e_immediate ( lex, s.string(), v.string() );
           e_export( lex, s.string() );
@@ -81,6 +89,12 @@ statement ::= EXPORT variable(s) OP_COND STRING(v).
 statement ::= variable(s) OP_ASSIGN STRING(v).
         { e_assign( lex, s.string(), v.string() );
           s.release_this(); v.release_this(); }
+statement ::= variable(s) OP_PREDOT STRING(v).
+        { e_precat( lex, s.string(), v.string() );
+          s.release_this(); v.release_this(); }
+statement ::= variable(s) OP_POSTDOT STRING(v).
+        { e_postcat( lex, s.string(), v.string() );
+          s.release_this(); v.release_this(); }
 statement ::= variable(s) OP_PREPEND STRING(v).
         { e_prepend( lex, s.string(), v.string() );
           s.release_this(); v.release_this(); }
index 8e95fd9..43dad12 100644 (file)
@@ -355,8 +355,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 45
-#define YY_END_OF_BUFFER 46
+#define YY_NUM_RULES 47
+#define YY_END_OF_BUFFER 48
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -364,96 +364,98 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[798] =
+static yyconst flex_int16_t yy_accept[813] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   24,   24,    0,    0,
-        0,    0,   46,   44,   43,   43,   44,   44,   44,   44,
-       44,    4,   44,   33,   33,   33,   33,   33,   33,   33,
-       33,   33,   26,   26,   26,   26,   26,   26,   44,   43,
-       28,   43,   44,   44,   44,   27,    4,   44,   44,   44,
-       44,   44,   44,   31,   31,   30,   31,   31,   31,   31,
-       31,    4,   31,   31,   31,   31,   31,   31,   41,   36,
-       36,   36,   36,   36,   36,   44,   38,   38,   38,   38,
-       38,   38,   42,   37,   37,   37,   37,   37,   37,   44,
-
-       39,   39,   39,   39,   39,   39,   24,   24,   24,   24,
-       24,   24,   24,    4,   24,   24,   24,   24,   24,   24,
-       23,    9,   43,   10,    9,   44,    9,   44,    9,    9,
-        9,    4,    9,    9,    9,    9,    9,    9,    9,   40,
-       35,   35,   35,   35,   35,   35,   35,    0,   32,   34,
-        0,    0,    1,    3,    2,    5,    0,   33,    0,   33,
-       33,   33,   33,   33,   33,   33,   33,   26,   26,   26,
-       26,   26,   26,    0,   27,    0,   28,    0,   27,    0,
-        0,    1,    2,    5,    0,    0,    0,    0,    0,    0,
-        0,   29,    0,    0,    0,    0,    0,   36,   36,   36,
-
-       36,   36,   36,    0,    0,   38,   38,   38,   38,   38,
-       38,   37,   37,   37,   37,   37,   37,    0,    0,   39,
-       39,   39,   39,   39,   39,   24,   24,   24,   24,   24,
-       24,    1,    3,    2,    5,   24,   24,   24,   24,   24,
-       23,   23,    9,    0,    9,    0,   10,    0,    7,    0,
-        9,    0,    9,    0,    8,    0,    0,    9,    1,    3,
-        2,    5,    9,    6,    9,    9,    9,    9,   35,   35,
-       35,   35,   35,   35,   35,   35,   34,    0,   22,    0,
-        0,   34,   33,   33,   25,   33,   33,   33,   33,   33,
-       33,   26,   26,   25,   26,   26,   26,    0,   22,    0,
-
-        0,   25,    0,    0,    0,    0,    0,   25,    0,    0,
-        0,   36,   36,   25,   36,   36,   36,    0,    0,   38,
-       38,   25,   38,   38,   38,   37,   37,   25,   37,   37,
-       37,    0,    0,   39,   39,   25,   39,   39,   39,   24,
-       22,   24,   24,   24,   24,   24,   24,   32,    0,    9,
-        9,    6,    9,    9,    9,    9,    9,   35,   35,   35,
-       35,   25,   35,   35,   35,   22,   22,    0,   33,   33,
-       33,   33,   33,   33,   33,   33,   33,   26,   26,   26,
-       26,   26,   26,   22,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   36,   36,   36,   36,
-
-       36,   36,    0,   38,    0,   38,   38,   38,   38,   38,
-       38,   37,   37,   37,   37,   37,   37,    0,   39,    0,
-       39,   39,   39,   39,   39,   39,   22,   22,   24,   24,
-       24,   24,   24,   24,   22,    9,    9,    9,    9,    9,
-        9,   35,   35,   35,   35,   35,   35,   35,   35,    0,
-       34,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-       26,   26,   26,   26,   26,   26,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   36,   36,
-       36,   36,   36,   36,    0,   38,   38,   38,   38,   38,
-       38,   38,   37,   37,   37,   37,   37,   37,    0,   39,
-
-       39,   39,   39,   39,   39,   39,   24,   24,   24,   24,
-       24,   24,    9,    9,    9,    9,    9,    9,   35,   35,
-       35,   18,   35,   35,   35,   35,   33,   33,   33,   19,
-       33,   33,   33,   21,   33,   26,   26,   26,   26,   26,
-       26,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   36,   36,   36,   36,   36,   36,   38,
-       38,   38,   38,   38,   38,   37,   37,   37,   37,   37,
-       37,   39,   39,   39,   39,   39,   39,   24,   24,   24,
-       24,   24,   24,    9,    9,    9,    9,    9,    9,   35,
-       35,   35,   17,   35,   35,   35,   33,   33,   14,   33,
-
-       11,   13,   12,   26,   26,   14,   11,   13,   12,    0,
-        0,   14,   11,   13,   12,    0,    0,   14,   11,   13,
-       12,   36,   36,   14,   11,   13,   12,   38,   38,   14,
-       11,   13,   12,   37,   37,   14,   11,   13,   12,   39,
-       39,   14,   11,   13,   12,   24,   24,   14,   11,   13,
-       12,    9,    9,    9,    9,    9,    9,   35,   35,   14,
-       11,   13,   12,   33,   33,   20,   26,   26,    0,    0,
-        0,    0,   36,   36,   38,   38,   37,   37,   39,   39,
-       24,   24,    9,    9,   35,   35,   33,   33,   26,   26,
-        0,    0,    0,    0,   36,   36,   38,   38,   37,   37,
-
-       39,   39,   24,   24,    9,    9,   35,   35,   33,   15,
-       26,   15,    0,   15,    0,   15,   36,   15,   38,   15,
-       37,   15,   39,   15,   24,   15,    9,    9,   35,   15,
-       33,   26,    0,    0,   36,   38,   37,   39,   24,    9,
-       35,   33,   26,    0,    0,   36,   38,   37,   39,   24,
-        9,   35,   33,   26,    0,    0,   36,   38,   37,   39,
-       24,    9,   35,   33,   26,    0,    0,   36,   38,   37,
-       39,   24,    9,   35,   33,   26,    0,    0,   36,   38,
-       37,   39,   24,    9,   35,   16,   16,   16,   16,   16,
-       16,   16,   16,   16,    9,   16,    0
+        0,    0,    0,    0,    0,    0,   26,   26,    0,    0,
+        0,    0,   48,   46,   45,   45,   46,   46,   46,   46,
+       46,   46,    4,   46,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   28,   28,   28,   28,   28,   28,   46,
+       45,   30,   45,   46,   46,   46,   46,   29,    4,   46,
+       46,   46,   46,   46,   46,   33,   33,   32,   33,   33,
+       33,   33,   33,   33,    4,   33,   33,   33,   33,   33,
+       33,   43,   38,   38,   38,   38,   38,   38,   46,   40,
+       40,   40,   40,   40,   40,   40,   44,   39,   39,   39,
+
+       39,   39,   39,   46,   41,   41,   41,   41,   41,   41,
+       41,   26,   26,   26,   26,   26,   26,   26,   26,    4,
+       26,   26,   26,   26,   26,   26,   25,   11,   45,   12,
+       11,   46,   11,   46,   11,   11,   11,   11,    4,   11,
+       11,   11,   11,   11,   11,   11,   42,   37,   37,   37,
+       37,   37,   37,   37,    0,   34,   36,    0,    0,    1,
+        5,    3,    2,    6,    7,    0,   35,    0,   35,   35,
+       35,   35,   35,   35,   35,   35,   28,   28,   28,   28,
+       28,   28,    0,   29,    0,   30,    0,   29,    0,    0,
+        1,    5,    2,    6,    7,    0,    0,    0,    0,    0,
+
+        0,    0,   31,    0,    0,    0,    0,    0,   38,   38,
+       38,   38,   38,   38,    0,    0,   40,   40,   40,   40,
+       40,   40,   39,   39,   39,   39,   39,   39,    0,    0,
+       41,   41,   41,   41,   41,   41,   26,   26,   26,   26,
+       26,   26,    1,    5,    3,    2,    6,    7,   26,   26,
+       26,   26,   26,   25,   25,   11,    0,   11,    0,   12,
+        0,    9,    0,   11,    0,   11,    0,   10,    0,    0,
+       11,    1,    5,    3,    2,    6,    7,   11,    8,   11,
+       11,   11,   11,   37,   37,   37,   37,   37,   37,   37,
+       37,   36,    0,   24,    0,    0,   36,   35,   35,   27,
+
+       35,   35,   35,   35,   35,   35,   28,   28,   27,   28,
+       28,   28,    0,   24,    0,    0,   27,    0,    0,    0,
+        0,    0,   27,    0,    0,    0,   38,   38,   27,   38,
+       38,   38,    0,    0,   40,   40,   27,   40,   40,   40,
+       39,   39,   27,   39,   39,   39,    0,    0,   41,   41,
+       27,   41,   41,   41,   26,   24,   26,   26,   26,   26,
+       26,   26,   34,    0,   11,   11,    8,   11,   11,   11,
+       11,   11,   37,   37,   37,   37,   27,   37,   37,   37,
+       24,   24,    0,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   28,   28,   28,   28,   28,   28,   24,    0,
 
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,   38,   38,   38,    0,   40,    0,
+       40,   40,   40,   40,   40,   40,   39,   39,   39,   39,
+       39,   39,    0,   41,    0,   41,   41,   41,   41,   41,
+       41,   24,   24,   26,   26,   26,   26,   26,   26,   24,
+       11,   11,   11,   11,   11,   11,   37,   37,   37,   37,
+       37,   37,   37,   37,    0,   36,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   28,   28,   28,   28,   28,
+       28,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,   38,   38,   38,   38,   38,    0,
+
+       40,   40,   40,   40,   40,   40,   40,   39,   39,   39,
+       39,   39,   39,    0,   41,   41,   41,   41,   41,   41,
+       41,   26,   26,   26,   26,   26,   26,   11,   11,   11,
+       11,   11,   11,   37,   37,   37,   20,   37,   37,   37,
+       37,   35,   35,   35,   21,   35,   35,   35,   23,   35,
+       28,   28,   28,   28,   28,   28,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,   38,
+       38,   38,   38,   38,   40,   40,   40,   40,   40,   40,
+       39,   39,   39,   39,   39,   39,   41,   41,   41,   41,
+       41,   41,   26,   26,   26,   26,   26,   26,   11,   11,
+
+       11,   11,   11,   11,   37,   37,   37,   19,   37,   37,
+       37,   35,   35,   16,   35,   13,   15,   14,   28,   28,
+       16,   13,   15,   14,    0,    0,   16,   13,   15,   14,
+        0,    0,   16,   13,   15,   14,   38,   38,   16,   13,
+       15,   14,   40,   40,   16,   13,   15,   14,   39,   39,
+       16,   13,   15,   14,   41,   41,   16,   13,   15,   14,
+       26,   26,   16,   13,   15,   14,   11,   11,   11,   11,
+       11,   11,   37,   37,   16,   13,   15,   14,   35,   35,
+       22,   28,   28,    0,    0,    0,    0,   38,   38,   40,
+       40,   39,   39,   41,   41,   26,   26,   11,   11,   37,
+
+       37,   35,   35,   28,   28,    0,    0,    0,    0,   38,
+       38,   40,   40,   39,   39,   41,   41,   26,   26,   11,
+       11,   37,   37,   35,   17,   28,   17,    0,   17,    0,
+       17,   38,   17,   40,   17,   39,   17,   41,   17,   26,
+       17,   11,   11,   37,   17,   35,   28,    0,    0,   38,
+       40,   39,   41,   26,   11,   37,   35,   28,    0,    0,
+       38,   40,   39,   41,   26,   11,   37,   35,   28,    0,
+        0,   38,   40,   39,   41,   26,   11,   37,   35,   28,
+        0,    0,   38,   40,   39,   41,   26,   11,   37,   35,
+       28,    0,    0,   38,   40,   39,   41,   26,   11,   37,
+
+       18,   18,   18,   18,   18,   18,   18,   18,   18,   11,
+       18,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -491,454 +493,472 @@ static yyconst flex_int32_t yy_ec[256] =
 static yyconst flex_int32_t yy_meta[59] =
     {   0,
         1,    1,    2,    3,    1,    1,    4,    1,    1,    1,
-        5,    6,    5,    5,    7,    8,    1,    1,    1,    9,
+        5,    6,    5,    5,    7,    8,    1,    7,    1,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,   10,    1,   11,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    1,   12
     } ;
 
-static yyconst flex_int16_t yy_base[832] =
+static yyconst flex_int16_t yy_base[847] =
     {   0,
         0,    0,   58,    0,  115,  165,  215,  265,  316,    0,
       374,    0,  432,    0,  490,    0,  547,  604,  661,  711,
-      762,    0, 2156, 2157, 2157, 2157, 2152,    0,  118, 2136,
-     2135, 2141, 2133,  115,  118,  116,  120,  124,  140,  131,
-      129,  139,    0, 2118, 2109, 2107, 2100, 2105, 2128,  127,
-     2157, 2127,  137,  179,  124, 2125,  128,  173,  126,  146,
-      153,  118,  158, 2157,  190, 2157, 2157, 2139,  193, 2123,
-     2122, 2128, 2120, 2105, 2096, 2094, 2087, 2092, 2157,    0,
-     2100, 2091, 2089, 2082, 2087, 2070, 2119,  181,  190,  194,
-      153,  197, 2157,    0, 2093, 2084, 2082, 2075, 2080, 2063,
-
-     2112,  191,  199,  200,  201,  203, 2115, 2114, 2113, 2112,
-      212,  209,  222,  217,  228,  226,  233,  208,  239,  240,
-      248,  255,  251, 2111,  270,  251,  552,  254,  565,  575,
-      577,  622,  627,  626,  634,  612,  669,  684,  691, 2157,
-        0, 2081,  205, 2071, 2070, 2063, 2068, 2105, 2157,  257,
-      289,  559, 2157, 2157, 2157, 2157, 2050,  263, 2071,  270,
-      273,  555,  545,  556,  642,  585,  569,    0, 2078, 2064,
-     2061,  222, 2052, 2084, 2157,  290, 2157,  291, 2097,  674,
-      680, 2082, 2081, 2080,  283,  564,  554,  608,  262, 2093,
-      312, 2157, 2068, 2054, 2051,  529, 2042,    0, 2064, 2050,
-
-     2047,  611, 2038,    0, 2030, 2079,  646,  650,  652,  695,
-      593,    0, 2058, 2044, 2041,  661, 2032,    0, 2024, 2073,
-      680,  681,  699,  701,  702, 2076, 2075, 2074, 2073,  733,
-      819, 2072, 2071, 2070, 2069,  720,  600,  708,  820,  821,
-      724, 2068,  823,  824,  831,  751, 2067,  822,  830,  835,
-      839,  843,  847,  845,  846,  858,  880,  870,  881,  889,
-      891,  898,  903, 2067,  905,  914,  916,  926,    0, 2041,
-     2027, 2013, 2023, 2022,  703, 2013,  902,  841,  754,    0,
-     2027, 2157,  910,  919,  905,  913,  933,  934,  937,  940,
-      935, 2035,  258,    0, 2014, 2018, 2004,  947,  979,  732,
-
-      934, 2040,  912,  843,  707, 2030,  910, 2157, 2009, 2013,
-     1999, 2026,  922,    0, 2005, 2009, 1995, 1990,    0,  861,
-      926, 2040,  855,  947,  964, 2020,  941,    0, 1999, 2003,
-     1989, 1984,    0,  979,  950, 2034,  978,  984,  983,  995,
-      757,  989,  992, 2037,  996,  571,  997, 1004, 1005, 1014,
-     1006, 2037, 1021, 1025, 1026, 1039, 1041, 2012, 1010, 1996,
-     1988,    0, 1989, 1993, 1979,  999, 2029, 1973, 1043, 1049,
-     1050, 1051, 1058, 1059, 1060, 1070, 1061, 2002, 1992, 1991,
-     1973, 1975, 1981, 1087, 1053, 1061, 1062,  813, 1003, 1044,
-     1996, 1986, 1985, 1967, 1969, 1975, 1990, 1980, 1979, 1961,
-
-     1963, 1969, 1954, 2004, 1952,  867, 1078, 1089, 1062, 1090,
-     1093, 1981, 1971, 1970, 1952, 1954, 1960, 1945, 1995, 1943,
-     1094, 1099, 1101, 1100, 1105, 1103, 1117, 1997, 1111, 1114,
-     1118, 1120, 1121, 1122, 1125, 1141, 1127, 1155, 1160, 1165,
-     1174, 1971, 1961, 1960, 1945, 1944, 1940, 1942, 1948, 1933,
-     1138, 1151, 1170, 1145, 1173, 1176, 1179, 1178, 1180, 1188,
-     1960, 1942, 1936, 1947, 1942, 1934, 1114, 1173, 1136, 1183,
-     1181, 1179, 1954, 1936, 1930, 1941, 1936, 1928, 1948, 1930,
-     1924, 1935, 1930, 1922, 1914, 1964, 1198, 1184, 1141,  830,
-     1194, 1195, 1940, 1922, 1916, 1927, 1922, 1914, 1906, 1956,
-
-     1203, 1197, 1200, 1208, 1222, 1225, 1231, 1232, 1233, 1234,
-     1237, 1238, 1248, 1249, 1257, 1265, 1267, 1282, 1932, 1914,
-     1908,    0, 1918, 1918, 1913, 1905, 1235, 1253, 1270, 1273,
-     1281, 1285, 1287, 1288, 1290, 1919, 1914, 1908, 1911, 1898,
-     1909, 1228, 1285, 1283, 1281, 1290, 1291, 1913, 1908, 1902,
-     1905, 1892, 1903, 1907, 1902, 1896, 1899, 1886, 1897, 1303,
-     1297, 1305, 1306, 1310, 1312, 1901, 1896, 1890, 1893, 1880,
-     1891, 1320, 1317, 1323, 1328, 1327, 1329, 1335, 1338, 1339,
-     1341, 1342, 1345, 1347, 1356, 1357, 1371, 1392, 1396, 1895,
-     1890, 1884,    0, 1887, 1874, 1885, 1344, 1339, 1359, 1380,
-
-     1381, 1382, 1386, 1902, 1878,    0,    0,    0,    0, 1117,
-     1357, 1906, 1905, 1904, 1903, 1896, 1872, 2157, 2157, 2157,
-     2157, 1894, 1870,    0,    0,    0,    0, 1240, 1353, 1908,
-     1907, 1906, 1905, 1888, 1864,    0,    0,    0,    0, 1399,
-     1400, 1902, 1901, 1900, 1899, 1405, 1372, 1902, 1901, 1900,
-     1899, 1415, 1419, 1427, 1434, 1439, 1446, 1878, 1854,    0,
-        0,    0,    0, 1424, 1433, 1427, 1867, 1856, 1394, 1426,
-     1863, 1849, 1858, 1845, 1445, 1409, 1851, 1840, 1451, 1449,
-     1456, 1459, 1467, 1476, 1847, 1833, 1463, 1456, 1848, 1819,
-     1125, 1454, 1841, 1814, 1837, 1807, 1470, 1457, 1827, 1795,
-
-     1472, 1476, 1488, 1482, 1501, 1510, 1809, 1782, 1495, 1486,
-     1789,    0, 1503, 1792, 1776, 2157, 1747,    0, 1504, 1756,
-     1736,    0, 1515, 1745, 1483, 1712, 1529, 1537, 1690,    0,
-     1516, 1675, 1513, 1610, 1609, 1522, 1608, 1525, 1491, 1546,
-     1607, 1533, 1612, 1475, 1611, 1609, 1534, 1608, 1540, 1535,
-     1560, 1607, 1546, 1604, 1232, 1602, 1601, 1549, 1599, 1560,
-     1557, 1580, 1597, 1562, 1596, 1553, 1595, 1593, 1566, 1592,
-     1567, 1574, 1588, 1591, 1574, 1581, 1226, 1575, 1572, 1582,
-     1485, 1590, 1595, 1600, 1381, 1593,    0, 1392, 2157,    0,
-     1347,    0, 1029, 1018, 1607,    0, 2157, 1641, 1653, 1665,
-
-     1677, 1689,  893, 1698, 1704, 1713, 1725, 1737, 1745, 1751,
-     1756, 1762, 1771, 1783, 1795, 1807, 1819, 1831, 1839, 1845,
-     1848,  730,  581,  550, 1855,  289, 1863,  286, 1871, 1879,
-     1887
+      762,    0, 2308, 2309, 2309, 2309, 2304,    0,  118, 2288,
+     2287, 2286,  111, 2285,  116,  124,  120,  129,  131,  128,
+      144,  139,  140,    0, 2270, 2261, 2259, 2252, 2257, 2280,
+      137, 2309, 2279,  127,  183,  124,  171, 2277,  187,  179,
+      126,  163,  158,  131,  173, 2309,  204, 2309, 2309, 2291,
+      210, 2275, 2274, 2273,  197, 2272, 2257, 2248, 2246, 2239,
+     2244, 2309,    0, 2252, 2243, 2241, 2234, 2239, 2222,  218,
+      220,  221,  223,  224,  228,  236, 2309,    0, 2246, 2237,
+
+     2235, 2228, 2233, 2216,  233,  238,  240,  255,  263,  242,
+      273, 2269, 2268, 2267, 2266,  283,  285,  289,  293,  287,
+      294,  160,  210,  207,  147,  220,  297,  552,  560, 2265,
+      565,  210,  569,  544,  580,  622,  627,  634,  623,  669,
+      689,  819,  684,  702,  821,  823, 2309,    0, 2235,  266,
+     2225, 2224, 2217, 2222, 2259, 2309,  548,  566,  581, 2309,
+     2309, 2309, 2309, 2309, 2309, 2204,  568, 2225,  626,  610,
+      640,  651,  699,  823,  678,  702,    0, 2232, 2218, 2215,
+      550, 2206, 2238, 2309,  577, 2309,  261, 2251,  594,  830,
+     2236, 2235, 2234, 2233, 2232,  575,  580,  634,  710,  599,
+
+     2245,  735, 2309, 2220, 2206, 2203,  703, 2194,    0, 2216,
+     2202, 2199,  711, 2190,    0, 2182,  681,  827,  830,  831,
+      826,  828,    0, 2211, 2197, 2194,  717, 2185,    0, 2177,
+      740,  832,  834,  833,  853,  854, 2230, 2229, 2228, 2227,
+      874,  840, 2226, 2225, 2224, 2223, 2222, 2221,  592,  254,
+      651,  855,  833,  737, 2220,  877,  897,  898,  878, 2219,
+      881,  883,  886,  905,  916,  920,  700,  859,  906,  925,
+      936,  940,  941,  950,  955,  960,  964,  974, 2219,  975,
+      983,  994,  995,    0, 2193, 2179, 2165, 2175, 2174,  718,
+     2165,  883,  910,  934,    0, 2179, 2309,  979,  971,  940,
+
+      974,  954,  985,  999,  983, 1003, 2187,  968,    0, 2166,
+     2170, 2156, 1017, 1036,  583, 1003, 2192,  996,  685,  917,
+     2182,  998, 2309, 2161, 2165, 2151, 2178, 1001,    0, 2157,
+     2161, 2147, 2142,    0, 1040, 1041,  946, 1042, 1045, 1043,
+     2173, 1012,    0, 2152, 2156, 2142, 2137,    0, 1055, 1057,
+     1060, 1061, 1062, 1064, 1074, 1087, 1067, 1069, 2191, 1080,
+     1082,  687, 1090, 1094, 1103, 1112, 2191, 1111, 1125, 1127,
+     1134, 1142, 2166, 1048, 2150, 2142,    0, 2143, 2147, 2133,
+     1138, 2183, 2127, 1127, 1141, 1146, 1136, 1149, 1151, 1155,
+     1156, 1158, 2156, 2146, 2145, 2127, 2129, 2135, 1164, 1087,
+
+     1006, 1135, 1132,  595,  912, 2150, 2140, 2139, 2121, 2123,
+     2129, 2144, 2134, 2133, 2115, 2117, 2123, 2108, 1183, 2107,
+     1185, 1190, 1191, 1192, 1200, 1204, 2136, 2126, 2125, 2107,
+     2109, 2115, 2100, 1205, 2099, 1207, 1208, 1212, 1213, 1214,
+     1222, 1168, 2153,  923, 1084, 1213, 1182, 1106, 1190, 1236,
+     1250, 1251, 1252, 1266, 1267, 1271, 2127, 2117, 2116, 2101,
+     2100, 2096, 2098, 2104, 2089, 1210, 1257, 1230, 1273, 1274,
+     1275, 1276, 1284, 1286, 1288, 2116, 2098, 2092, 2103, 2098,
+     2090, 1280, 1177, 1244, 1282, 1285, 1275, 2110, 2092, 2086,
+     2097, 2092, 2084, 2104, 2086, 2080, 2091, 2086, 2078, 2070,
+
+     1296, 1306, 1323, 1324, 1325, 1327, 1328, 2097, 2079, 2073,
+     2084, 2079, 2071, 2063, 1330, 1331, 1333, 1337, 1345, 1340,
+     1346, 1347, 1309, 1259, 1351, 1354, 1356, 1370, 1385, 1394,
+     1401, 1403, 1408, 2090, 2072, 2066,    0, 2076, 2076, 2071,
+     2063, 1359, 1361, 1379, 1355, 1407, 1410, 1411, 1415, 1416,
+     2077, 2072, 2066, 2069, 2056, 2067, 1398, 1343, 1408, 1404,
+      643, 1409, 2071, 2066, 2060, 2063, 2050, 2061, 2065, 2060,
+     2054, 2057, 2044, 2055, 1420, 1445, 1413, 1447, 1453, 1454,
+     2059, 2054, 2047, 2050, 2035, 2043, 1455, 1459, 1460, 1461,
+     1462, 1463, 1471, 1436, 1430, 1192, 1433, 1479, 1482, 1492,
+
+     1506, 1519, 1520, 1528, 2047, 2040, 2031,    0, 2034, 2019,
+     2027, 1486, 1496, 1505, 1506, 1510, 1516, 1524, 2044, 2018,
+        0,    0,    0,    0, 1281, 1517, 2043, 2042, 2039, 2035,
+     2023, 1994, 2309, 2309, 2309, 2309, 2005, 1981,    0,    0,
+        0,    0, 1538, 1528, 1530, 1534, 1537, 1540, 1981, 1957,
+        0,    0,    0,    0, 1557, 1558, 1559, 1560, 1561, 1563,
+     1568, 1547, 1988, 1959, 1954, 1948, 1580, 1581, 1582, 1590,
+     1592, 1594, 1923, 1863,    0,    0,    0,    0, 1598, 1599,
+     1600, 1874, 1858, 1350, 1584, 1803, 1792, 1801, 1790, 1603,
+     1601, 1799, 1788, 1604, 1602, 1610, 1609, 1643, 1644, 1797,
+
+     1786, 1611, 1630, 1800, 1773, 1010, 1606, 1798, 1771, 1795,
+     1768, 1640, 1646, 1793, 1766, 1648, 1649, 1614, 1379, 1667,
+     1674, 1791, 1764, 1647, 1653, 1793,    0, 1352, 1796, 1791,
+     2309, 1790,    0, 1677, 1652, 1789,    0, 1681, 1676, 1480,
+     1805, 1685, 1702, 1786,    0, 1682, 1775, 1679, 1774, 1769,
+     1696, 1768, 1698, 1688, 1715, 1765, 1706, 1765, 1472, 1763,
+     1757, 1714, 1753, 1717, 1719, 1729, 1703, 1722, 1685, 1645,
+     1604, 1546, 1726, 1466, 1733, 1635, 1752, 1403, 1739, 1349,
+     1725, 1269, 1222, 1740, 1217, 1749, 1758, 1768, 1155, 1755,
+     1148, 1481, 1096, 1001, 1761,  866, 1762, 1763, 1792,  834,
+
+     1768,    0,  742, 2309,    0, 1764,    0, 1778,  678, 1801,
+        0, 2309, 1835, 1847, 1859, 1871, 1883,  550, 1892, 1898,
+     1907, 1919, 1931, 1939, 1945, 1950, 1956, 1965, 1977, 1989,
+     2001, 2013, 2025, 2033, 2039, 2042,  306,  304,  301, 2049,
+      213, 2057,  136, 2065, 2073, 2081
     } ;
 
-static yyconst flex_int16_t yy_def[832] =
+static yyconst flex_int16_t yy_def[847] =
     {   0,
-      797,    1,  797,    3,  798,  798,  799,  799,  797,    9,
-      797,   11,  797,   13,  797,   15,  800,  800,  801,  801,
-      797,   21,  797,  797,  797,  797,  802,  803,  797,  797,
-      797,  797,  797,  804,  804,  804,  804,  804,  804,  804,
-      804,  804,  805,  805,  805,  805,  805,  805,  806,  806,
-      797,  806,  807,  806,  806,  797,  806,  806,  806,  806,
-      806,  806,  806,  797,  808,  797,  797,  802,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  809,
-      809,  809,  809,  809,  809,  797,  810,  810,  810,  810,
-      810,  810,  797,  811,  811,  811,  811,  811,  811,  797,
-
-      812,  812,  812,  812,  812,  812,  813,  813,  813,  814,
-      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
-      797,  815,  797,  797,  815,  816,  817,  818,  815,  815,
-      815,  815,  815,  815,  815,  815,  815,  815,  815,  797,
-      819,  819,  819,  819,  819,  819,  819,  802,  797,  820,
-      797,  797,  797,  797,  797,  797,  797,  804,  821,  804,
-      804,  804,  804,  804,  804,  804,  804,  805,  805,  805,
-      805,  805,  805,  806,  797,  806,  797,  807,  802,  806,
-      806,  806,  806,  806,  806,  806,  806,  806,  806,  808,
-      808,  797,  797,  797,  797,  797,  797,  809,  809,  809,
-
-      809,  809,  809,  822,  797,  810,  810,  810,  810,  810,
-      810,  811,  811,  811,  811,  811,  811,  823,  797,  812,
-      812,  812,  812,  812,  812,  813,  797,  814,  797,  813,
-      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
-      797,  797,  815,  815,  815,  797,  797,  816,  816,  816,
-      817,  817,  817,  818,  818,  818,  815,  815,  815,  815,
-      815,  815,  815,  797,  815,  815,  815,  815,  819,  819,
-      819,  819,  819,  819,  819,  819,  820,  797,  797,  824,
-      821,  797,  804,  804,  804,  804,  804,  804,  804,  804,
-      804,  805,  805,  805,  805,  805,  805,  806,  806,  806,
-
-      806,  806,  806,  806,  806,  797,  797,  797,  797,  797,
-      797,  809,  809,  809,  809,  809,  809,  825,  826,  810,
-      810,  810,  810,  810,  810,  811,  811,  811,  811,  811,
-      811,  827,  828,  812,  812,  812,  812,  812,  812,  813,
-      813,  813,  813,  813,  813,  813,  813,  815,  815,  815,
-      815,  797,  815,  815,  815,  815,  815,  819,  819,  819,
-      819,  819,  819,  819,  819,  797,  797,  829,  804,  804,
-      804,  804,  804,  804,  804,  804,  804,  805,  805,  805,
-      805,  805,  805,  806,  806,  806,  806,  806,  806,  806,
-      797,  797,  797,  797,  797,  797,  809,  809,  809,  809,
-
-      809,  809,  825,  810,  830,  810,  810,  810,  810,  810,
-      810,  811,  811,  811,  811,  811,  811,  827,  812,  831,
-      812,  812,  812,  812,  812,  812,  813,  797,  813,  813,
-      813,  813,  813,  813,  815,  815,  815,  815,  815,  815,
-      815,  819,  819,  819,  819,  819,  819,  819,  819,  829,
-      820,  804,  804,  804,  804,  804,  804,  804,  804,  804,
-      805,  805,  805,  805,  805,  805,  806,  806,  806,  806,
-      806,  806,  797,  797,  797,  797,  797,  797,  809,  809,
-      809,  809,  809,  809,  830,  810,  810,  810,  810,  810,
-      810,  810,  811,  811,  811,  811,  811,  811,  831,  812,
-
-      812,  812,  812,  812,  812,  812,  813,  813,  813,  813,
-      813,  813,  815,  815,  815,  815,  815,  815,  819,  819,
-      819,  819,  819,  819,  819,  819,  804,  804,  804,  804,
-      804,  804,  804,  804,  804,  805,  805,  805,  805,  805,
-      805,  806,  806,  806,  806,  806,  806,  797,  797,  797,
-      797,  797,  797,  809,  809,  809,  809,  809,  809,  810,
-      810,  810,  810,  810,  810,  811,  811,  811,  811,  811,
-      811,  812,  812,  812,  812,  812,  812,  813,  813,  813,
-      813,  813,  813,  815,  815,  815,  815,  815,  815,  819,
-      819,  819,  819,  819,  819,  819,  804,  804,  804,  804,
-
-      804,  804,  804,  805,  805,  805,  805,  805,  805,  806,
-      806,  806,  806,  806,  806,  797,  797,  797,  797,  797,
-      797,  809,  809,  809,  809,  809,  809,  810,  810,  810,
-      810,  810,  810,  811,  811,  811,  811,  811,  811,  812,
-      812,  812,  812,  812,  812,  813,  813,  813,  813,  813,
-      813,  815,  815,  815,  815,  815,  815,  819,  819,  819,
-      819,  819,  819,  804,  804,  804,  805,  805,  806,  806,
-      797,  797,  809,  809,  810,  810,  811,  811,  812,  812,
-      813,  813,  815,  815,  819,  819,  804,  804,  805,  805,
-      806,  806,  797,  797,  809,  809,  810,  810,  811,  811,
-
-      812,  812,  813,  813,  815,  815,  819,  819,  804,  804,
-      805,  805,  806,  806,  797,  797,  809,  809,  810,  810,
-      811,  811,  812,  812,  813,  813,  815,  815,  819,  819,
-      804,  805,  806,  797,  809,  810,  811,  812,  813,  815,
-      819,  804,  805,  806,  797,  809,  810,  811,  812,  813,
-      815,  819,  804,  805,  806,  797,  809,  810,  811,  812,
-      813,  815,  819,  804,  805,  806,  797,  809,  810,  811,
-      812,  813,  815,  819,  804,  805,  806,  797,  809,  810,
-      811,  812,  813,  815,  819,  804,  805,  806,  797,  809,
-      810,  811,  812,  813,  815,  819,    0,  797,  797,  797,
-
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797
+      812,    1,  812,    3,  813,  813,  814,  814,  812,    9,
+      812,   11,  812,   13,  812,   15,  815,  815,  816,  816,
+      812,   21,  812,  812,  812,  812,  817,  818,  812,  812,
+      812,  812,  812,  812,  819,  819,  819,  819,  819,  819,
+      819,  819,  819,  820,  820,  820,  820,  820,  820,  821,
+      821,  812,  821,  822,  821,  821,  821,  812,  821,  821,
+      821,  821,  821,  821,  821,  812,  823,  812,  812,  817,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  824,  824,  824,  824,  824,  824,  812,  825,
+      825,  825,  825,  825,  825,  825,  812,  826,  826,  826,
+
+      826,  826,  826,  812,  827,  827,  827,  827,  827,  827,
+      827,  828,  828,  828,  829,  828,  828,  828,  828,  828,
+      828,  828,  828,  828,  828,  828,  812,  830,  812,  812,
+      830,  831,  832,  833,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  812,  834,  834,  834,
+      834,  834,  834,  834,  817,  812,  835,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  819,  836,  819,  819,
+      819,  819,  819,  819,  819,  819,  820,  820,  820,  820,
+      820,  820,  821,  812,  821,  812,  822,  817,  821,  821,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
+
+      823,  823,  812,  812,  812,  812,  812,  812,  824,  824,
+      824,  824,  824,  824,  837,  812,  825,  825,  825,  825,
+      825,  825,  826,  826,  826,  826,  826,  826,  838,  812,
+      827,  827,  827,  827,  827,  827,  828,  812,  829,  812,
+      828,  828,  828,  828,  828,  828,  828,  828,  828,  828,
+      828,  828,  828,  812,  812,  830,  830,  830,  812,  812,
+      831,  831,  831,  832,  832,  832,  833,  833,  833,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  812,  830,
+      830,  830,  830,  834,  834,  834,  834,  834,  834,  834,
+      834,  835,  812,  812,  839,  836,  812,  819,  819,  819,
+
+      819,  819,  819,  819,  819,  819,  820,  820,  820,  820,
+      820,  820,  821,  821,  821,  821,  821,  821,  821,  821,
+      812,  812,  812,  812,  812,  812,  824,  824,  824,  824,
+      824,  824,  840,  841,  825,  825,  825,  825,  825,  825,
+      826,  826,  826,  826,  826,  826,  842,  843,  827,  827,
+      827,  827,  827,  827,  828,  828,  828,  828,  828,  828,
+      828,  828,  830,  830,  830,  830,  812,  830,  830,  830,
+      830,  830,  834,  834,  834,  834,  834,  834,  834,  834,
+      812,  812,  844,  819,  819,  819,  819,  819,  819,  819,
+      819,  819,  820,  820,  820,  820,  820,  820,  821,  821,
+
+      821,  821,  821,  821,  821,  812,  812,  812,  812,  812,
+      812,  824,  824,  824,  824,  824,  824,  840,  825,  845,
+      825,  825,  825,  825,  825,  825,  826,  826,  826,  826,
+      826,  826,  842,  827,  846,  827,  827,  827,  827,  827,
+      827,  828,  812,  828,  828,  828,  828,  828,  828,  830,
+      830,  830,  830,  830,  830,  830,  834,  834,  834,  834,
+      834,  834,  834,  834,  844,  835,  819,  819,  819,  819,
+      819,  819,  819,  819,  819,  820,  820,  820,  820,  820,
+      820,  821,  821,  821,  821,  821,  821,  812,  812,  812,
+      812,  812,  812,  824,  824,  824,  824,  824,  824,  845,
+
+      825,  825,  825,  825,  825,  825,  825,  826,  826,  826,
+      826,  826,  826,  846,  827,  827,  827,  827,  827,  827,
+      827,  828,  828,  828,  828,  828,  828,  830,  830,  830,
+      830,  830,  830,  834,  834,  834,  834,  834,  834,  834,
+      834,  819,  819,  819,  819,  819,  819,  819,  819,  819,
+      820,  820,  820,  820,  820,  820,  821,  821,  821,  821,
+      821,  821,  812,  812,  812,  812,  812,  812,  824,  824,
+      824,  824,  824,  824,  825,  825,  825,  825,  825,  825,
+      826,  826,  826,  826,  826,  826,  827,  827,  827,  827,
+      827,  827,  828,  828,  828,  828,  828,  828,  830,  830,
+
+      830,  830,  830,  830,  834,  834,  834,  834,  834,  834,
+      834,  819,  819,  819,  819,  819,  819,  819,  820,  820,
+      820,  820,  820,  820,  821,  821,  821,  821,  821,  821,
+      812,  812,  812,  812,  812,  812,  824,  824,  824,  824,
+      824,  824,  825,  825,  825,  825,  825,  825,  826,  826,
+      826,  826,  826,  826,  827,  827,  827,  827,  827,  827,
+      828,  828,  828,  828,  828,  828,  830,  830,  830,  830,
+      830,  830,  834,  834,  834,  834,  834,  834,  819,  819,
+      819,  820,  820,  821,  821,  812,  812,  824,  824,  825,
+      825,  826,  826,  827,  827,  828,  828,  830,  830,  834,
+
+      834,  819,  819,  820,  820,  821,  821,  812,  812,  824,
+      824,  825,  825,  826,  826,  827,  827,  828,  828,  830,
+      830,  834,  834,  819,  819,  820,  820,  821,  821,  812,
+      812,  824,  824,  825,  825,  826,  826,  827,  827,  828,
+      828,  830,  830,  834,  834,  819,  820,  821,  812,  824,
+      825,  826,  827,  828,  830,  834,  819,  820,  821,  812,
+      824,  825,  826,  827,  828,  830,  834,  819,  820,  821,
+      812,  824,  825,  826,  827,  828,  830,  834,  819,  820,
+      821,  812,  824,  825,  826,  827,  828,  830,  834,  819,
+      820,  821,  812,  824,  825,  826,  827,  828,  830,  834,
+
+      819,  820,  821,  812,  824,  825,  826,  827,  828,  830,
+      834,    0,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812
     } ;
 
-static yyconst flex_int16_t yy_nxt[2216] =
+static yyconst flex_int16_t yy_nxt[2368] =
     {   0,
        24,   25,   26,   25,   24,   27,   28,   24,   29,   24,
-       30,   24,   24,   24,   24,   24,   31,   32,   33,   34,
-       34,   35,   34,   34,   34,   34,   34,   34,   34,   34,
-       34,   34,   24,   24,   24,   34,   36,   34,   34,   37,
-       38,   39,   34,   40,   34,   34,   34,   34,   41,   34,
-       42,   34,   34,   34,   34,   34,   24,   24,   24,   25,
+       30,   24,   24,   31,   24,   24,   32,   33,   34,   35,
+       35,   36,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   24,   24,   24,   35,   37,   35,   35,   38,
+       39,   40,   35,   41,   35,   35,   35,   35,   42,   35,
+       43,   35,   35,   35,   35,   35,   24,   24,   24,   25,
        26,   25,   24,   27,   24,   24,   29,   24,   30,   24,
-       24,   24,   24,   24,   31,   32,   33,   43,   43,   44,
-       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
-       24,   24,   24,   43,   45,   43,   43,   46,   43,   43,
-
-       43,   47,   43,   43,   43,   43,   43,   43,   48,   43,
-       43,   43,   43,   43,   24,   24,   50,   51,   52,  151,
-       53,  157,  157,   54,  157,   55,  157,  152,  176,  177,
-      157,   56,   57,   58,  175,  157,   59,  157,  183,  149,
-      175,  182,  175,  175,  175,  157,  157,  159,  159,  160,
-      159,   60,  159,  179,   61,  161,  159,  185,   62,  205,
-      162,  159,  175,  159,  188,   63,   50,   51,   52,  175,
-       53,  159,  159,   54,  175,   55,  164,  165,  163,  167,
-      180,   56,   57,   58,  166,  186,   59,  205,  181,  175,
-      184,  191,  192,  187,  151,  175,  205,  219,  189,  210,
-
-      205,   60,  152,  205,   61,  219,  219,  219,   62,  219,
-      227,  227,  207,  230,  227,   63,   65,   66,   67,  227,
-       68,  231,  221,   69,  227,   70,  232,  234,  227,  208,
-      227,   71,   72,   73,  209,  227,   74,  211,  222,  233,
-      223,  227,  227,  225,  271,  235,  272,  224,  238,  241,
-      242,   75,  246,  247,   76,  249,  244,  236,   77,  244,
-      295,  255,  244,  157,  296,   78,   65,   66,   67,  157,
-       68,  244,  237,   69,  244,   70,  157,  244,  175,  157,
-      240,   71,   72,   73,  250,  239,   74,  256,  245,  159,
-      151,  176,  177,  149,  420,  159,  283,  405,  152,  175,
-
-      379,   75,  159,  245,   76,  159,  175,  179,   77,  300,
-      380,  305,  284,  191,  192,   78,   24,   25,   79,   25,
-       24,   27,   24,   24,   29,   24,   30,   24,   24,   24,
-       24,   24,   31,   32,   33,   80,   80,   81,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80,   24,   24,
-       24,   80,   82,   80,   80,   83,   80,   80,   80,   84,
-       80,   80,   80,   80,   80,   80,   85,   80,   80,   80,
-       80,   80,   24,   24,   24,   25,   26,   25,   24,   27,
-       86,   24,   29,   24,   30,   24,   24,   87,   87,   24,
-       31,   32,   33,   87,   87,   88,   87,   87,   87,   87,
-
-       87,   87,   87,   87,   87,   87,   24,   24,   24,   87,
-       89,   87,   87,   90,   87,   87,   87,   91,   87,   87,
-       87,   87,   87,   87,   92,   87,   87,   87,   87,   87,
-       24,   24,   24,   25,   93,   25,   24,   27,   24,   24,
-       29,   24,   30,   24,   24,   24,   24,   24,   31,   32,
-       33,   94,   94,   95,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,   94,   24,   24,   24,   94,   96,   94,
-       94,   97,   94,   94,   94,   98,   94,   94,   94,   94,
-       94,   94,   99,   94,   94,   94,   94,   94,   24,   24,
-       24,   25,   26,   25,   24,   27,  100,   24,   29,   24,
-
-       30,   24,   24,  101,  101,   24,   31,   32,   33,  101,
-      101,  102,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,   24,   24,   24,  101,  103,  101,  101,  104,
-      101,  101,  101,  105,  101,  101,  101,  101,  101,  101,
-      106,  101,  101,  101,  101,  101,   24,   24,  108,  109,
-      108,  157,  110,  252,  149,  111,  252,  112,  368,  252,
-      278,  157,  157,  113,  114,  115,  257,  309,  116,  244,
-      175,  310,  244,  227,  258,  157,  244,  159,  244,  244,
-      175,  244,  244,  117,  244,  253,  118,  159,  159,  332,
-      119,  157,  259,  286,  260,  302,  285,  120,  245,  205,
-
-      287,  159,  227,  301,  121,  108,  109,  108,  245,  110,
-      245,  433,  111,  244,  112,  279,  244,  159,  291,  244,
-      113,  114,  115,  244,  175,  116,  244,  244,  244,  244,
-      244,  244,  261,  244,  244,  244,  264,  290,  244,  343,
-      117,  244,  325,  118,  262,  245,  303,  119,  157,  315,
-      304,  265,  205,  316,  120,  245,  205,  263,  205,  245,
-      245,  121,  123,  124,  125,  126,  127,  245,  128,  129,
-      244,  130,  320,  244,  159,  180,  244,  131,  132,  133,
-      288,  298,  134,  181,  289,  244,  219,  219,  244,  321,
-      175,  244,  244,  322,  135,  244,  175,  136,  244,  329,
-
-      137,  205,  245,  330,  138,  219,  334,  219,  219,  266,
-      227,  139,  123,  124,  125,  126,  127,  245,  128,  129,
-      335,  130,  227,  175,  245,  241,  242,  131,  132,  133,
-      267,  268,  134,  323,  230,  227,  299,  324,  318,  337,
-      336,  363,  231,  338,  135,  364,  342,  136,  175,  344,
-      137,  339,  246,  247,  138,  366,  367,  385,  427,  428,
-      390,  139,   24,   25,  140,   25,   24,   27,   24,   24,
-       29,   24,   30,   24,   24,   24,   24,   24,   31,   32,
-       33,  141,  141,  142,  141,  141,  141,  141,  141,  141,
-      141,  141,  141,  141,   24,   24,   24,  141,  143,  144,
-
-      141,  145,  141,  141,  141,  146,  141,  141,  141,  141,
-      141,  141,  147,  141,  141,  141,  141,  141,   24,   24,
-      340,  227,  227,  227,  244,  244,  249,  244,  244,  175,
-      244,  244,  244,  244,  249,  244,  205,  248,  244,  249,
-      252,  149,  278,  252,  252,  149,  252,  252,  252,  348,
-      252,  252,  255,  255,  252,  250,  245,  245,  345,  175,
-      254,  205,  346,  250,  245,  255,  470,  205,  250,  563,
-      347,  349,  253,  205,  244,  341,  253,  244,  256,  256,
-      253,  257,  244,  389,  244,  244,  406,  244,  244,  258,
-      244,  256,  244,  244,  487,  244,  244,  279,  244,  244,
-
-      409,  150,  244,  245,  244,  244,  244,  244,  157,  244,
-      244,  157,  244,  245,  245,  244,  157,  244,  244,  157,
-      244,  244,  245,  244,  245,  157,  350,  244,  175,  351,
-      244,  245,  205,  244,  159,  369,  245,  159,  245,  157,
-      157,  157,  159,  157,  353,  159,  157,  245,  298,  245,
-      175,  159,  392,  205,  355,  354,  219,  388,  356,  245,
-      372,  370,  393,  175,  398,  159,  159,  159,  407,  159,
-      205,  371,  159,  373,  399,  357,  386,  375,  408,  374,
-      384,  367,  376,  413,  219,  219,  387,  410,  377,  219,
-      219,  227,  422,  414,  227,  175,  340,  227,  227,  227,
-
-      366,  367,  423,  299,  421,  244,  349,  244,  244,  244,
-      244,  244,  244,  244,  429,  435,  367,  411,  244,  175,
-      227,  244,  244,  424,  425,  244,  244,  244,  244,  244,
-      244,  436,  244,  244,  430,  219,  426,  245,  245,  245,
-      244,  432,  244,  244,  431,  244,  244,  245,  244,  157,
-      434,  341,  443,  471,  245,  157,  157,  157,  245,  245,
-      175,  350,  444,  437,  157,  157,  157,  157,  205,  175,
-      452,  439,  245,  438,  245,  159,  157,  175,  175,  440,
-      467,  159,  159,  159,  205,  453,  454,  472,  384,  367,
-      159,  159,  159,  159,  441,  205,  205,  468,  469,  205,
-
-      219,  455,  159,  175,  460,  219,  219,  219,  456,  219,
-      458,  219,  457,  227,  488,  490,  227,  459,  427,  428,
-      227,  501,  227,  227,  227,  489,  435,  367,  244,  244,
-      175,  244,  244,  175,  244,  502,  492,  503,  507,  669,
-      491,  175,  244,  542,  157,  244,  506,  205,  244,  713,
-      508,  157,  175,  504,  509,  505,  244,  157,  245,  244,
-      245,  244,  244,  514,  244,  512,  244,  244,  513,  244,
-      159,  511,  244,  510,  245,  244,  157,  159,  244,  157,
-      527,  244,  157,  159,  157,  157,  157,  544,  245,  175,
-      205,  515,  562,  245,  157,  175,  529,  175,  245,  175,
-
-      205,  205,  159,  219,  205,  159,  219,  245,  159,  219,
-      159,  159,  159,  516,  219,  517,  528,  518,  532,  543,
-      159,  533,  545,  531,  546,  530,  534,  560,  219,  547,
-      561,  219,  572,  227,  227,  227,  227,  564,  535,  227,
-      227,  157,  175,  573,  175,  565,  205,  575,  175,  244,
-      244,  574,  244,  244,  788,  244,  244,  766,  244,  157,
-      578,  244,  675,  610,  244,  576,  244,  159,  244,  244,
-      597,  244,  244,  581,  244,  577,  157,  584,  579,  157,
-      582,  245,  245,  244,  580,  159,  244,  157,  583,  244,
-      245,  157,  598,  157,  157,  585,  157,  175,  245,  175,
-
-      245,  175,  159,  205,  587,  159,  175,  175,  586,  205,
-      588,  205,  205,  159,  599,  245,  205,  159,  205,  159,
-      159,  613,  159,  219,  611,  601,  219,  612,  600,  219,
-      603,  615,  589,  219,  219,  219,  629,  227,  628,  602,
-      227,  227,  614,  227,  227,  157,  631,  227,  244,  630,
-      157,  244,  633,  205,  244,  640,  641,  244,  244,  205,
-      244,  244,  632,  244,  244,  157,  664,  642,  643,  645,
-      646,  159,  244,  175,  227,  244,  159,  647,  244,  644,
-      245,  649,  652,  648,  665,  651,  157,  157,  157,  245,
-      245,  159,  157,  244,  650,  653,  244,  244,  676,  244,
-
-      244,  654,  670,  244,  245,  219,  219,  227,  175,  796,
-      175,  655,  159,  159,  159,  205,  244,  682,  159,  244,
-      244,  679,  244,  244,  691,  245,  244,  681,  244,  245,
-      157,  244,  666,  157,  244,  244,  657,  683,  244,  157,
-      244,  244,  175,  244,  656,  680,  244,  244,  245,  698,
-      244,  205,  245,  244,  687,  219,  159,  219,  227,  159,
-      245,  227,  157,  205,  684,  159,  692,  245,  244,  157,
-      175,  244,  245,  688,  244,  697,  205,  244,  219,  245,
-      244,  701,  219,  244,  227,  227,  703,  709,  159,  702,
-      227,  175,  157,  227,  719,  159,  723,  705,  755,  704,
-
-      245,  157,  244,  739,  714,  244,  710,  720,  244,  245,
-      205,  244,  725,  792,  244,  731,  706,  244,  159,  175,
-      750,  219,  157,  733,  736,  727,  724,  159,  205,  175,
-      244,  219,  726,  244,  245,  738,  244,  227,  244,  157,
-      205,  244,  744,  245,  244,  742,  219,  244,  159,  740,
-      244,  747,  157,  244,  749,  205,  753,  758,  761,  227,
-      728,  244,  245,  760,  244,  159,  219,  244,  157,  175,
-      245,  764,  205,  219,  769,  751,  227,  777,  159,  245,
-      157,  244,  772,  762,  244,  771,  775,  244,  205,  244,
-      780,  782,  244,  245,  159,  244,  219,  227,  783,  157,
-
-      790,  244,  786,  789,  244,  773,  159,  244,  244,  787,
-      791,  244,  784,  245,  244,  785,  781,  779,  793,  778,
-      776,  245,  774,  794,  770,  159,  768,  767,  795,  765,
-      763,  759,  757,  245,  756,  754,  752,  748,  746,  745,
-      245,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   49,   64,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,  107,  107,  107,  107,  107,
-      107,  107,  107,  107,  107,  107,  107,  122,  122,  122,
-      122,  122,  122,  122,  122,  122,  122,  122,  122,  148,
-      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
-
-      148,  158,  158,  158,  743,  158,  158,  158,  168,  168,
-      741,  168,  168,  174,  227,  174,  174,  174,  174,  174,
-      174,  174,  174,  174,  174,  178,  178,  178,  178,  178,
-      178,  178,  178,  178,  178,  178,  178,  190,  190,  190,
-      190,  190,  190,  190,  190,  190,  190,  190,  190,  198,
-      198,  219,  198,  198,  206,  206,  737,  206,  206,  206,
-      212,  212,  205,  212,  212,  220,  220,  735,  220,  220,
-      220,  226,  226,  226,  226,  226,  226,  226,  226,  226,
-      226,  226,  226,  228,  228,  228,  228,  228,  228,  228,
-      228,  228,  228,  228,  228,  243,  734,  243,  243,  243,
-
-      243,  243,  243,  243,  243,  243,  243,  248,  175,  732,
-      248,  248,  248,  248,  248,  248,  248,  248,  248,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  254,  730,  729,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  269,  269,  722,  269,  269,  277,  277,
-      277,  721,  277,  277,  277,  281,  281,  718,  281,  403,
-      403,  717,  403,  403,  716,  715,  403,  418,  418,  712,
-      418,  418,  711,  708,  418,  450,  450,  707,  450,  450,
-      700,  699,  450,  485,  485,  696,  485,  485,  695,  694,
-      485,  499,  499,  693,  499,  499,  690,  689,  499,  686,
-
-      685,  227,  227,  227,  227,  219,  219,  219,  219,  678,
-      677,  205,  205,  205,  205,  674,  673,  672,  671,  175,
-      175,  175,  175,  668,  667,  663,  662,  661,  660,  659,
-      658,  639,  638,  637,  636,  635,  634,  627,  626,  625,
-      624,  623,  622,  621,  620,  619,  618,  617,  616,  609,
-      608,  607,  606,  605,  604,  596,  595,  594,  593,  592,
-      591,  590,  219,  500,  571,  570,  569,  568,  567,  566,
-      205,  486,  559,  558,  557,  556,  555,  554,  553,  552,
-      551,  550,  549,  548,  541,  540,  539,  538,  537,  536,
-      451,  526,  525,  524,  523,  522,  521,  520,  519,  428,
-
-      500,  219,  419,  498,  497,  496,  495,  494,  493,  486,
-      205,  404,  484,  483,  482,  481,  480,  479,  478,  477,
-      476,  475,  474,  473,  466,  465,  464,  463,  462,  461,
-      451,  367,  449,  448,  447,  446,  445,  442,  352,  227,
-      219,  419,  417,  416,  415,  412,  205,  404,  402,  401,
-      400,  397,  396,  395,  394,  391,  175,  383,  382,  381,
-      378,  282,  365,  362,  361,  360,  359,  358,  352,  247,
-      242,  227,  227,  227,  227,  227,  229,  227,  227,  219,
-      333,  331,  328,  327,  326,  205,  319,  317,  314,  313,
-      312,  311,  308,  307,  306,  192,  175,  175,  175,  149,
-
-      175,  297,  294,  293,  292,  282,  280,  149,  276,  275,
-      274,  273,  270,  247,  229,  227,  227,  227,  219,  218,
-      217,  216,  215,  214,  213,  205,  204,  203,  202,  201,
-      200,  199,  197,  196,  195,  194,  193,  156,  155,  154,
-      153,  149,  154,  175,  175,  173,  172,  171,  170,  169,
-      156,  155,  154,  153,  149,  797,   23,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797
+       24,   31,   24,   24,   32,   33,   34,   44,   44,   45,
+       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
+       24,   24,   24,   44,   46,   44,   44,   47,   44,   44,
+
+       44,   48,   44,   44,   44,   44,   44,   44,   49,   44,
+       44,   44,   44,   44,   24,   24,   51,   52,   53,  158,
+       54,  163,  166,   55,  164,   56,  166,  159,   57,  156,
+      166,   58,   59,   60,  166,  166,   61,  166,  185,  186,
+      184,  191,  184,  188,  435,  166,  166,  184,  168,  238,
+      166,   62,  168,  184,   63,  169,  168,  196,   64,  170,
+      168,  168,  238,  168,  173,   65,   51,   52,   53,  171,
+       54,  168,  168,   55,  184,   56,  168,  199,   57,  184,
+      176,   58,   59,   60,  189,  172,   61,  184,  192,  184,
+      174,  249,  190,  252,  175,  184,  195,  193,  198,  184,
+
+      194,   62,  197,  184,   63,  202,  203,  163,   64,  238,
+      164,  158,  238,  200,  262,   65,   67,   68,   69,  159,
+       70,  420,  238,   71,  216,   72,  216,  216,   73,  216,
+      216,   74,   75,   76,  216,  161,   77,  812,  812,  230,
+      812,  812,  216,  263,  230,  812,  230,  251,  230,  250,
+      161,   78,  218,  812,   79,  812,  238,  812,   80,  812,
+      253,  230,  219,  156,  220,   81,   67,   68,   69,  230,
+       70,  232,  812,   71,  221,   72,  222,  188,   73,  230,
+      812,   74,   75,   76,  241,  238,   77,  238,  235,  238,
+      812,  238,  242,  358,  233,  238,  238,  246,  254,  255,
+
+      247,   78,  243,  234,   79,  286,  244,  287,   80,  383,
+      245,  248,  347,  236,  333,   81,   24,   25,   82,   25,
+       24,   27,   24,   24,   29,   24,   30,   24,   24,   31,
+       24,   24,   32,   33,   34,   83,   83,   84,   83,   83,
+       83,   83,   83,   83,   83,   83,   83,   83,   24,   24,
+       24,   83,   85,   83,   83,   86,   83,   83,   83,   87,
+       83,   83,   83,   83,   83,   83,   88,   83,   83,   83,
+       83,   83,   24,   24,   24,   25,   26,   25,   24,   27,
+       89,   24,   29,   24,   30,   24,   24,   90,   91,   24,
+       32,   33,   34,   91,   91,   92,   91,   91,   91,   91,
+
+       91,   91,   91,   91,   91,   91,   24,   24,   24,   91,
+       93,   91,   91,   94,   91,   91,   91,   95,   91,   91,
+       91,   91,   91,   91,   96,   91,   91,   91,   91,   91,
+       24,   24,   24,   25,   97,   25,   24,   27,   24,   24,
+       29,   24,   30,   24,   24,   31,   24,   24,   32,   33,
+       34,   98,   98,   99,   98,   98,   98,   98,   98,   98,
+       98,   98,   98,   98,   24,   24,   24,   98,  100,   98,
+       98,  101,   98,   98,   98,  102,   98,   98,   98,   98,
+       98,   98,  103,   98,   98,   98,   98,   98,   24,   24,
+       24,   25,   26,   25,   24,   27,  104,   24,   29,   24,
+
+       30,   24,   24,  105,  106,   24,   32,   33,   34,  106,
+      106,  107,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,   24,   24,   24,  106,  108,  106,  106,  109,
+      106,  106,  106,  110,  106,  106,  106,  106,  106,  106,
+      111,  106,  106,  106,  106,  106,   24,   24,  113,  114,
+      113,  268,  115,  257,  166,  116,  257,  117,  157,  257,
+      118,  259,  260,  119,  120,  121,  257,  158,  122,  257,
+      265,  156,  257,  265,  166,  159,  265,  269,  185,  186,
+      168,  270,  293,  123,  257,  258,  124,  257,  310,  271,
+      125,  184,  311,  184,  238,  189,  184,  126,  258,  184,
+
+      168,  315,  266,  190,  127,  113,  114,  113,  400,  115,
+      184,  184,  116,  258,  117,  184,  166,  118,  357,  316,
+      119,  120,  121,  257,  257,  122,  257,  257,  257,  257,
+      257,  257,  166,  275,  257,  257,  276,  294,  257,  272,
+      123,  257,  168,  124,  273,  486,  166,  125,  320,  299,
+      184,  274,  298,  238,  126,  258,  258,  166,  168,  184,
+      258,  127,  129,  130,  131,  132,  133,  258,  134,  135,
+      257,  136,  168,  257,  137,  317,  257,  138,  139,  140,
+      238,  300,  141,  168,  166,  257,  277,  216,  257,  238,
+      257,  257,  359,  257,  142,  629,  257,  143,  812,  301,
+
+      144,  184,  258,  257,  145,  166,  257,  268,  166,  257,
+      168,  146,  129,  130,  131,  132,  133,  258,  134,  135,
+      278,  136,  258,  280,  137,  404,  184,  138,  139,  140,
+      305,  168,  141,  269,  168,  258,  202,  203,  254,  255,
+      449,  324,  281,  302,  142,  325,  230,  143,  318,  330,
+      144,  306,  319,  331,  145,  344,  378,  812,  184,  345,
+      379,  146,   24,   25,  147,   25,   24,   27,   24,   24,
+       29,   24,   30,   24,   24,   31,   24,   24,   32,   33,
+       34,  148,  148,  149,  148,  148,  148,  148,  148,  148,
+      148,  148,  148,  148,   24,   24,   24,  148,  150,  151,
+
+      148,  152,  148,  148,  148,  153,  148,  148,  148,  148,
+      148,  148,  154,  148,  148,  148,  148,  148,   24,   24,
+      257,  279,  257,  257,  257,  257,  257,  257,  257,  166,
+      257,  313,  216,  216,  216,  238,  216,  216,  230,  230,
+      230,  355,  238,  812,  812,  812,  184,  812,  812,  812,
+      812,  812,  258,  335,  258,  168,  258,  238,  349,  230,
+      230,  303,  811,  283,  338,  304,  268,  282,  339,  336,
+      812,  812,  337,  350,  351,  241,  238,  340,  257,  259,
+      260,  257,  362,  242,  257,  262,  314,  262,  261,  166,
+      262,  352,  269,  360,  807,  353,  356,  361,  257,  257,
+
+      257,  257,  257,  354,  257,  257,  265,  156,  267,  265,
+      258,  293,  265,  268,  263,  168,  263,  265,  156,  263,
+      265,  265,  363,  265,  265,  238,  270,  265,  184,  257,
+      258,  258,  257,  184,  271,  381,  382,  364,  266,  269,
+      257,  257,  257,  257,  257,  257,  166,  257,  257,  266,
+      522,  257,  216,  266,  257,  487,  257,  257,  258,  257,
+      166,  257,  257,  812,  257,  257,  294,  257,  257,  258,
+      405,  257,  168,  258,  258,  257,  257,  166,  257,  257,
+      166,  257,  257,  258,  257,  166,  168,  257,  258,  166,
+      257,  166,  365,  258,  388,  257,  257,  258,  257,  257,
+
+      366,  257,  257,  168,  384,  166,  168,  258,  258,  166,
+      394,  168,  184,  385,  368,  168,  258,  168,  313,  184,
+      395,  387,  184,  386,  369,  391,  184,  258,  258,  805,
+      389,  168,  370,  184,  728,  168,  371,  399,  382,  390,
+      407,  403,  483,  413,  372,  401,  216,  216,  216,  216,
+      408,  216,  184,  414,  428,  402,  392,  812,  812,  812,
+      812,  230,  812,  230,  429,  421,  230,  230,  230,  238,
+      230,  238,  812,  314,  812,  355,  238,  812,  812,  812,
+      436,  812,  238,  422,  238,  425,  238,  424,  442,  443,
+      458,  257,  444,  423,  257,  364,  426,  257,  257,  437,
+
+      459,  257,  440,  184,  450,  382,  439,  257,  238,  438,
+      257,  445,  257,  257,  482,  257,  257,  441,  257,  257,
+      523,  446,  448,  258,  804,  447,  257,  258,  257,  257,
+      356,  257,  257,  166,  257,  257,  258,  451,  257,  381,
+      382,  257,  166,  257,  258,  258,  257,  166,  184,  257,
+      365,  184,  166,  452,  467,  166,  526,  166,  258,  168,
+      258,  166,  166,  453,  166,  399,  382,  258,  168,  442,
+      443,  484,  454,  168,  455,  258,  802,  468,  168,  800,
+      184,  168,  469,  168,  238,  485,  470,  168,  168,  216,
+      168,  216,  238,  184,  238,  456,  216,  216,  216,  471,
+
+      812,  475,  812,  474,  472,  473,  216,  812,  812,  812,
+      216,  230,  502,  230,  230,  238,  166,  812,  230,  230,
+      230,  812,  812,  558,  812,  812,  503,  504,  230,  812,
+      812,  812,  664,  527,  516,  525,  166,  450,  382,  812,
+      257,  796,  168,  257,  517,  505,  794,  507,  518,  524,
+      506,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      184,  238,  168,  166,  520,  521,  519,  257,  257,  258,
+      257,  257,  257,  257,  257,  257,  543,  528,  257,  166,
+      166,  166,  166,  258,  258,  258,  542,  529,  530,  168,
+      166,  184,  166,  793,  166,  559,  184,  184,  184,  258,
+
+      258,  184,  216,  684,  258,  168,  168,  168,  168,  557,
+      595,  238,  216,  812,  533,  547,  168,  532,  168,  531,
+      168,  560,  546,  812,  544,  562,  545,  548,  561,  216,
+      216,  216,  549,  216,  216,  575,  230,  230,  550,  230,
+      812,  812,  812,  230,  812,  812,  230,  812,  812,  238,
+      812,  230,  230,  238,  812,  594,  238,  812,  238,  184,
+      587,  166,  812,  812,  578,  166,  184,  166,  184,  576,
+      579,  257,  748,  791,  257,  577,  593,  257,  580,  588,
+      706,  238,  626,  591,  590,  166,  257,  168,  589,  257,
+      596,  168,  257,  168,  612,  257,  592,  597,  257,  599,
+
+      613,  257,  257,  258,  257,  257,  598,  257,  257,  257,
+      257,  168,  257,  166,  184,  257,  166,  166,  258,  216,
+      184,  166,  166,  614,  184,  184,  216,  258,  789,  741,
+      812,  600,  238,  625,  258,  238,  258,  812,  238,  168,
+      602,  258,  168,  168,  628,  601,  603,  168,  168,  630,
+      616,  216,  627,  216,  615,  643,  618,  645,  604,  216,
+      216,  230,  812,  617,  812,  230,  230,  230,  230,  230,
+      812,  812,  812,  238,  663,  662,  812,  812,  812,  812,
+      812,  238,  238,  257,  644,  665,  257,  646,  184,  257,
+      655,  785,  166,  257,  648,  770,  257,  184,  656,  257,
+
+      754,  658,  166,  660,  657,  647,  661,  257,  679,  803,
+      257,  166,  166,  257,  659,  258,  166,  667,  168,  666,
+      257,  257,  166,  257,  257,  258,  257,  257,  168,  257,
+      166,  668,  257,  184,  216,  257,  216,  168,  168,  258,
+      216,  680,  168,  216,  216,  812,  216,  812,  168,  238,
+      669,  812,  258,  258,  812,  812,  168,  812,  681,  670,
+      690,  258,  685,  230,  230,  230,  230,  230,  672,  230,
+      238,  783,  671,  691,  812,  812,  812,  812,  812,  694,
+      812,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      696,  257,  697,  257,  257,  257,  257,  257,  257,  257,
+
+      184,  257,  698,  695,  166,  166,  166,  216,  230,  216,
+      230,  238,  238,  258,  258,  258,  238,  166,  812,  812,
+      812,  812,  184,  258,  707,  258,  699,  258,  702,  782,
+      168,  168,  168,  712,  716,  724,  166,  238,  740,  703,
+      718,  713,  717,  168,  257,  257,  216,  257,  257,  719,
+      257,  257,  216,  166,  230,  230,  729,  812,  216,  166,
+      787,  184,  168,  812,  734,  812,  812,  746,  257,  812,
+      781,  257,  738,  720,  257,  257,  258,  258,  257,  168,
+      725,  257,  230,  216,  721,  168,  257,  230,  166,  257,
+      238,  742,  257,  812,  812,  184,  735,  751,  812,  739,
+
+      258,  753,  216,  257,  230,  755,  257,  258,  759,  257,
+      780,  757,  166,  812,  168,  812,  257,  765,  258,  257,
+      216,  238,  257,  230,  743,  762,  778,  764,  166,  768,
+      257,  812,  216,  257,  812,  258,  257,  773,  168,  230,
+      775,  184,  776,  812,  766,  166,  216,  779,  258,  792,
+      812,  784,  777,  257,  168,  230,  257,  812,  786,  257,
+      238,  166,  258,  790,  795,  238,  812,  216,  230,  257,
+      216,  168,  257,  797,  166,  257,  774,  788,  812,  812,
+      772,  812,  798,  801,  230,  258,  771,  168,  769,  806,
+      808,  809,  799,  257,  767,  812,  257,  763,  761,  257,
+
+      168,  258,  257,  760,  758,  257,  756,  238,  257,  752,
+      750,  749,  184,  747,  745,  744,  737,  736,  733,  732,
+      810,  731,  730,  727,  726,  258,  723,  722,  715,  714,
+      711,  710,  709,  708,  258,   50,   50,   50,   50,   50,
+       50,   50,   50,   50,   50,   50,   50,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,  112,
+      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
+      112,  128,  128,  128,  128,  128,  128,  128,  128,  128,
+      128,  128,  128,  155,  155,  155,  155,  155,  155,  155,
+      155,  155,  155,  155,  155,  167,  167,  167,  705,  167,
+
+      167,  167,  177,  177,  704,  177,  177,  183,  701,  183,
+      183,  183,  183,  183,  183,  183,  183,  183,  183,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  201,  201,  201,  201,  201,  201,  201,  201,  201,
+      201,  201,  201,  209,  209,  700,  209,  209,  217,  217,
+      238,  217,  217,  217,  223,  223,  238,  223,  223,  231,
+      231,  238,  231,  231,  231,  237,  237,  237,  237,  237,
+      237,  237,  237,  237,  237,  237,  237,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  239,  256,
+      238,  256,  256,  256,  256,  256,  256,  256,  256,  256,
+
+      256,  261,  693,  692,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  267,  689,  688,  267,  267,
+      267,  267,  267,  267,  267,  267,  267,  284,  284,  687,
+      284,  284,  292,  292,  292,  686,  292,  292,  292,  296,
+      296,  184,  296,  418,  418,  184,  418,  418,  184,  184,
+      418,  433,  433,  683,  433,  433,  682,  678,  433,  465,
+      465,  677,  465,  465,  676,  675,  465,  500,  500,  674,
+      500,  500,  673,  654,  500,  514,  514,  653,  514,  514,
+      652,  651,  514,  650,  649,  642,  641,  640,  639,  638,
+
+      637,  636,  635,  634,  633,  632,  631,  624,  623,  622,
+      621,  620,  619,  611,  610,  609,  608,  607,  606,  605,
+      515,  586,  585,  584,  583,  582,  581,  501,  574,  573,
+      572,  571,  570,  569,  568,  567,  566,  565,  564,  563,
+      556,  555,  554,  553,  552,  551,  466,  541,  540,  539,
+      538,  537,  536,  535,  534,  443,  515,  434,  513,  512,
+      511,  510,  509,  508,  501,  419,  499,  498,  497,  496,
+      495,  494,  493,  492,  491,  490,  489,  488,  481,  480,
+      479,  478,  477,  476,  466,  382,  464,  463,  462,  461,
+      460,  457,  367,  238,  434,  432,  431,  430,  427,  419,
+
+      417,  416,  415,  412,  411,  410,  409,  406,  184,  398,
+      397,  396,  393,  297,  380,  377,  376,  375,  374,  373,
+      367,  260,  255,  238,  238,  238,  238,  238,  238,  238,
+      240,  238,  238,  348,  346,  343,  342,  341,  334,  332,
+      329,  328,  327,  326,  323,  322,  321,  203,  184,  184,
+      184,  184,  184,  156,  184,  312,  309,  308,  307,  297,
+      295,  156,  291,  290,  289,  288,  285,  260,  240,  238,
+      238,  238,  229,  228,  227,  226,  225,  224,  215,  214,
+      213,  212,  211,  210,  208,  207,  206,  205,  204,  165,
+      162,  161,  160,  156,  162,  184,  184,  182,  181,  180,
+
+      179,  178,  165,  162,  161,  160,  156,  812,   23,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812
     } ;
 
-static yyconst flex_int16_t yy_chk[2216] =
+static yyconst flex_int16_t yy_chk[2368] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -953,28 +973,28 @@ static yyconst flex_int16_t yy_chk[2216] =
 
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    5,    5,    5,   29,
-        5,   34,   36,    5,   35,    5,   37,   29,   50,   50,
-       38,    5,    5,    5,   62,   41,    5,   40,   57,   53,
-       55,   55,   59,   50,   57,   42,   39,   34,   36,   35,
-       35,    5,   37,   53,    5,   36,   38,   59,    5,   91,
-       37,   41,   60,   40,   62,    5,    6,    6,    6,   61,
-        6,   42,   39,    6,   63,    6,   39,   40,   38,   42,
-       54,    6,    6,    6,   41,   60,    6,   88,   54,   58,
-       58,   65,   65,   61,   69,   54,   89,  102,   63,   91,
-
-       90,    6,   69,   92,    6,  103,  104,  105,    6,  106,
-      118,  112,   88,  111,  111,    6,    7,    7,    7,  114,
-        7,  111,  102,    7,  113,    7,  112,  114,  116,   89,
-      115,    7,    7,    7,   90,  117,    7,   92,  103,  113,
-      104,  119,  120,  106,  143,  115,  143,  105,  118,  121,
-      121,    7,  123,  123,    7,  126,  122,  116,    7,  122,
-      172,  128,  122,  150,  172,    7,    8,    8,    8,  158,
-        8,  125,  117,    8,  125,    8,  160,  125,  189,  161,
-      120,    8,    8,    8,  126,  119,    8,  128,  122,  150,
-      151,  176,  176,  178,  828,  158,  160,  826,  151,  185,
-
-      293,    8,  160,  125,    8,  161,  176,  178,    8,  185,
-      293,  189,  161,  191,  191,    8,    9,    9,    9,    9,
+        5,   33,   35,    5,   33,    5,   37,   29,    5,   54,
+       36,    5,    5,    5,   40,   38,    5,   39,   51,   51,
+       56,   56,   61,   54,  843,   42,   43,   64,   35,  125,
+       41,    5,   37,   51,    5,   36,   36,   61,    5,   37,
+       40,   38,  122,   39,   40,    5,    6,    6,    6,   38,
+        6,   42,   43,    6,   63,    6,   41,   64,    6,   62,
+       43,    6,    6,    6,   55,   39,    6,   57,   57,   65,
+       41,  122,   55,  125,   42,   60,   60,   59,   63,   55,
+
+       59,    6,   62,   59,    6,   67,   67,   75,    6,  124,
+       75,   71,  123,   65,  132,    6,    7,    7,    7,   71,
+        7,  841,  126,    7,   90,    7,   91,   92,    7,   93,
+       94,    7,    7,    7,   95,   90,    7,   91,   92,  105,
+       93,   94,   96,  132,  106,   95,  107,  124,  110,  123,
+      105,    7,   92,   96,    7,  106,  250,  107,    7,  110,
+      126,  108,   93,  187,   94,    7,    8,    8,    8,  109,
+        8,  107,  108,    8,   95,    8,   96,  187,    8,  111,
+      109,    8,    8,    8,  116,  116,    8,  117,  110,  120,
+      111,  118,  116,  250,  108,  119,  121,  120,  127,  127,
+
+      120,    8,  117,  109,    8,  150,  118,  150,    8,  839,
+      119,  121,  838,  111,  837,    8,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
@@ -1000,198 +1020,214 @@ static yyconst flex_int16_t yy_chk[2216] =
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   17,   17,
-       17,  163,   17,  127,  127,   17,  127,   17,  824,  127,
-      152,  162,  164,   17,   17,   17,  129,  196,   17,  129,
-      187,  196,  129,  346,  129,  167,  130,  163,  131,  130,
-      186,  131,  130,   17,  131,  127,   17,  162,  164,  823,
-       17,  166,  130,  163,  131,  187,  162,   17,  129,  211,
-
-      164,  167,  237,  186,   17,   18,   18,   18,  130,   18,
-      131,  346,   18,  136,   18,  152,  136,  166,  167,  136,
-       18,   18,   18,  132,  188,   18,  132,  134,  133,  132,
-      134,  133,  132,  134,  133,  135,  135,  166,  135,  237,
-       18,  135,  211,   18,  133,  136,  188,   18,  165,  202,
-      188,  136,  207,  202,   18,  132,  208,  134,  209,  134,
-      133,   18,   19,   19,   19,   19,   19,  135,   19,   19,
-      137,   19,  207,  137,  165,  180,  137,   19,   19,   19,
-      165,  181,   19,  180,  165,  138,  221,  222,  138,  208,
-      180,  138,  139,  209,   19,  139,  181,   19,  139,  216,
-
-       19,  210,  137,  216,   19,  223,  221,  224,  225,  137,
-      238,   19,   20,   20,   20,   20,   20,  138,   20,   20,
-      222,   20,  236,  305,  139,  241,  241,   20,   20,   20,
-      138,  139,   20,  210,  230,  230,  181,  210,  822,  224,
-      223,  275,  230,  224,   20,  275,  236,   20,  300,  238,
-       20,  225,  246,  246,   20,  279,  279,  300,  341,  341,
-      305,   20,   21,   21,   21,   21,   21,   21,   21,   21,
+       17,  134,   17,  128,  157,   17,  128,   17,  818,  128,
+       17,  129,  129,   17,   17,   17,  131,  158,   17,  131,
+      133,  133,  131,  133,  167,  158,  133,  134,  185,  185,
+      157,  135,  159,   17,  135,  128,   17,  135,  181,  135,
+       17,  196,  181,  185,  249,  189,  197,   17,  131,  315,
+
+      167,  196,  133,  189,   17,   18,   18,   18,  315,   18,
+      189,  404,   18,  135,   18,  200,  170,   18,  249,  197,
+       18,   18,   18,  136,  139,   18,  136,  139,  137,  136,
+      139,  137,  169,  139,  137,  138,  139,  159,  138,  136,
+       18,  138,  170,   18,  137,  404,  171,   18,  200,  170,
+      198,  138,  169,  251,   18,  136,  139,  172,  169,  561,
+      137,   18,   19,   19,   19,   19,   19,  138,   19,   19,
+      140,   19,  171,  140,   19,  198,  140,   19,   19,   19,
+      809,  171,   19,  172,  175,  143,  140,  217,  143,  362,
+      141,  143,  251,  141,   19,  561,  141,   19,  217,  172,
+
+       19,  319,  140,  144,   19,  173,  144,  267,  176,  144,
+      175,   19,   20,   20,   20,   20,   20,  143,   20,   20,
+      141,   20,  141,  143,   20,  319,  199,   20,   20,   20,
+      175,  173,   20,  267,  176,  144,  202,  202,  254,  254,
+      362,  207,  144,  173,   20,  207,  231,   20,  199,  213,
+       20,  176,  199,  213,   20,  227,  290,  231,  803,  227,
+      290,   20,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
 
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-      231,  231,  239,  240,  243,  244,  248,  243,  244,  388,
-      243,  244,  245,  245,  249,  245,  490,  250,  245,  250,
-      251,  251,  278,  251,  252,  252,  251,  252,  253,  253,
-      252,  253,  254,  255,  253,  248,  243,  244,  239,  304,
-      256,  323,  239,  249,  245,  256,  388,  320,  250,  490,
-      240,  258,  251,  406,  258,  231,  252,  258,  254,  255,
-      253,  257,  259,  304,  257,  259,  320,  257,  259,  257,
-      260,  256,  261,  260,  406,  261,  260,  278,  261,  262,
-
-      323,  803,  262,  258,  263,  262,  265,  263,  277,  265,
-      263,  285,  265,  257,  259,  266,  283,  267,  266,  286,
-      267,  266,  260,  267,  261,  284,  258,  268,  303,  263,
-      268,  262,  321,  268,  277,  283,  263,  285,  265,  287,
-      288,  291,  283,  289,  265,  286,  290,  266,  298,  267,
-      301,  284,  307,  324,  267,  266,  335,  303,  267,  268,
-      286,  284,  307,  298,  313,  287,  288,  291,  321,  289,
-      325,  284,  290,  287,  313,  268,  301,  289,  321,  288,
-      299,  299,  290,  327,  337,  334,  301,  324,  291,  339,
-      338,  342,  335,  327,  343,  299,  340,  340,  345,  347,
-
-      366,  366,  335,  298,  334,  348,  349,  351,  348,  349,
-      351,  348,  349,  351,  342,  350,  350,  325,  350,  389,
-      794,  350,  353,  337,  338,  353,  354,  355,  353,  354,
-      355,  351,  354,  355,  343,  793,  339,  348,  349,  351,
-      356,  345,  357,  356,  343,  357,  356,  350,  357,  369,
-      347,  340,  359,  389,  353,  370,  371,  372,  354,  355,
-      390,  349,  359,  353,  373,  374,  375,  377,  409,  385,
-      369,  355,  356,  353,  357,  369,  376,  386,  387,  356,
-      385,  370,  371,  372,  407,  370,  371,  390,  384,  384,
-      373,  374,  375,  377,  357,  408,  410,  386,  387,  411,
-
-      421,  372,  376,  384,  377,  422,  424,  423,  373,  426,
-      375,  425,  374,  429,  407,  409,  430,  376,  427,  427,
-      431,  421,  432,  433,  434,  408,  435,  435,  437,  435,
-      467,  437,  435,  610,  437,  422,  411,  423,  429,  610,
-      410,  691,  436,  467,  451,  436,  426,  489,  436,  691,
-      430,  454,  469,  424,  431,  425,  438,  452,  435,  438,
-      437,  439,  438,  437,  439,  434,  440,  439,  436,  440,
-      451,  433,  440,  432,  436,  441,  453,  454,  441,  455,
-      452,  441,  456,  452,  458,  457,  459,  469,  438,  468,
-      488,  438,  489,  439,  460,  472,  454,  471,  440,  470,
-
-      491,  492,  453,  502,  487,  455,  503,  441,  456,  501,
-      458,  457,  459,  439,  504,  440,  453,  441,  457,  468,
-      460,  458,  470,  456,  471,  455,  459,  487,  505,  472,
-      488,  506,  501,  507,  508,  509,  510,  491,  460,  511,
-      512,  527,  777,  502,  542,  492,  628,  504,  755,  513,
-      514,  503,  513,  514,  777,  513,  514,  755,  515,  528,
-      507,  515,  628,  542,  515,  505,  516,  527,  517,  516,
-      527,  517,  516,  510,  517,  506,  529,  513,  508,  530,
-      511,  513,  514,  518,  509,  528,  518,  531,  512,  518,
-      515,  532,  528,  533,  534,  514,  535,  545,  516,  544,
-
-      517,  543,  529,  561,  516,  530,  546,  547,  515,  560,
-      517,  562,  563,  531,  529,  518,  564,  532,  565,  533,
-      534,  545,  535,  573,  543,  532,  572,  544,  531,  574,
-      535,  547,  518,  576,  575,  577,  561,  578,  560,  533,
-      579,  580,  546,  581,  582,  598,  563,  583,  584,  562,
-      597,  584,  565,  791,  584,  572,  573,  585,  586,  629,
-      585,  586,  564,  585,  586,  599,  597,  574,  575,  577,
-      578,  598,  587,  611,  647,  587,  597,  579,  587,  576,
-      584,  581,  584,  580,  598,  583,  600,  601,  602,  585,
-      586,  599,  603,  588,  582,  585,  588,  589,  629,  588,
-
-      589,  586,  611,  589,  587,  640,  641,  646,  788,  785,
-      669,  587,  600,  601,  602,  676,  652,  647,  603,  652,
-      653,  640,  652,  653,  669,  588,  653,  646,  654,  589,
-      664,  654,  600,  666,  654,  655,  589,  652,  655,  665,
-      656,  655,  670,  656,  588,  641,  656,  657,  652,  676,
-      657,  675,  653,  657,  664,  680,  664,  679,  681,  666,
-      654,  682,  688,  698,  653,  665,  670,  655,  683,  687,
-      692,  683,  656,  665,  683,  675,  697,  684,  701,  657,
-      684,  679,  702,  684,  704,  725,  681,  687,  688,  680,
-      703,  744,  710,  739,  697,  687,  701,  683,  744,  682,
-
-      683,  709,  705,  725,  692,  705,  688,  698,  705,  684,
-      719,  706,  703,  781,  706,  709,  684,  706,  710,  713,
-      739,  723,  731,  713,  719,  705,  702,  709,  736,  733,
-      727,  738,  704,  727,  705,  723,  727,  750,  728,  742,
-      747,  728,  733,  706,  728,  731,  749,  740,  731,  727,
-      740,  736,  753,  740,  738,  758,  742,  747,  750,  761,
-      706,  751,  727,  749,  751,  742,  760,  751,  764,  766,
-      728,  753,  769,  771,  758,  740,  772,  766,  753,  740,
-      775,  762,  761,  751,  762,  760,  764,  762,  780,  773,
-      769,  771,  773,  751,  764,  773,  782,  783,  772,  786,
-
-      779,  784,  775,  778,  784,  762,  775,  784,  795,  776,
-      780,  795,  773,  762,  795,  774,  770,  768,  782,  767,
-      765,  773,  763,  783,  759,  786,  757,  756,  784,  754,
-      752,  748,  746,  784,  745,  743,  741,  737,  735,  734,
-      795,  798,  798,  798,  798,  798,  798,  798,  798,  798,
-      798,  798,  798,  799,  799,  799,  799,  799,  799,  799,
-      799,  799,  799,  799,  799,  800,  800,  800,  800,  800,
-      800,  800,  800,  800,  800,  800,  800,  801,  801,  801,
-      801,  801,  801,  801,  801,  801,  801,  801,  801,  802,
-      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
-
-      802,  804,  804,  804,  732,  804,  804,  804,  805,  805,
-      729,  805,  805,  806,  726,  806,  806,  806,  806,  806,
-      806,  806,  806,  806,  806,  807,  807,  807,  807,  807,
-      807,  807,  807,  807,  807,  807,  807,  808,  808,  808,
-      808,  808,  808,  808,  808,  808,  808,  808,  808,  809,
-      809,  724,  809,  809,  810,  810,  721,  810,  810,  810,
-      811,  811,  720,  811,  811,  812,  812,  717,  812,  812,
-      812,  813,  813,  813,  813,  813,  813,  813,  813,  813,
-      813,  813,  813,  814,  814,  814,  814,  814,  814,  814,
-      814,  814,  814,  814,  814,  815,  715,  815,  815,  815,
-
-      815,  815,  815,  815,  815,  815,  815,  816,  714,  711,
-      816,  816,  816,  816,  816,  816,  816,  816,  816,  817,
-      817,  817,  817,  817,  817,  817,  817,  817,  817,  817,
-      817,  818,  708,  707,  818,  818,  818,  818,  818,  818,
-      818,  818,  818,  819,  819,  700,  819,  819,  820,  820,
-      820,  699,  820,  820,  820,  821,  821,  696,  821,  825,
-      825,  695,  825,  825,  694,  693,  825,  827,  827,  690,
-      827,  827,  689,  686,  827,  829,  829,  685,  829,  829,
-      678,  677,  829,  830,  830,  674,  830,  830,  673,  672,
-      830,  831,  831,  671,  831,  831,  668,  667,  831,  659,
-
-      658,  651,  650,  649,  648,  645,  644,  643,  642,  635,
-      634,  633,  632,  631,  630,  623,  622,  617,  616,  615,
-      614,  613,  612,  605,  604,  596,  595,  594,  592,  591,
-      590,  571,  570,  569,  568,  567,  566,  559,  558,  557,
-      556,  555,  554,  553,  552,  551,  550,  549,  548,  541,
-      540,  539,  538,  537,  536,  526,  525,  524,  523,  521,
-      520,  519,  500,  499,  498,  497,  496,  495,  494,  493,
-      486,  485,  484,  483,  482,  481,  480,  479,  478,  477,
-      476,  475,  474,  473,  466,  465,  464,  463,  462,  461,
-      450,  449,  448,  447,  446,  445,  444,  443,  442,  428,
-
-      420,  419,  418,  417,  416,  415,  414,  413,  412,  405,
-      404,  403,  402,  401,  400,  399,  398,  397,  396,  395,
-      394,  393,  392,  391,  383,  382,  381,  380,  379,  378,
-      368,  367,  365,  364,  363,  361,  360,  358,  352,  344,
-      336,  332,  331,  330,  329,  326,  322,  318,  317,  316,
-      315,  312,  311,  310,  309,  306,  302,  297,  296,  295,
-      292,  281,  276,  274,  273,  272,  271,  270,  264,  247,
-      242,  235,  234,  233,  232,  229,  228,  227,  226,  220,
-      219,  217,  215,  214,  213,  206,  205,  203,  201,  200,
-      199,  197,  195,  194,  193,  190,  184,  183,  182,  179,
-
-      174,  173,  171,  170,  169,  159,  157,  148,  147,  146,
-      145,  144,  142,  124,  110,  109,  108,  107,  101,  100,
-       99,   98,   97,   96,   95,   87,   86,   85,   84,   83,
-       82,   81,   78,   77,   76,   75,   74,   73,   72,   71,
-       70,   68,   56,   52,   49,   48,   47,   46,   45,   44,
-       33,   32,   31,   30,   27,   23,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-
-      797,  797,  797,  797,  797,  797,  797,  797,  797,  797,
-      797,  797,  797,  797,  797
+      142,  142,  145,  142,  146,  145,  142,  146,  145,  174,
+      146,  190,  221,  218,  222,  253,  219,  220,  232,  234,
+      233,  242,  242,  221,  218,  222,  190,  219,  220,  232,
+      234,  233,  142,  218,  145,  174,  146,  252,  232,  235,
+      236,  174,  800,  146,  221,  174,  268,  145,  221,  219,
+      235,  236,  220,  233,  234,  241,  241,  222,  256,  259,
+      259,  256,  253,  241,  256,  261,  190,  262,  263,  292,
+      263,  235,  268,  252,  796,  235,  242,  252,  257,  258,
+
+      258,  257,  258,  236,  257,  258,  264,  264,  269,  264,
+      256,  293,  264,  269,  261,  292,  262,  265,  265,  263,
+      265,  266,  266,  265,  266,  444,  270,  266,  405,  270,
+      257,  258,  270,  320,  270,  294,  294,  271,  264,  269,
+      271,  272,  273,  271,  272,  273,  300,  272,  273,  265,
+      444,  274,  337,  266,  274,  405,  275,  274,  270,  275,
+      302,  276,  275,  337,  276,  277,  293,  276,  277,  271,
+      320,  277,  300,  272,  273,  278,  280,  299,  278,  280,
+      301,  278,  280,  274,  281,  298,  302,  281,  275,  305,
+      281,  303,  271,  276,  302,  282,  283,  277,  282,  283,
+
+      278,  282,  283,  299,  298,  304,  301,  278,  280,  306,
+      308,  298,  318,  299,  280,  305,  281,  303,  313,  316,
+      308,  301,  401,  299,  281,  305,  706,  282,  283,  794,
+      303,  304,  282,  313,  706,  306,  282,  314,  314,  304,
+      322,  318,  401,  328,  283,  316,  335,  336,  338,  340,
+      322,  339,  314,  328,  342,  316,  306,  335,  336,  338,
+      340,  349,  339,  350,  342,  335,  351,  352,  353,  357,
+      354,  358,  349,  313,  350,  355,  355,  351,  352,  353,
+      349,  354,  360,  336,  361,  339,  445,  338,  356,  356,
+      374,  363,  357,  336,  363,  364,  340,  363,  364,  350,
+
+      374,  364,  353,  400,  365,  365,  352,  365,  448,  350,
+      365,  358,  368,  366,  400,  368,  366,  354,  368,  366,
+      445,  358,  361,  363,  793,  360,  369,  364,  370,  369,
+      355,  370,  369,  384,  370,  371,  365,  366,  371,  381,
+      381,  371,  387,  372,  368,  366,  372,  385,  403,  372,
+      364,  402,  386,  368,  384,  388,  448,  389,  369,  384,
+      370,  390,  391,  368,  392,  399,  399,  371,  387,  442,
+      442,  402,  370,  385,  371,  372,  791,  385,  386,  789,
+      399,  388,  386,  389,  447,  403,  387,  390,  391,  419,
+      392,  421,  449,  483,  596,  372,  422,  423,  424,  388,
+
+      419,  392,  421,  391,  389,  390,  425,  422,  423,  424,
+      426,  434,  421,  436,  437,  446,  466,  425,  438,  439,
+      440,  426,  434,  483,  436,  437,  422,  423,  441,  438,
+      439,  440,  596,  449,  436,  447,  468,  450,  450,  441,
+      450,  785,  466,  450,  437,  424,  783,  426,  438,  446,
+      425,  451,  452,  453,  451,  452,  453,  451,  452,  453,
+      484,  524,  468,  467,  440,  441,  439,  454,  455,  450,
+      454,  455,  456,  454,  455,  456,  468,  451,  456,  469,
+      470,  471,  472,  451,  452,  453,  467,  452,  453,  467,
+      473,  487,  474,  782,  475,  484,  482,  625,  485,  454,
+
+      455,  486,  501,  625,  456,  469,  470,  471,  472,  482,
+      524,  523,  502,  501,  456,  472,  473,  455,  474,  454,
+      475,  485,  471,  502,  469,  487,  470,  473,  486,  503,
+      504,  505,  474,  506,  507,  502,  515,  516,  475,  517,
+      503,  504,  505,  518,  506,  507,  520,  515,  516,  522,
+      517,  519,  521,  525,  518,  523,  526,  520,  527,  558,
+      516,  545,  519,  521,  505,  542,  684,  543,  728,  503,
+      506,  528,  728,  780,  528,  504,  522,  528,  507,  517,
+      684,  719,  558,  520,  519,  544,  529,  545,  518,  529,
+      525,  542,  529,  543,  542,  530,  521,  526,  530,  528,
+
+      543,  530,  531,  528,  532,  531,  527,  532,  531,  533,
+      532,  544,  533,  546,  557,  533,  547,  548,  529,  577,
+      560,  549,  550,  544,  559,  562,  575,  530,  778,  719,
+      577,  529,  595,  557,  531,  597,  532,  575,  594,  546,
+      531,  533,  547,  548,  560,  530,  532,  549,  550,  562,
+      547,  576,  559,  578,  546,  575,  550,  577,  533,  579,
+      580,  587,  576,  548,  578,  588,  589,  590,  591,  592,
+      579,  580,  587,  593,  595,  594,  588,  589,  590,  591,
+      592,  598,  740,  599,  576,  597,  599,  578,  759,  599,
+      587,  774,  612,  600,  580,  759,  600,  792,  588,  600,
+
+      740,  590,  613,  592,  589,  579,  593,  601,  612,  792,
+      601,  614,  615,  601,  591,  599,  616,  599,  612,  598,
+      602,  603,  617,  602,  603,  600,  602,  603,  613,  604,
+      618,  600,  604,  626,  644,  604,  645,  614,  615,  601,
+      646,  613,  616,  647,  643,  644,  648,  645,  617,  662,
+      601,  646,  602,  603,  647,  643,  618,  648,  615,  602,
+      643,  604,  626,  655,  656,  657,  658,  659,  604,  660,
+      661,  772,  603,  644,  655,  656,  657,  658,  659,  655,
+      660,  667,  668,  669,  667,  668,  669,  667,  668,  669,
+      661,  670,  662,  671,  670,  672,  671,  670,  672,  671,
+
+      685,  672,  667,  656,  679,  680,  681,  691,  695,  690,
+      694,  697,  696,  667,  668,  669,  718,  702,  691,  695,
+      690,  694,  707,  670,  685,  671,  668,  672,  679,  771,
+      679,  680,  681,  690,  694,  702,  703,  776,  718,  680,
+      696,  691,  695,  702,  698,  699,  712,  698,  699,  697,
+      698,  699,  713,  724,  716,  717,  707,  712,  735,  725,
+      776,  770,  703,  713,  712,  716,  717,  724,  720,  735,
+      770,  720,  716,  698,  720,  721,  698,  699,  721,  724,
+      703,  721,  739,  734,  699,  725,  742,  738,  746,  742,
+      754,  720,  742,  739,  734,  748,  713,  734,  738,  717,
+
+      720,  738,  751,  743,  753,  742,  743,  721,  748,  743,
+      769,  746,  757,  751,  746,  753,  755,  754,  742,  755,
+      762,  765,  755,  764,  721,  751,  767,  753,  768,  757,
+      766,  762,  773,  766,  764,  743,  766,  762,  757,  775,
+      764,  781,  765,  773,  755,  779,  784,  768,  755,  781,
+      775,  773,  766,  777,  768,  786,  777,  784,  775,  777,
+      787,  790,  766,  779,  784,  798,  786,  795,  797,  788,
+      806,  779,  788,  786,  801,  788,  763,  777,  795,  797,
+      761,  806,  787,  790,  808,  777,  760,  790,  758,  795,
+      797,  798,  788,  799,  756,  808,  799,  752,  750,  799,
+
+      801,  788,  810,  749,  747,  810,  744,  741,  810,  736,
+      732,  730,  729,  726,  723,  722,  715,  714,  711,  710,
+      799,  709,  708,  705,  704,  799,  701,  700,  693,  692,
+      689,  688,  687,  686,  810,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  814,  814,  814,
+      814,  814,  814,  814,  814,  814,  814,  814,  814,  815,
+      815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
+      815,  816,  816,  816,  816,  816,  816,  816,  816,  816,
+      816,  816,  816,  817,  817,  817,  817,  817,  817,  817,
+      817,  817,  817,  817,  817,  819,  819,  819,  683,  819,
+
+      819,  819,  820,  820,  682,  820,  820,  821,  674,  821,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  822,
+      822,  822,  822,  822,  822,  822,  822,  822,  822,  822,
+      822,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  824,  824,  673,  824,  824,  825,  825,
+      666,  825,  825,  825,  826,  826,  665,  826,  826,  827,
+      827,  664,  827,  827,  827,  828,  828,  828,  828,  828,
+      828,  828,  828,  828,  828,  828,  828,  829,  829,  829,
+      829,  829,  829,  829,  829,  829,  829,  829,  829,  830,
+      663,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+
+      830,  831,  650,  649,  831,  831,  831,  831,  831,  831,
+      831,  831,  831,  832,  832,  832,  832,  832,  832,  832,
+      832,  832,  832,  832,  832,  833,  638,  637,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  834,  834,  632,
+      834,  834,  835,  835,  835,  631,  835,  835,  835,  836,
+      836,  630,  836,  840,  840,  629,  840,  840,  628,  627,
+      840,  842,  842,  620,  842,  842,  619,  611,  842,  844,
+      844,  610,  844,  844,  609,  607,  844,  845,  845,  606,
+      845,  845,  605,  586,  845,  846,  846,  585,  846,  846,
+      584,  583,  846,  582,  581,  574,  573,  572,  571,  570,
+
+      569,  568,  567,  566,  565,  564,  563,  556,  555,  554,
+      553,  552,  551,  541,  540,  539,  538,  536,  535,  534,
+      514,  513,  512,  511,  510,  509,  508,  500,  499,  498,
+      497,  496,  495,  494,  493,  492,  491,  490,  489,  488,
+      481,  480,  479,  478,  477,  476,  465,  464,  463,  462,
+      461,  460,  459,  458,  457,  443,  435,  433,  432,  431,
+      430,  429,  428,  427,  420,  418,  417,  416,  415,  414,
+      413,  412,  411,  410,  409,  408,  407,  406,  398,  397,
+      396,  395,  394,  393,  383,  382,  380,  379,  378,  376,
+      375,  373,  367,  359,  347,  346,  345,  344,  341,  333,
+
+      332,  331,  330,  327,  326,  325,  324,  321,  317,  312,
+      311,  310,  307,  296,  291,  289,  288,  287,  286,  285,
+      279,  260,  255,  248,  247,  246,  245,  244,  243,  240,
+      239,  238,  237,  230,  228,  226,  225,  224,  216,  214,
+      212,  211,  210,  208,  206,  205,  204,  201,  195,  194,
+      193,  192,  191,  188,  183,  182,  180,  179,  178,  168,
+      166,  155,  154,  153,  152,  151,  149,  130,  115,  114,
+      113,  112,  104,  103,  102,  101,  100,   99,   89,   88,
+       87,   86,   85,   84,   81,   80,   79,   78,   77,   76,
+       74,   73,   72,   70,   58,   53,   50,   49,   48,   47,
+
+       46,   45,   34,   32,   31,   30,   27,   23,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[46] =
+static yyconst flex_int32_t yy_rule_can_match_eol[48] =
     {   0,
-0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
-    1, 1, 1, 1, 0, 0,     };
+0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 
+    0, 0, 1, 1, 1, 1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1279,6 +1315,7 @@ extern void bbparseTrace(FILE *TraceFILE, char *zTracePrompt);
 //static const char* rgbInput;
 //static size_t cbInput;
 
+extern "C" {
 
 int lineError;
 int errorParse;
@@ -1289,6 +1326,8 @@ enum {
   errorUnsupportedFeature, 
 };
 
+}
+
 #define YY_EXTRA_TYPE lex_t*
 
        /* Read from buffer */
@@ -1312,7 +1351,7 @@ static const char* fixup_escapes (const char* sz);
 
 
 
-#line 1316 "<stdout>"
+#line 1355 "<stdout>"
 
 #define INITIAL 0
 #define S_DEF 1
@@ -1326,11 +1365,13 @@ static const char* fixup_escapes (const char* sz);
 #define S_RVALUE 9
 #define S_TASK 10
 
+#ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
  * down here because we want the user's section 1 to have been scanned first.
  * The user has a chance to override it with an option.
  */
 #include <unistd.h>
+#endif
 
 #ifndef YY_EXTRA_TYPE
 #define YY_EXTRA_TYPE void *
@@ -1370,6 +1411,8 @@ struct yyguts_t
 
     }; /* end struct yyguts_t */
 
+static int yy_init_globals (yyscan_t yyscanner );
+
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
@@ -1541,10 +1584,10 @@ YY_DECL
        register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 159 "bitbakescanner.l"
+#line 164 "bitbakescanner.l"
 
 
-#line 1548 "<stdout>"
+#line 1591 "<stdout>"
 
        if ( yyg->yy_init )
                {
@@ -1597,13 +1640,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 798 )
+                               if ( yy_current_state >= 813 )
                                        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 != 797 );
+               while ( yy_current_state != 812 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1637,44 +1680,56 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 161 "bitbakescanner.l"
+#line 166 "bitbakescanner.l"
 { BEGIN S_RVALUE;
                                   yyextra->accept (T_OP_APPEND); }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 163 "bitbakescanner.l"
+#line 168 "bitbakescanner.l"
 { BEGIN S_RVALUE;
                                   yyextra->accept (T_OP_PREPEND); }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 165 "bitbakescanner.l"
+#line 170 "bitbakescanner.l"
 { BEGIN S_RVALUE;
                                   yyextra->accept (T_OP_IMMEDIATE); }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 167 "bitbakescanner.l"
+#line 172 "bitbakescanner.l"
 { BEGIN S_RVALUE;
                                   yyextra->accept (T_OP_ASSIGN); }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 169 "bitbakescanner.l"
+#line 174 "bitbakescanner.l"
 { BEGIN S_RVALUE;
-                                  yyextra->accept (T_OP_COND); }
+                                  yyextra->accept (T_OP_PREDOT); }
        YY_BREAK
 case 6:
-/* rule 6 can match eol */
 YY_RULE_SETUP
-#line 172 "bitbakescanner.l"
-{  }
+#line 176 "bitbakescanner.l"
+{ BEGIN S_RVALUE;
+                                  yyextra->accept (T_OP_POSTDOT); }
        YY_BREAK
 case 7:
-/* rule 7 can match eol */
 YY_RULE_SETUP
-#line 173 "bitbakescanner.l"
+#line 178 "bitbakescanner.l"
+{ BEGIN S_RVALUE;
+                                  yyextra->accept (T_OP_COND); }
+       YY_BREAK
+case 8:
+/* rule 8 can match eol */
+YY_RULE_SETUP
+#line 181 "bitbakescanner.l"
+{  }
+       YY_BREAK
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+#line 182 "bitbakescanner.l"
 { BEGIN INITIAL;
                                   size_t cb = yyleng;
                                   while (cb && isspace (yytext[cb - 1]))
@@ -1682,10 +1737,10 @@ YY_RULE_SETUP
                                   yytext[cb - 1] = 0;
                                   yyextra->accept (T_STRING, yytext + 1); }
        YY_BREAK
-case 8:
-/* rule 8 can match eol */
+case 10:
+/* rule 10 can match eol */
 YY_RULE_SETUP
-#line 179 "bitbakescanner.l"
+#line 188 "bitbakescanner.l"
 { BEGIN INITIAL;
                                   size_t cb = yyleng;
                                   while (cb && isspace (yytext[cb - 1]))
@@ -1693,208 +1748,208 @@ YY_RULE_SETUP
                                   yytext[cb - 1] = 0;
                                   yyextra->accept (T_STRING, yytext + 1); }
        YY_BREAK
-case 9:
-/* rule 9 can match eol */
+case 11:
+/* rule 11 can match eol */
 YY_RULE_SETUP
-#line 186 "bitbakescanner.l"
+#line 195 "bitbakescanner.l"
 { ERROR (errorUnexpectedInput);  }
        YY_BREAK
-case 10:
-/* rule 10 can match eol */
+case 12:
+/* rule 12 can match eol */
 YY_RULE_SETUP
-#line 187 "bitbakescanner.l"
+#line 196 "bitbakescanner.l"
 { BEGIN INITIAL;
                                   yyextra->accept (T_STRING, NULL); }
        YY_BREAK
-case 11:
+case 13:
 YY_RULE_SETUP
-#line 190 "bitbakescanner.l"
+#line 199 "bitbakescanner.l"
 { BEGIN S_INCLUDE;
                                   yyextra->accept (T_INCLUDE); }
        YY_BREAK
-case 12:
+case 14:
 YY_RULE_SETUP
-#line 192 "bitbakescanner.l"
+#line 201 "bitbakescanner.l"
 { BEGIN S_REQUIRE;
                                   yyextra->accept (T_REQUIRE); }
        YY_BREAK
-case 13:
+case 15:
 YY_RULE_SETUP
-#line 194 "bitbakescanner.l"
+#line 203 "bitbakescanner.l"
 { BEGIN S_INHERIT;
                                   yyextra->accept (T_INHERIT); }
        YY_BREAK
-case 14:
+case 16:
 YY_RULE_SETUP
-#line 196 "bitbakescanner.l"
+#line 205 "bitbakescanner.l"
 { BEGIN S_TASK;
                                   yyextra->accept (T_ADDTASK); }
        YY_BREAK
-case 15:
+case 17:
 YY_RULE_SETUP
-#line 198 "bitbakescanner.l"
+#line 207 "bitbakescanner.l"
 { yyextra->accept (T_ADDHANDLER); }
        YY_BREAK
-case 16:
+case 18:
 YY_RULE_SETUP
-#line 199 "bitbakescanner.l"
+#line 208 "bitbakescanner.l"
 { BEGIN S_FUNC;
                                   yyextra->accept (T_EXPORT_FUNC); }
        YY_BREAK
-case 17:
+case 19:
 YY_RULE_SETUP
-#line 201 "bitbakescanner.l"
+#line 210 "bitbakescanner.l"
 { yyextra->accept (T_BEFORE); }
        YY_BREAK
-case 18:
+case 20:
 YY_RULE_SETUP
-#line 202 "bitbakescanner.l"
+#line 211 "bitbakescanner.l"
 { yyextra->accept (T_AFTER); }
        YY_BREAK
-case 19:
+case 21:
 YY_RULE_SETUP
-#line 203 "bitbakescanner.l"
+#line 212 "bitbakescanner.l"
 { yyextra->accept (T_EXPORT); }
        YY_BREAK
-case 20:
+case 22:
 YY_RULE_SETUP
-#line 205 "bitbakescanner.l"
+#line 214 "bitbakescanner.l"
 { yyextra->accept (T_FAKEROOT); }
        YY_BREAK
-case 21:
+case 23:
 YY_RULE_SETUP
-#line 206 "bitbakescanner.l"
+#line 215 "bitbakescanner.l"
 { yyextra->accept (T_PYTHON); }
        YY_BREAK
-case 22:
-/* rule 22 can match eol */
+case 24:
+/* rule 24 can match eol */
 YY_RULE_SETUP
-#line 207 "bitbakescanner.l"
+#line 216 "bitbakescanner.l"
 { BEGIN S_PROC;
                                   yyextra->accept (T_PROC_OPEN); }
        YY_BREAK
-case 23:
-/* rule 23 can match eol */
+case 25:
+/* rule 25 can match eol */
 YY_RULE_SETUP
-#line 209 "bitbakescanner.l"
+#line 218 "bitbakescanner.l"
 { BEGIN INITIAL;
                                   yyextra->accept (T_PROC_CLOSE); }
        YY_BREAK
-case 24:
-/* rule 24 can match eol */
+case 26:
+/* rule 26 can match eol */
 YY_RULE_SETUP
-#line 211 "bitbakescanner.l"
+#line 220 "bitbakescanner.l"
 { yyextra->accept (T_PROC_BODY, yytext); }
        YY_BREAK
-case 25:
+case 27:
 YY_RULE_SETUP
-#line 213 "bitbakescanner.l"
+#line 222 "bitbakescanner.l"
 { BEGIN S_DEF; }
        YY_BREAK
-case 26:
+case 28:
 YY_RULE_SETUP
-#line 214 "bitbakescanner.l"
+#line 223 "bitbakescanner.l"
 { BEGIN S_DEF_ARGS;
                                   yyextra->accept (T_SYMBOL, yytext); }
        YY_BREAK
-case 27:
+case 29:
 YY_RULE_SETUP
-#line 216 "bitbakescanner.l"
+#line 225 "bitbakescanner.l"
 { yyextra->accept (T_DEF_ARGS, yytext); }
        YY_BREAK
-case 28:
-/* rule 28 can match eol */
+case 30:
+/* rule 30 can match eol */
 YY_RULE_SETUP
-#line 217 "bitbakescanner.l"
+#line 226 "bitbakescanner.l"
 { BEGIN S_DEF_BODY; }
        YY_BREAK
-case 29:
-/* rule 29 can match eol */
+case 31:
+/* rule 31 can match eol */
 YY_RULE_SETUP
-#line 218 "bitbakescanner.l"
+#line 227 "bitbakescanner.l"
 { yyextra->accept (T_DEF_BODY, yytext); }
        YY_BREAK
-case 30:
-/* rule 30 can match eol */
+case 32:
+/* rule 32 can match eol */
 YY_RULE_SETUP
-#line 219 "bitbakescanner.l"
+#line 228 "bitbakescanner.l"
 { yyextra->accept (T_DEF_BODY, yytext); }
        YY_BREAK
-case 31:
+case 33:
 YY_RULE_SETUP
-#line 220 "bitbakescanner.l"
+#line 229 "bitbakescanner.l"
 { BEGIN INITIAL; unput (yytext[0]); }
        YY_BREAK
-case 32:
-/* rule 32 can match eol */
+case 34:
+/* rule 34 can match eol */
 YY_RULE_SETUP
-#line 222 "bitbakescanner.l"
+#line 231 "bitbakescanner.l"
 { }
        YY_BREAK
-case 33:
+case 35:
 YY_RULE_SETUP
-#line 224 "bitbakescanner.l"
+#line 233 "bitbakescanner.l"
 { yyextra->accept (T_SYMBOL, yytext); }
        YY_BREAK
-case 34:
+case 36:
 YY_RULE_SETUP
-#line 225 "bitbakescanner.l"
+#line 234 "bitbakescanner.l"
 { yyextra->accept (T_VARIABLE, yytext); }
        YY_BREAK
-case 35:
+case 37:
 YY_RULE_SETUP
-#line 227 "bitbakescanner.l"
+#line 236 "bitbakescanner.l"
 { yyextra->accept (T_TSYMBOL, yytext); }
        YY_BREAK
-case 36:
+case 38:
 YY_RULE_SETUP
-#line 228 "bitbakescanner.l"
+#line 237 "bitbakescanner.l"
 { yyextra->accept (T_FSYMBOL, yytext); }
        YY_BREAK
-case 37:
+case 39:
 YY_RULE_SETUP
-#line 229 "bitbakescanner.l"
+#line 238 "bitbakescanner.l"
 { yyextra->accept (T_ISYMBOL, yytext); }
        YY_BREAK
-case 38:
+case 40:
 YY_RULE_SETUP
-#line 230 "bitbakescanner.l"
+#line 239 "bitbakescanner.l"
 { BEGIN INITIAL;
                                   yyextra->accept (T_ISYMBOL, yytext); }
        YY_BREAK
-case 39:
+case 41:
 YY_RULE_SETUP
-#line 232 "bitbakescanner.l"
+#line 241 "bitbakescanner.l"
 { BEGIN INITIAL;
                                   yyextra->accept (T_ISYMBOL, yytext); }
        YY_BREAK
-case 40:
-/* rule 40 can match eol */
+case 42:
+/* rule 42 can match eol */
 YY_RULE_SETUP
-#line 234 "bitbakescanner.l"
+#line 243 "bitbakescanner.l"
 { BEGIN INITIAL; }
        YY_BREAK
-case 41:
-/* rule 41 can match eol */
+case 43:
+/* rule 43 can match eol */
 YY_RULE_SETUP
-#line 235 "bitbakescanner.l"
+#line 244 "bitbakescanner.l"
 { BEGIN INITIAL; }
        YY_BREAK
-case 42:
-/* rule 42 can match eol */
+case 44:
+/* rule 44 can match eol */
 YY_RULE_SETUP
-#line 236 "bitbakescanner.l"
+#line 245 "bitbakescanner.l"
 { BEGIN INITIAL; }
        YY_BREAK
-case 43:
-/* rule 43 can match eol */
+case 45:
+/* rule 45 can match eol */
 YY_RULE_SETUP
-#line 238 "bitbakescanner.l"
+#line 247 "bitbakescanner.l"
 /* Insignificant whitespace */
        YY_BREAK
-case 44:
+case 46:
 YY_RULE_SETUP
-#line 240 "bitbakescanner.l"
+#line 249 "bitbakescanner.l"
 { ERROR (errorUnexpectedInput); }
        YY_BREAK
 /* Check for premature termination */
@@ -1909,15 +1964,15 @@ case YY_STATE_EOF(S_REQUIRE):
 case YY_STATE_EOF(S_PROC):
 case YY_STATE_EOF(S_RVALUE):
 case YY_STATE_EOF(S_TASK):
-#line 243 "bitbakescanner.l"
+#line 252 "bitbakescanner.l"
 { return T_EOF; }
        YY_BREAK
-case 45:
+case 47:
 YY_RULE_SETUP
-#line 245 "bitbakescanner.l"
+#line 254 "bitbakescanner.l"
 ECHO;
        YY_BREAK
-#line 1921 "<stdout>"
+#line 1976 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -2103,7 +2158,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 
        else
                {
-                       size_t num_to_read =
+                       int num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
@@ -2202,7 +2257,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 798 )
+                       if ( yy_current_state >= 813 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2231,11 +2286,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 798 )
+               if ( yy_current_state >= 813 )
                        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 == 797);
+       yy_is_jam = (yy_current_state == 812);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2675,10 +2730,10 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscann
  * @note If you want to scan bytes that may contain NUL values, then use
  *       yy_scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (yyconst char * str , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_string (yyconst char * yy_str , yyscan_t yyscanner)
 {
     
-       return yy_scan_bytes(str,strlen(str) ,yyscanner);
+       return yy_scan_bytes(yy_str,strlen(yy_str) ,yyscanner);
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
@@ -3077,7 +3132,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
 #undef YY_DECL_IS_OURS
 #undef YY_DECL
 #endif
-#line 245 "bitbakescanner.l"
+#line 254 "bitbakescanner.l"
 
 
 
@@ -3091,36 +3146,56 @@ void lex_t::accept (int token, const char* sz)
     parse (parser, token, t, this);
 }
 
-int lex_t::line ()const
+void lex_t::input (char *buf, int *result, int max_size)
 {
-    return yyget_lineno (scanner);
+    printf("lex_t::input %p %d\n", buf, max_size);
+    *result = fread(buf, 1, max_size, file);
+    printf("lex_t::input result %d\n", *result);
 }
 
-void parse (FILE* file, PyObject* data)
+int lex_t::line ()const
 {
-    void* parser = bbparseAlloc (malloc);
-    yyscan_t scanner;
-    lex_t lex;
-
-    yylex_init (&scanner);
-
-    lex.parser = parser;
-    lex.scanner = scanner;
-    lex.file = file;
-    lex.data = data;
-    lex.parse = bbparse;
-    yyset_extra (&lex, scanner);
-
+    printf("lex_t::line\n");
+    return yyget_lineno (scanner);
+}
 
-    int result = yylex (scanner);
 
-    lex.accept (0);
-    bbparseTrace (NULL, NULL);
+extern "C" {
 
-    if (result != T_EOF)
-        printf ("premature end of file\n");
+    void parse (FILE* file, PyObject* data)
+    {
+       printf("parse bbparseAlloc\n");
+        void* parser = bbparseAlloc (malloc);
+        yyscan_t scanner;
+        lex_t lex;
+
+       printf("parse yylex_init\n");
+        yylex_init (&scanner);
+
+        lex.parser = parser;
+        lex.scanner = scanner;
+        lex.file = file;
+        lex.data = data;
+        lex.parse = bbparse;
+       printf("parse yyset_extra\n");
+        yyset_extra (&lex, scanner);
+
+       printf("parse yylex\n");
+        int result = yylex (scanner);
+       
+       printf("parse result %d\n", result);
+
+        lex.accept (0);
+       printf("parse lex.accept\n");
+        bbparseTrace (NULL, NULL);
+       printf("parse bbparseTrace\n");
+
+        if (result != T_EOF)
+           printf ("premature end of file\n");
+
+        yylex_destroy (scanner);
+        bbparseFree (parser, free);
+    }
 
-    yylex_destroy (scanner);
-    bbparseFree (parser, free);
 }
 
index 782bc57..f69a732 100644 (file)
@@ -83,6 +83,7 @@ extern void bbparseTrace(FILE *TraceFILE, char *zTracePrompt);
 //static const char* rgbInput;
 //static size_t cbInput;
 
+extern "C" {
 
 int lineError;
 int errorParse;
@@ -93,6 +94,8 @@ enum {
   errorUnsupportedFeature, 
 };
 
+}
+
 #define YY_EXTRA_TYPE lex_t*
 
        /* Read from buffer */
@@ -112,6 +115,8 @@ static const char* fixup_escapes (const char* sz);
 C_SP            [ \t]
 COMMENT         #.*\n
 OP_ASSIGN       "="
+OP_PREDOT       ".="
+OP_POSTDOT      "=."
 OP_IMMEDIATE    ":="
 OP_PREPEND      "=+"
 OP_APPEND       "+="
@@ -166,6 +171,10 @@ PROC            \({C_SP}*\)
                                   yyextra->accept (T_OP_IMMEDIATE); }
 {OP_ASSIGN}                     { BEGIN S_RVALUE;
                                   yyextra->accept (T_OP_ASSIGN); }
+{OP_PREDOT}                     { BEGIN S_RVALUE;
+                                  yyextra->accept (T_OP_PREDOT); }
+{OP_POSTDOT}                    { BEGIN S_RVALUE;
+                                  yyextra->accept (T_OP_POSTDOT); }
 {OP_COND}                       { BEGIN S_RVALUE;
                                   yyextra->accept (T_OP_COND); }
 
@@ -254,35 +263,55 @@ void lex_t::accept (int token, const char* sz)
     parse (parser, token, t, this);
 }
 
+void lex_t::input (char *buf, int *result, int max_size)
+{
+    printf("lex_t::input %p %d\n", buf, max_size);
+    *result = fread(buf, 1, max_size, file);
+    printf("lex_t::input result %d\n", *result);
+}
+
 int lex_t::line ()const
 {
+    printf("lex_t::line\n");
     return yyget_lineno (scanner);
 }
 
-void parse (FILE* file, PyObject* data)
-{
-    void* parser = bbparseAlloc (malloc);
-    yyscan_t scanner;
-    lex_t lex;
 
-    yylex_init (&scanner);
+extern "C" {
+
+    void parse (FILE* file, PyObject* data)
+    {
+       printf("parse bbparseAlloc\n");
+        void* parser = bbparseAlloc (malloc);
+        yyscan_t scanner;
+        lex_t lex;
+
+       printf("parse yylex_init\n");
+        yylex_init (&scanner);
 
-    lex.parser = parser;
-    lex.scanner = scanner;
-    lex.file = file;
-    lex.data = data;
-    lex.parse = bbparse;
-    yyset_extra (&lex, scanner);
+        lex.parser = parser;
+        lex.scanner = scanner;
+        lex.file = file;
+        lex.data = data;
+        lex.parse = bbparse;
+       printf("parse yyset_extra\n");
+        yyset_extra (&lex, scanner);
 
+       printf("parse yylex\n");
+        int result = yylex (scanner);
+       
+       printf("parse result %d\n", result);
 
-    int result = yylex (scanner);
+        lex.accept (0);
+       printf("parse lex.accept\n");
+        bbparseTrace (NULL, NULL);
+       printf("parse bbparseTrace\n");
 
-    lex.accept (0);
-    bbparseTrace (NULL, NULL);
+        if (result != T_EOF)
+           printf ("premature end of file\n");
 
-    if (result != T_EOF)
-        printf ("premature end of file\n");
+        yylex_destroy (scanner);
+        bbparseFree (parser, free);
+    }
 
-    yylex_destroy (scanner);
-    bbparseFree (parser, free);
 }
index 0a985ed..651f3a8 100644 (file)
@@ -24,30 +24,23 @@ THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #ifndef LEXER_H
 #define LEXER_H
 
-/*
- * The PyObject Token. Likely to be
- * a bb.data implementation
- */
-struct PyObject;
-
-
-/**
- * This is used by the Parser and Scanner
- * of BitBake.
- * The implementation and creation is done
- * in the scanner.
- */
+#include "Python.h"
+
+extern "C" {
+       
 struct lex_t {
-    void *parser;
-    void *scanner;
-    FILE *file;
+    voidparser;
+    voidscanner;
+    FILE* file;    
     PyObject *data;
+    
     void* (*parse)(void*, int, token_t, lex_t*);
 
-    void accept(int token, const char* string = 0);
+    void accept(int token, const char* sz = NULL);
     void input(char *buf, int *result, int max_size);
     int  line()const;
 };
 
+}
 
 #endif
diff --git a/lib/bb/parse/parse_c/lexerc.h b/lib/bb/parse/parse_c/lexerc.h
new file mode 100644 (file)
index 0000000..0163a7d
--- /dev/null
@@ -0,0 +1,17 @@
+
+#ifndef LEXERC_H
+#define LEXERC_H
+
+#include <stdio.h>
+
+extern int lineError;
+extern int errorParse;
+
+typedef struct {
+    void *parser;
+    void *scanner;
+    FILE *file;
+    PyObject *data;
+} lex_t;
+
+#endif
index de7544c..bf34527 100644 (file)
@@ -27,15 +27,19 @@ This is the glue:
 
 */
 
+extern "C" {
+
 struct lex_t;
 
 extern void e_assign(lex_t*, const char*, const char*);
 extern void e_export(lex_t*, const char*);
 extern void e_immediate(lex_t*, const char*, const char*);
 extern void e_cond(lex_t*, const char*, const char*);
-extern void e_assign(lex_t*, const char*, const char*);
 extern void e_prepend(lex_t*, const char*, const char*);
 extern void e_append(lex_t*, const char*, const char*);
+extern void e_precat(lex_t*, const char*, const char*);
+extern void e_postcat(lex_t*, const char*, const char*);
+
 extern void e_addtask(lex_t*, const char*, const char*, const char*);
 extern void e_addhandler(lex_t*,const char*);
 extern void e_export_func(lex_t*, const char*);
@@ -48,4 +52,5 @@ extern void e_proc_fakeroot(lex_t*, const char*, const char*);
 extern void e_def(lex_t*, const char*, const char*, const char*);
 extern void e_parse_error(lex_t*);
 
+}
 #endif // PYTHON_OUTPUT_H