Merge: Warn useless do block
authorJean Privat <jean@pryen.org>
Mon, 8 Jun 2015 10:05:05 +0000 (06:05 -0400)
committerJean Privat <jean@pryen.org>
Mon, 8 Jun 2015 10:05:05 +0000 (06:05 -0400)
Warn useless do block, like

~~~nit
loop do
  print 1
end
~~~

Close #1437

Pull-Request: #1438
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

14 files changed:
contrib/opportunity/src/templates/meetup.nit
share/man/nitc.md
src/compiler/abstract_compiler.nit
src/loader.nit
src/mkcsrc
src/parser/nit.sablecc3xx
src/parser/parser_nodes.nit
src/parser/parser_work.nit
src/parser/tables_nit.c
tests/sav/base_import_alt3.res
tests/sav/error_mod_unk.res
tests/sav/test_float.res
tests/sav/xymus_net.res
tests/test_float.nit

index 6eca566..07a5f66 100644 (file)
@@ -356,7 +356,7 @@ redef class Meetup
                end
                t.add """
 <tr id="total">
-       <th>Total</th>
+       <th>Total ({{{participants(db).length}}})</th>
                """
                for i in answers(db) do
                        t.add """<th id="total{{{i.id}}}"><center>{{{i.count(db)}}}"""
index 91e8d8c..9e0fbf5 100644 (file)
@@ -404,8 +404,18 @@ They are useless for a normal user.
 `--no-main`
 :   Do not generate main entry point.
 
-`--stacktrace`
-:   Control the generation of stack traces.
+`--no-stacktrace`
+:   The compiled program will not display stack traces on runtime errors.
+
+    Because stack traces rely on libunwind, this option might be useful in order to generate more portable binaries
+    since libunwind might be non available on the runtime system (or available with an ABI incompatible version).
+
+    The generated C is API-portable and can be reused, distributed and compiled on any supported system.
+    If the option `--no-stacktrace` is not used but the development files of the library `libunwind` are not available, then a warning will be displayed
+    and stack trace will be disabled.
+
+    Note that the `--no-stacktrace` option (or this absence) can be toggled manually in the generated Makefile (search `NO_STACKTRACE` in the Makefile).
+    Moreover, the environment variable `NIT_NO_STACK` (see bellow) can also be used at runtime to disable stack traces.
 
 `--max-c-lines`
 :   Maximum number of lines in generated C files. Use 0 for unlimited.
@@ -481,6 +491,20 @@ This option is used to test the robustness of the tools by allowing phases to pr
     * large: disable the GC and just allocate a large memory area to use for all instantiation.
     * help: show the list of available options.
 
+`NIT_NO_STACK`
+:   Runtime control of stack traces.
+
+    By default, stack traces are printed when a runtime errors occurs during the execution of a compiled program.
+    When setting this environment variable to a non empty value, such stack traces are disabled.
+
+    The environment variable is used when programs are executed, not when they are compiled.
+    Thus, you do not need to recompile programs in order to disable generated stack traces.
+
+    Note that stack traces require that, during the compilation, development files of the library `libunwind` are available.
+    If they are not available, then programs are compiled without any stack trace support.
+
+    To completely disable stack traces, see the option `--no-stacktrace`.
+
 # SEE ALSO
 
 The Nit language documentation and the source code of its tools and libraries may be downloaded from <http://nitlanguage.org>
index 0a4d430..a095201 100644 (file)
@@ -63,8 +63,8 @@ redef class ToolContext
        var opt_invocation_metrics = new OptionBool("Enable static and dynamic count of all method invocations", "--invocation-metrics")
        # --isset-checks-metrics
        var opt_isset_checks_metrics = new OptionBool("Enable static and dynamic count of isset checks before attributes access", "--isset-checks-metrics")
-       # --stacktrace
-       var opt_stacktrace = new OptionString("Control the generation of stack traces", "--stacktrace")
+       # --no-stacktrace
+       var opt_no_stacktrace = new OptionBool("Disable the generation of stack traces", "--no-stacktrace")
        # --no-gcc-directives
        var opt_no_gcc_directive = new OptionArray("Disable a advanced gcc directives for optimization", "--no-gcc-directive")
        # --release
@@ -76,7 +76,7 @@ redef class ToolContext
                self.option_context.add_option(self.opt_output, self.opt_dir, self.opt_no_cc, self.opt_no_main, self.opt_make_flags, self.opt_compile_dir, self.opt_hardening)
                self.option_context.add_option(self.opt_no_check_covariance, self.opt_no_check_attr_isset, self.opt_no_check_assert, self.opt_no_check_autocast, self.opt_no_check_null, self.opt_no_check_all)
                self.option_context.add_option(self.opt_typing_test_metrics, self.opt_invocation_metrics, self.opt_isset_checks_metrics)
-               self.option_context.add_option(self.opt_stacktrace)
+               self.option_context.add_option(self.opt_no_stacktrace)
                self.option_context.add_option(self.opt_no_gcc_directive)
                self.option_context.add_option(self.opt_release)
                self.option_context.add_option(self.opt_max_c_lines, self.opt_group_c_files)
@@ -88,17 +88,6 @@ redef class ToolContext
        do
                super
 
-               var st = opt_stacktrace.value
-               if st == "none" or st == "libunwind" or st == "nitstack" then
-                       # Fine, do nothing
-               else if st == "auto" or st == null then
-                       # Default is nitstack
-                       opt_stacktrace.value = "nitstack"
-               else
-                       print "Option Error: unknown value `{st}` for --stacktrace. Use `none`, `libunwind`, `nitstack` or `auto`."
-                       exit(1)
-               end
-
                if opt_output.value != null and opt_dir.value != null then
                        print "Option Error: cannot use both --dir and --output"
                        exit(1)
@@ -212,7 +201,7 @@ class MakefileToolchain
        fun write_files(compile_dir: String, cfiles: Array[String])
        do
                var platform = compiler.target_platform
-               if self.toolcontext.opt_stacktrace.value == "nitstack" and platform.supports_libunwind then compiler.build_c_to_nit_bindings
+               if platform.supports_libunwind then compiler.build_c_to_nit_bindings
                var cc_opt_with_libgc = "-DWITH_LIBGC"
                if not platform.supports_libgc then cc_opt_with_libgc = ""
 
@@ -355,25 +344,50 @@ class MakefileToolchain
 
                makefile.write("CC = ccache cc\nCXX = ccache c++\nCFLAGS = -g -O2 -Wno-unused-value -Wno-switch -Wno-attributes\nCINCL =\nLDFLAGS ?= \nLDLIBS  ?= -lm {linker_options.join(" ")}\n\n")
 
-               var ost = toolcontext.opt_stacktrace.value
-               if (ost == "libunwind" or ost == "nitstack") and platform.supports_libunwind then makefile.write("NEED_LIBUNWIND := YesPlease\n")
+               makefile.write "\n# SPECIAL CONFIGURATION FLAGS\n"
+               if platform.supports_libunwind then
+                       if toolcontext.opt_no_stacktrace.value then
+                               makefile.write "NO_STACKTRACE=True"
+                       else
+                               makefile.write "NO_STACKTRACE= # Set to `True` to enable"
+                       end
+               end
 
                # Dynamic adaptations
                # While `platform` enable complex toolchains, they are statically applied
                # For a dynamic adaptsation of the compilation, the generated Makefile should check and adapt things itself
+               makefile.write "\n\n"
 
                # Check and adapt the targeted system
                makefile.write("uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')\n")
-               makefile.write("ifeq ($(uname_S),Darwin)\n")
-               # remove -lunwind since it is already included on macosx
-               makefile.write("\tNEED_LIBUNWIND :=\n")
-               makefile.write("endif\n\n")
 
                # Check and adapt for the compiler used
                # clang need an additionnal `-Qunused-arguments`
                makefile.write("clang_check := $(shell sh -c '$(CC) -v 2>&1 | grep -q clang; echo $$?')\nifeq ($(clang_check), 0)\n\tCFLAGS += -Qunused-arguments\nendif\n")
 
-               makefile.write("ifdef NEED_LIBUNWIND\n\tLDLIBS += -lunwind\nendif\n")
+               if platform.supports_libunwind then
+                       makefile.write """
+ifneq ($(NO_STACKTRACE), True)
+  # Check and include lib-unwind in a portable way
+  ifneq ($(uname_S),Darwin)
+    # already included on macosx, but need to get the correct flags in other supported platforms.
+    ifeq ($(shell pkg-config --exists 'libunwind'; echo $$?), 0)
+      LDLIBS += `pkg-config --libs libunwind`
+      CFLAGS += `pkg-config --cflags libunwind`
+    else
+      $(warning "[_] stack-traces disabled. Please install libunwind-dev.")
+      CFLAGS += -D NO_STACKTRACE
+    endif
+  endif
+else
+  # Stacktraces disabled
+  CFLAGS += -D NO_STACKTRACE
+endif
+
+"""
+               else
+                       makefile.write("CFLAGS += -D NO_STACKTRACE\n\n")
+               end
 
                makefile.write("all: {outpath}\n")
                if outpath != real_outpath then
@@ -731,19 +745,16 @@ extern void nitni_global_ref_decr( struct nitni_ref *ref );
        do
                var v = self.new_visitor
                v.add_decl("#include <signal.h>")
-               var ost = modelbuilder.toolcontext.opt_stacktrace.value
                var platform = target_platform
 
-               if not platform.supports_libunwind then ost = "none"
-
                var no_main = platform.no_main or modelbuilder.toolcontext.opt_no_main.value
 
-               if ost == "nitstack" or ost == "libunwind" then
+               if platform.supports_libunwind then
+                       v.add_decl("#ifndef NO_STACKTRACE")
                        v.add_decl("#define UNW_LOCAL_ONLY")
                        v.add_decl("#include <libunwind.h>")
-                       if ost == "nitstack" then
-                               v.add_decl("#include \"c_functions_hash.h\"")
-                       end
+                       v.add_decl("#include \"c_functions_hash.h\"")
+                       v.add_decl("#endif")
                end
                v.add_decl("int glob_argc;")
                v.add_decl("char **glob_argv;")
@@ -777,7 +788,8 @@ extern void nitni_global_ref_decr( struct nitni_ref *ref );
                end
 
                v.add_decl("static void show_backtrace(void) \{")
-               if ost == "nitstack" or ost == "libunwind" then
+               if platform.supports_libunwind then
+                       v.add_decl("#ifndef NO_STACKTRACE")
                        v.add_decl("char* opt = getenv(\"NIT_NO_STACK\");")
                        v.add_decl("unw_cursor_t cursor;")
                        v.add_decl("if(opt==NULL)\{")
@@ -791,20 +803,17 @@ extern void nitni_global_ref_decr( struct nitni_ref *ref );
                        v.add_decl("PRINT_ERROR(\"-------------------------------------------------\\n\");")
                        v.add_decl("while (unw_step(&cursor) > 0) \{")
                        v.add_decl("    unw_get_proc_name(&cursor, procname, 100, &ip);")
-                       if ost == "nitstack" then
                        v.add_decl("    const char* recv = get_nit_name(procname, strlen(procname));")
                        v.add_decl("    if (recv != NULL)\{")
                        v.add_decl("            PRINT_ERROR(\"` %s\\n\", recv);")
                        v.add_decl("    \}else\{")
                        v.add_decl("            PRINT_ERROR(\"` %s\\n\", procname);")
                        v.add_decl("    \}")
-                       else
-                       v.add_decl("    PRINT_ERROR(\"` %s \\n\",procname);")
-                       end
                        v.add_decl("\}")
                        v.add_decl("PRINT_ERROR(\"-------------------------------------------------\\n\");")
                        v.add_decl("free(procname);")
                        v.add_decl("\}")
+                       v.add_decl("#endif /* NO_STACKTRACE */")
                end
                v.add_decl("\}")
 
index 0e6878b..d78ac71 100644 (file)
@@ -50,7 +50,9 @@ redef class ModelBuilder
                end
 
                var nit_dir = toolcontext.nit_dir
-               var libname = "{nit_dir}/lib"
+               var libname = nit_dir/"lib"
+               if libname.file_exists then paths.add(libname)
+               libname = nit_dir/"contrib"
                if libname.file_exists then paths.add(libname)
        end
 
@@ -222,6 +224,14 @@ redef class ModelBuilder
                                return res
                        end
 
+                       # Fourth, try if the requested module is itself a group with a src
+                       try_file = dirname + "/" + name + "/src/" + name + ".nit"
+                       if try_file.file_exists then
+                               var res = self.identify_file(try_file.simplify_path)
+                               assert res != null
+                               return res
+                       end
+
                        c = c.parent
                end
 
@@ -301,6 +311,19 @@ redef class ModelBuilder
                                        end
                                end
                        end
+                       try_file = (dirname + "/" + name + "/src/" + name + ".nit").simplify_path
+                       if try_file.file_exists then
+                               if candidate == null then
+                                       candidate = try_file
+                               else if candidate != try_file then
+                                       # try to disambiguate conflicting modules
+                                       var abs_candidate = module_absolute_path(candidate)
+                                       var abs_try_file = module_absolute_path(try_file)
+                                       if abs_candidate != abs_try_file then
+                                               toolcontext.error(location, "Error: conflicting module file for `{name}`: `{candidate}` `{try_file}`")
+                                       end
+                               end
+                       end
                end
                if candidate == null then return null
                return identify_file(candidate)
index e1f43cc..de71f37 100755 (executable)
@@ -3,7 +3,7 @@
 # Regeneration of c_src from the current nitc
 
 rm -r ../c_src
-./nitc nith.nit --stacktrace none --semi-global --compile-dir ../c_src --output ../c_src/nitg --no-cc
+./nitc nith.nit --semi-global --compile-dir ../c_src --output ../c_src/nitg --no-cc
 
 # Remove old compilation flags
 sed -i -e 's/OLDNITCOPT=.*/OLDNITCOPT=/' Makefile
index 769f05b..592cc42 100644 (file)
@@ -207,7 +207,7 @@ bytenum = digit+ 'u8';
 hex_bytenum = ('0x' | '0X') hexdigit+ 'u8';
 bin_bytenum = ('0b' | '0B') bindigit+ 'u8';
 oct_bytenum = ('0o' | '0O') octdigit+ 'u8';
-float = digit* '.' digit+;
+float = digit* '.' digit+ | (digit+ | digit* '.' digit+) ('E'|'e') ('+'|'-'|) digit+;
 string = '"' str_body '"' | '"' '"' '"' long_str_body lsend1 | ''' ''' ''' long_sstr_body ''' ''' ''';
 start_string = '"' str_body '{' | '"' '"' '"' long_str_body lsend2;
 mid_string = '}' str_body '{' | '}' '}' '}' long_str_body lsend2;
index 6ec146f..9131c3e 100644 (file)
@@ -311,6 +311,35 @@ abstract class Token
        # May have disappeared in the AST
        var next_token: nullable Token = null
 
+       # Is `self` a token discarded from the AST?
+       #
+       # Loose tokens are not present in the AST.
+       # It means they were identified by the lexer but were discarded by the parser.
+       # It also means that they are not visited or manipulated by AST-related functions.
+       #
+       # Each loose token is attached to the non-loose token that precedes or follows it.
+       # The rules are the following:
+       #
+       # * tokens that follow a non-loose token on a same line are attached to it.
+       #   See `next_looses`.
+       # * other tokens, thus that precede a non-loose token on the same line or the next one,
+       # are attached to this one. See `prev_looses`.
+       #
+       # Loose tokens are mostly end of lines (`TEol`) and comments (`TComment`).
+       # Whitespace are ignored by the lexer, so they are not even considered as loose tokens.
+       # See `blank_before` to get the whitespace that separate tokens.
+       var is_loose = false
+
+       # Loose tokens that precede `self`.
+       #
+       # These tokens start the line or belong to a line with only loose tokens.
+       var prev_looses = new Array[Token] is lazy
+
+       # Loose tokens that follow `self`
+       #
+       # These tokens are on the same line than `self`.
+       var next_looses = new Array[Token] is lazy
+
        # The verbatim blank text between `prev_token` and `self`
        fun blank_before: String
        do
index c2eff11..a344fc7 100644 (file)
@@ -141,7 +141,8 @@ class Parser
                                var node1 = pop
                                assert node1 isa AModule
                                var node = new Start(node1, node2)
-                               (new ComputeProdLocationVisitor).enter_visit(node)
+                               node2.parent = node
+                               (new ComputeProdLocationVisitor(lexer.file.first_token)).enter_visit(node)
                                return node
                        else if action_type == 3 then # ERROR
                                # skip injected tokens
@@ -176,21 +177,55 @@ end
 # Uses existing token locations to infer location of productions.
 private class ComputeProdLocationVisitor
        super Visitor
+
+       # The current (or starting) cursor on the token sequence used to collect loose tokens
+       var token: nullable Token
+
        # Currently visited productions that need a first token
        var need_first_prods = new Array[Prod]
 
        # Already visited epsilon productions that waits something after them
        var need_after_epsilons = new Array[Prod]
 
-       # Location of the last visited token in the current production
-       var last_location: nullable Location = null
+       # The last visited token in the current production
+       var last_token: nullable Token = null
 
        redef fun visit(n: ANode)
        do
                if n isa Token then
+                       # Skip injected tokens
                        if not isset n._location then return
+
+                       # Collect loose tokens (not in the AST) and attach them to token in the AST
+                       var cursor = token
+                       if n != cursor then
+                               var lt = last_token
+                               # In order, we have the tokens:
+                               # * `lt` the previous visited token in the AST (if any)
+                               # * then `cursor` the loose tokens to attach
+                               # * then `n` the current visited token in the AST
+
+                               # In the following, we advance `cursor` to add them to `lt.next_looses` or to `n.prev_looses`.
+                               if lt != null then
+                                       var ltl = lt.location.line_end
+                                       # floating tokens on the same line of a AST-token follows it
+                                       while cursor != null and cursor != n and ltl == cursor.location.line_start do
+                                               cursor.is_loose = true
+                                               lt.next_looses.add cursor
+                                               cursor = cursor.next_token
+                                       end
+                               end
+                               # other loose tokens precede the next AST-token
+                               while cursor != null and cursor != n do
+                                       cursor.is_loose = true
+                                       n.prev_looses.add cursor
+                                       cursor = cursor.next_token
+                               end
+                       end
+                       token = n.next_token
+
                        var loc = n._location
-                       _last_location = loc
+                       _last_token = n
 
                        # Add a first token to productions that need one
                        if not _need_first_prods.is_empty then
@@ -217,8 +252,7 @@ private class ComputeProdLocationVisitor
                        var startl = n._first_location
                        if startl != null then
                                # Non-epsilon production
-                               var endl = _last_location
-                               assert endl != null
+                               var endl = _last_token.location
 
                                if startl == endl then
                                        n.location = startl
index ce36ccc..4fd03ae 100644 (file)
@@ -140,254 +140,258 @@ static const int lexer_goto_row19[] = {
        61, 61, 75
 };
 static const int lexer_goto_row20[] = {
-       9,
+       11,
        46, 46, 76,
        48, 57, 20,
        66, 66, 77,
-       79, 79, 78,
-       88, 88, 79,
-       98, 98, 80,
-       111, 111, 81,
-       117, 117, 82,
-       120, 120, 83
+       69, 69, 78,
+       79, 79, 79,
+       88, 88, 80,
+       98, 98, 81,
+       101, 101, 82,
+       111, 111, 83,
+       117, 117, 84,
+       120, 120, 85
 };
 static const int lexer_goto_row21[] = {
-       2,
+       4,
        46, 57, -21,
-       117, 117, 82
+       69, 69, 78,
+       101, 101, 82,
+       117, 117, 84
 };
 static const int lexer_goto_row22[] = {
        1,
-       58, 58, 84
+       58, 58, 86
 };
 static const int lexer_goto_row24[] = {
        2,
-       60, 60, 85,
-       61, 61, 86
+       60, 60, 87,
+       61, 61, 88
 };
 static const int lexer_goto_row25[] = {
        1,
-       61, 61, 87
+       61, 61, 89
 };
 static const int lexer_goto_row26[] = {
        2,
-       61, 61, 88,
-       62, 62, 89
+       61, 61, 90,
+       62, 62, 91
 };
 static const int lexer_goto_row28[] = {
        4,
-       48, 57, 90,
-       65, 90, 91,
-       95, 95, 92,
-       97, 122, 93
+       48, 57, 92,
+       65, 90, 93,
+       95, 95, 94,
+       97, 122, 95
 };
 static const int lexer_goto_row31[] = {
        1,
-       61, 61, 94
+       61, 61, 96
 };
 static const int lexer_goto_row32[] = {
        2,
-       95, 95, 95,
-       97, 122, 96
+       95, 95, 97,
+       97, 122, 98
 };
 static const int lexer_goto_row33[] = {
        1,
-       123, 123, 97
+       123, 123, 99
 };
 static const int lexer_goto_row34[] = {
        10,
-       48, 57, 98,
-       65, 90, 99,
-       95, 95, 100,
-       97, 97, 101,
-       98, 98, 102,
-       99, 109, 101,
-       110, 110, 103,
-       111, 114, 101,
-       115, 115, 104,
-       116, 122, 101
+       48, 57, 100,
+       65, 90, 101,
+       95, 95, 102,
+       97, 97, 103,
+       98, 98, 104,
+       99, 109, 103,
+       110, 110, 105,
+       111, 114, 103,
+       115, 115, 106,
+       116, 122, 103
 };
 static const int lexer_goto_row35[] = {
        4,
        48, 95, -35,
-       97, 113, 101,
-       114, 114, 105,
-       115, 122, 101
+       97, 113, 103,
+       114, 114, 107,
+       115, 122, 103
 };
 static const int lexer_goto_row36[] = {
        6,
        48, 95, -35,
-       97, 107, 101,
-       108, 108, 106,
-       109, 110, 101,
-       111, 111, 107,
-       112, 122, 101
+       97, 107, 103,
+       108, 108, 108,
+       109, 110, 103,
+       111, 111, 109,
+       112, 122, 103
 };
 static const int lexer_goto_row37[] = {
        4,
        48, 95, -35,
-       97, 110, 101,
-       111, 111, 108,
-       112, 122, 101
+       97, 110, 103,
+       111, 111, 110,
+       112, 122, 103
 };
 static const int lexer_goto_row38[] = {
        7,
        48, 107, -37,
-       108, 108, 109,
-       109, 109, 101,
-       110, 110, 110,
-       111, 119, 101,
-       120, 120, 111,
-       121, 122, 101
+       108, 108, 111,
+       109, 109, 103,
+       110, 110, 112,
+       111, 119, 103,
+       120, 120, 113,
+       121, 122, 103
 };
 static const int lexer_goto_row39[] = {
        7,
        48, 95, -35,
-       97, 97, 112,
-       98, 110, 101,
-       111, 111, 113,
-       112, 116, 101,
-       117, 117, 114,
-       118, 122, 101
+       97, 97, 114,
+       98, 110, 103,
+       111, 111, 115,
+       112, 116, 103,
+       117, 117, 116,
+       118, 122, 103
 };
 static const int lexer_goto_row40[] = {
        2,
        48, 95, -35,
-       97, 122, 101
+       97, 122, 103
 };
 static const int lexer_goto_row41[] = {
        9,
        48, 95, -35,
-       97, 101, 101,
-       102, 102, 115,
-       103, 108, 101,
-       109, 109, 116,
-       110, 110, 117,
-       111, 114, 101,
-       115, 115, 118,
-       116, 122, 101
+       97, 101, 103,
+       102, 102, 117,
+       103, 108, 103,
+       109, 109, 118,
+       110, 110, 119,
+       111, 114, 103,
+       115, 115, 120,
+       116, 122, 103
 };
 static const int lexer_goto_row42[] = {
        5,
        48, 95, -35,
-       97, 97, 119,
-       98, 110, 101,
-       111, 111, 120,
-       112, 122, 101
+       97, 97, 121,
+       98, 110, 103,
+       111, 111, 122,
+       112, 122, 103
 };
 static const int lexer_goto_row43[] = {
        3,
        48, 110, -38,
-       111, 111, 121,
-       112, 122, 101
+       111, 111, 123,
+       112, 122, 103
 };
 static const int lexer_goto_row44[] = {
        8,
        48, 95, -35,
-       97, 100, 101,
-       101, 101, 122,
-       102, 110, 101,
-       111, 111, 123,
-       112, 116, 101,
-       117, 117, 124,
-       118, 122, 101
+       97, 100, 103,
+       101, 101, 124,
+       102, 110, 103,
+       111, 111, 125,
+       112, 116, 103,
+       117, 117, 126,
+       118, 122, 103
 };
 static const int lexer_goto_row45[] = {
        6,
        48, 95, -35,
-       97, 109, 101,
-       110, 110, 125,
-       111, 113, 101,
-       114, 114, 126,
-       115, 122, 101
+       97, 109, 103,
+       110, 110, 127,
+       111, 113, 103,
+       114, 114, 128,
+       115, 122, 103
 };
 static const int lexer_goto_row46[] = {
        7,
        48, 95, -35,
-       97, 97, 127,
-       98, 113, 101,
-       114, 114, 128,
-       115, 116, 101,
-       117, 117, 129,
-       118, 122, 101
+       97, 97, 129,
+       98, 113, 103,
+       114, 114, 130,
+       115, 116, 103,
+       117, 117, 131,
+       118, 122, 103
 };
 static const int lexer_goto_row47[] = {
        3,
        48, 100, -45,
-       101, 101, 130,
-       102, 122, 101
+       101, 101, 132,
+       102, 122, 103
 };
 static const int lexer_goto_row48[] = {
        5,
        48, 100, -45,
-       101, 101, 131,
-       102, 116, 101,
-       117, 117, 132,
-       118, 122, 101
+       101, 101, 133,
+       102, 116, 103,
+       117, 117, 134,
+       118, 122, 103
 };
 static const int lexer_goto_row49[] = {
        8,
        48, 95, -35,
-       97, 103, 101,
-       104, 104, 133,
-       105, 113, 101,
-       114, 114, 134,
-       115, 120, 101,
-       121, 121, 135,
-       122, 122, 101
+       97, 103, 103,
+       104, 104, 135,
+       105, 113, 103,
+       114, 114, 136,
+       115, 120, 103,
+       121, 121, 137,
+       122, 122, 103
 };
 static const int lexer_goto_row50[] = {
        3,
        48, 109, -46,
-       110, 110, 136,
-       111, 122, 101
+       110, 110, 138,
+       111, 122, 103
 };
 static const int lexer_goto_row51[] = {
        3,
        48, 95, -35,
-       97, 97, 137,
-       98, 122, 101
+       97, 97, 139,
+       98, 122, 103
 };
 static const int lexer_goto_row52[] = {
        4,
        48, 103, -50,
-       104, 104, 138,
-       105, 105, 139,
-       106, 122, 101
+       104, 104, 140,
+       105, 105, 141,
+       106, 122, 103
 };
 static const int lexer_goto_row53[] = {
        1,
-       61, 61, 140
+       61, 61, 142
 };
 static const int lexer_goto_row54[] = {
        11,
-       0, 9, 141,
-       11, 12, 141,
-       14, 33, 141,
-       34, 34, 142,
-       35, 91, 141,
-       92, 92, 143,
-       93, 122, 141,
-       123, 123, 144,
-       124, 124, 141,
-       125, 125, 145,
-       126, 255, 141
+       0, 9, 143,
+       11, 12, 143,
+       14, 33, 143,
+       34, 34, 144,
+       35, 91, 143,
+       92, 92, 145,
+       93, 122, 143,
+       123, 123, 146,
+       124, 124, 143,
+       125, 125, 147,
+       126, 255, 143
 };
 static const int lexer_goto_row58[] = {
        3,
        0, 33, -8,
-       34, 34, 146,
+       34, 34, 148,
        35, 255, -8
 };
 static const int lexer_goto_row59[] = {
        1,
-       34, 34, 147
+       34, 34, 149
 };
 static const int lexer_goto_row60[] = {
        3,
-       0, 9, 148,
-       11, 12, 148,
-       14, 255, 148
+       0, 9, 150,
+       11, 12, 150,
+       14, 255, 150
 };
 static const int lexer_goto_row62[] = {
        1,
@@ -395,33 +399,34 @@ static const int lexer_goto_row62[] = {
 };
 static const int lexer_goto_row64[] = {
        1,
-       10, 10, 149
+       10, 10, 151
 };
 static const int lexer_goto_row67[] = {
        1,
-       39, 39, 150
+       39, 39, 152
 };
 static const int lexer_goto_row68[] = {
        1,
-       39, 39, 151
+       39, 39, 153
 };
 static const int lexer_goto_row69[] = {
        3,
-       0, 9, 152,
-       11, 12, 152,
-       14, 255, 152
+       0, 9, 154,
+       11, 12, 154,
+       14, 255, 154
 };
 static const int lexer_goto_row70[] = {
        1,
-       61, 61, 153
+       61, 61, 155
 };
 static const int lexer_goto_row74[] = {
        1,
-       46, 46, 154
+       46, 46, 156
 };
 static const int lexer_goto_row75[] = {
-       1,
-       48, 57, 74
+       2,
+       48, 57, 74,
+       69, 101, -22
 };
 static const int lexer_goto_row77[] = {
        1,
@@ -429,57 +434,59 @@ static const int lexer_goto_row77[] = {
 };
 static const int lexer_goto_row78[] = {
        3,
-       48, 48, 155,
-       49, 49, 156,
-       95, 95, 157
+       48, 48, 157,
+       49, 49, 158,
+       95, 95, 159
 };
 static const int lexer_goto_row79[] = {
-       2,
-       48, 55, 158,
-       95, 95, 159
+       3,
+       43, 43, 160,
+       45, 45, 161,
+       48, 57, 162
 };
 static const int lexer_goto_row80[] = {
-       4,
-       48, 57, 160,
-       65, 70, 161,
-       95, 95, 162,
-       97, 102, 163
+       2,
+       48, 55, 163,
+       95, 95, 164
 };
 static const int lexer_goto_row81[] = {
-       1,
-       48, 95, -79
+       4,
+       48, 57, 165,
+       65, 70, 166,
+       95, 95, 167,
+       97, 102, 168
 };
 static const int lexer_goto_row82[] = {
        1,
-       48, 95, -80
+       48, 95, -79
 };
 static const int lexer_goto_row83[] = {
        1,
-       56, 56, 164
+       43, 57, -80
 };
 static const int lexer_goto_row84[] = {
        1,
-       48, 102, -81
+       48, 95, -81
 };
-static const int lexer_goto_row86[] = {
+static const int lexer_goto_row85[] = {
        1,
-       61, 61, 165
+       56, 56, 169
 };
-static const int lexer_goto_row87[] = {
+static const int lexer_goto_row86[] = {
        1,
-       62, 62, 166
+       48, 102, -82
 };
-static const int lexer_goto_row90[] = {
+static const int lexer_goto_row88[] = {
        1,
-       61, 61, 167
+       61, 61, 170
 };
-static const int lexer_goto_row91[] = {
+static const int lexer_goto_row89[] = {
        1,
-       48, 122, -29
+       62, 62, 171
 };
 static const int lexer_goto_row92[] = {
        1,
-       48, 122, -29
+       61, 61, 172
 };
 static const int lexer_goto_row93[] = {
        1,
@@ -489,817 +496,809 @@ static const int lexer_goto_row94[] = {
        1,
        48, 122, -29
 };
+static const int lexer_goto_row95[] = {
+       1,
+       48, 122, -29
+};
 static const int lexer_goto_row96[] = {
        1,
-       100, 100, 168
+       48, 122, -29
+};
+static const int lexer_goto_row98[] = {
+       1,
+       100, 100, 173
 };
-static const int lexer_goto_row97[] = {
+static const int lexer_goto_row99[] = {
        4,
-       48, 57, 169,
-       65, 90, 170,
-       95, 95, 171,
-       97, 122, 172
+       48, 57, 174,
+       65, 90, 175,
+       95, 95, 176,
+       97, 122, 177
 };
-static const int lexer_goto_row98[] = {
+static const int lexer_goto_row100[] = {
        5,
-       0, 91, 173,
-       92, 92, 174,
-       93, 95, 173,
-       96, 96, 175,
-       97, 255, 173
+       0, 91, 178,
+       92, 92, 179,
+       93, 95, 178,
+       96, 96, 180,
+       97, 255, 178
 };
-static const int lexer_goto_row99[] = {
+static const int lexer_goto_row101[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row100[] = {
+static const int lexer_goto_row102[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row101[] = {
+static const int lexer_goto_row103[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row102[] = {
+static const int lexer_goto_row104[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row103[] = {
+static const int lexer_goto_row105[] = {
        5,
        48, 110, -38,
-       111, 111, 176,
-       112, 114, 101,
-       115, 115, 177,
-       116, 122, 101
+       111, 111, 181,
+       112, 114, 103,
+       115, 115, 182,
+       116, 122, 103
 };
-static const int lexer_goto_row104[] = {
+static const int lexer_goto_row106[] = {
        4,
        48, 95, -35,
-       97, 99, 101,
-       100, 100, 178,
-       101, 122, 101
+       97, 99, 103,
+       100, 100, 183,
+       101, 122, 103
 };
-static const int lexer_goto_row105[] = {
+static const int lexer_goto_row107[] = {
        4,
        48, 95, -35,
-       97, 114, 101,
-       115, 115, 179,
-       116, 122, 101
+       97, 114, 103,
+       115, 115, 184,
+       116, 122, 103
 };
-static const int lexer_goto_row106[] = {
+static const int lexer_goto_row108[] = {
        3,
        48, 100, -45,
-       101, 101, 180,
-       102, 122, 101
+       101, 101, 185,
+       102, 122, 103
 };
-static const int lexer_goto_row107[] = {
+static const int lexer_goto_row109[] = {
        3,
        48, 95, -35,
-       97, 97, 181,
-       98, 122, 101
+       97, 97, 186,
+       98, 122, 103
 };
-static const int lexer_goto_row108[] = {
+static const int lexer_goto_row110[] = {
        3,
        48, 109, -46,
-       110, 110, 182,
-       111, 122, 101
+       110, 110, 187,
+       111, 122, 103
 };
-static const int lexer_goto_row109[] = {
+static const int lexer_goto_row111[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row110[] = {
+static const int lexer_goto_row112[] = {
        3,
-       48, 114, -106,
-       115, 115, 183,
-       116, 122, 101
+       48, 114, -108,
+       115, 115, 188,
+       116, 122, 103
 };
-static const int lexer_goto_row111[] = {
+static const int lexer_goto_row113[] = {
        5,
-       48, 99, -105,
-       100, 100, 184,
-       101, 116, 101,
-       117, 117, 185,
-       118, 122, 101
+       48, 99, -107,
+       100, 100, 189,
+       101, 116, 103,
+       117, 117, 190,
+       118, 122, 103
 };
-static const int lexer_goto_row112[] = {
+static const int lexer_goto_row114[] = {
        4,
        48, 95, -35,
-       97, 115, 101,
-       116, 116, 186,
-       117, 122, 101
+       97, 115, 103,
+       116, 116, 191,
+       117, 122, 103
 };
-static const int lexer_goto_row113[] = {
+static const int lexer_goto_row115[] = {
        3,
        48, 107, -37,
-       108, 108, 187,
-       109, 122, 101
+       108, 108, 192,
+       109, 122, 103
 };
-static const int lexer_goto_row114[] = {
+static const int lexer_goto_row116[] = {
        3,
        48, 113, -36,
-       114, 114, 188,
-       115, 122, 101
+       114, 114, 193,
+       115, 122, 103
 };
-static const int lexer_goto_row115[] = {
+static const int lexer_goto_row117[] = {
        3,
        48, 109, -46,
-       110, 110, 189,
-       111, 122, 101
+       110, 110, 194,
+       111, 122, 103
 };
-static const int lexer_goto_row116[] = {
+static const int lexer_goto_row118[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row117[] = {
+static const int lexer_goto_row119[] = {
        4,
        48, 95, -35,
-       97, 111, 101,
-       112, 112, 190,
-       113, 122, 101
+       97, 111, 103,
+       112, 112, 195,
+       113, 122, 103
 };
-static const int lexer_goto_row118[] = {
+static const int lexer_goto_row120[] = {
        6,
        48, 95, -35,
-       97, 104, 101,
-       105, 105, 191,
-       106, 115, 101,
-       116, 116, 192,
-       117, 122, 101
+       97, 104, 103,
+       105, 105, 196,
+       106, 115, 103,
+       116, 116, 197,
+       117, 122, 103
 };
-static const int lexer_goto_row119[] = {
+static const int lexer_goto_row121[] = {
        5,
        48, 95, -35,
-       97, 97, 193,
-       98, 114, 101,
-       115, 115, 194,
-       116, 122, 101
+       97, 97, 198,
+       98, 114, 103,
+       115, 115, 199,
+       116, 122, 103
 };
-static const int lexer_goto_row120[] = {
+static const int lexer_goto_row122[] = {
        3,
        48, 97, -35,
-       98, 98, 195,
-       99, 122, 101
+       98, 98, 200,
+       99, 122, 103
 };
-static const int lexer_goto_row121[] = {
+static const int lexer_goto_row123[] = {
        3,
        48, 110, -38,
-       111, 111, 196,
-       112, 122, 101
+       111, 111, 201,
+       112, 122, 103
 };
-static const int lexer_goto_row122[] = {
+static const int lexer_goto_row124[] = {
        3,
-       48, 99, -105,
-       100, 100, 197,
-       101, 122, 101
+       48, 99, -107,
+       100, 100, 202,
+       101, 122, 103
 };
-static const int lexer_goto_row123[] = {
+static const int lexer_goto_row125[] = {
        4,
        48, 95, -35,
-       97, 118, 101,
-       119, 119, 198,
-       120, 122, 101
+       97, 118, 103,
+       119, 119, 203,
+       120, 122, 103
 };
-static const int lexer_goto_row124[] = {
+static const int lexer_goto_row126[] = {
        3,
-       48, 115, -113,
-       116, 116, 199,
-       117, 122, 101
+       48, 115, -115,
+       116, 116, 204,
+       117, 122, 103
 };
-static const int lexer_goto_row125[] = {
+static const int lexer_goto_row127[] = {
        3,
        48, 107, -37,
-       108, 108, 200,
-       109, 122, 101
+       108, 108, 205,
+       109, 122, 103
 };
-static const int lexer_goto_row126[] = {
+static const int lexer_goto_row128[] = {
        4,
        48, 95, -35,
-       97, 98, 101,
-       99, 99, 201,
-       100, 122, 101
+       97, 98, 103,
+       99, 99, 206,
+       100, 122, 103
 };
-static const int lexer_goto_row127[] = {
+static const int lexer_goto_row129[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row128[] = {
-       3,
-       48, 98, -127,
-       99, 99, 202,
-       100, 122, 101
-};
-static const int lexer_goto_row129[] = {
-       5,
-       48, 104, -119,
-       105, 105, 203,
-       106, 110, 101,
-       111, 111, 204,
-       112, 122, 101
-};
 static const int lexer_goto_row130[] = {
        3,
-       48, 97, -35,
-       98, 98, 205,
-       99, 122, 101
+       48, 98, -129,
+       99, 99, 207,
+       100, 122, 103
 };
 static const int lexer_goto_row131[] = {
        5,
-       48, 99, -105,
-       100, 100, 206,
-       101, 115, 101,
-       116, 116, 207,
-       117, 122, 101
+       48, 104, -121,
+       105, 105, 208,
+       106, 110, 103,
+       111, 111, 209,
+       112, 122, 103
 };
 static const int lexer_goto_row132[] = {
        3,
-       48, 107, -37,
-       108, 108, 208,
-       109, 122, 101
+       48, 97, -35,
+       98, 98, 210,
+       99, 122, 103
 };
 static const int lexer_goto_row133[] = {
-       3,
-       48, 111, -118,
-       112, 112, 209,
-       113, 122, 101
+       5,
+       48, 99, -107,
+       100, 100, 211,
+       101, 115, 103,
+       116, 116, 212,
+       117, 122, 103
 };
 static const int lexer_goto_row134[] = {
        3,
-       48, 100, -45,
-       101, 101, 210,
-       102, 122, 101
+       48, 107, -37,
+       108, 108, 213,
+       109, 122, 103
 };
 static const int lexer_goto_row135[] = {
-       4,
-       48, 95, -35,
-       97, 116, 101,
-       117, 117, 211,
-       118, 122, 101
+       3,
+       48, 111, -120,
+       112, 112, 214,
+       113, 122, 103
 };
 static const int lexer_goto_row136[] = {
        3,
-       48, 111, -118,
-       112, 112, 212,
-       113, 122, 101
+       48, 100, -45,
+       101, 101, 215,
+       102, 122, 103
 };
 static const int lexer_goto_row137[] = {
-       3,
-       48, 104, -119,
-       105, 105, 213,
-       106, 122, 101
+       4,
+       48, 95, -35,
+       97, 116, 103,
+       117, 117, 216,
+       118, 122, 103
 };
 static const int lexer_goto_row138[] = {
        3,
-       48, 113, -36,
-       114, 114, 214,
-       115, 122, 101
+       48, 111, -120,
+       112, 112, 217,
+       113, 122, 103
 };
 static const int lexer_goto_row139[] = {
        3,
-       48, 104, -119,
-       105, 105, 215,
-       106, 122, 101
+       48, 104, -121,
+       105, 105, 218,
+       106, 122, 103
 };
 static const int lexer_goto_row140[] = {
        3,
-       48, 115, -113,
-       116, 116, 216,
-       117, 122, 101
+       48, 113, -36,
+       114, 114, 219,
+       115, 122, 103
+};
+static const int lexer_goto_row141[] = {
+       3,
+       48, 104, -121,
+       105, 105, 220,
+       106, 122, 103
 };
 static const int lexer_goto_row142[] = {
+       3,
+       48, 115, -115,
+       116, 116, 221,
+       117, 122, 103
+};
+static const int lexer_goto_row144[] = {
        2,
        0, 123, -55,
-       124, 255, 141
+       124, 255, 143
 };
-static const int lexer_goto_row144[] = {
+static const int lexer_goto_row146[] = {
        3,
-       0, 9, 217,
-       11, 12, 217,
-       14, 255, 217
+       0, 9, 222,
+       11, 12, 222,
+       14, 255, 222
 };
-static const int lexer_goto_row146[] = {
+static const int lexer_goto_row148[] = {
        3,
        0, 124, -55,
-       125, 125, 218,
-       126, 255, 141
+       125, 125, 223,
+       126, 255, 143
 };
-static const int lexer_goto_row148[] = {
+static const int lexer_goto_row150[] = {
        11,
-       0, 9, 219,
-       10, 10, 220,
-       11, 12, 219,
-       13, 13, 221,
-       14, 33, 219,
-       34, 34, 222,
-       35, 91, 219,
-       92, 92, 223,
-       93, 122, 219,
-       123, 123, 224,
-       124, 255, 219
-};
-static const int lexer_goto_row149[] = {
+       0, 9, 224,
+       10, 10, 225,
+       11, 12, 224,
+       13, 13, 226,
+       14, 33, 224,
+       34, 34, 227,
+       35, 91, 224,
+       92, 92, 228,
+       93, 122, 224,
+       123, 123, 229,
+       124, 255, 224
+};
+static const int lexer_goto_row151[] = {
        1,
        0, 255, -59
 };
-static const int lexer_goto_row152[] = {
+static const int lexer_goto_row154[] = {
        9,
-       0, 9, 225,
-       10, 10, 226,
-       11, 12, 225,
-       13, 13, 227,
-       14, 38, 225,
-       39, 39, 228,
-       40, 91, 225,
-       92, 92, 229,
-       93, 255, 225
+       0, 9, 230,
+       10, 10, 231,
+       11, 12, 230,
+       13, 13, 232,
+       14, 38, 230,
+       39, 39, 233,
+       40, 91, 230,
+       92, 92, 234,
+       93, 255, 230
 };
-static const int lexer_goto_row153[] = {
+static const int lexer_goto_row155[] = {
        1,
-       39, 39, 230
+       39, 39, 235
 };
-static const int lexer_goto_row156[] = {
+static const int lexer_goto_row158[] = {
        2,
        48, 95, -79,
-       117, 117, 231
-};
-static const int lexer_goto_row157[] = {
-       1,
-       48, 117, -157
-};
-static const int lexer_goto_row158[] = {
-       1,
-       48, 117, -157
+       117, 117, 236
 };
 static const int lexer_goto_row159[] = {
-       2,
-       48, 95, -80,
-       117, 117, 232
+       1,
+       48, 117, -159
 };
 static const int lexer_goto_row160[] = {
        1,
-       48, 117, -160
+       48, 117, -159
 };
 static const int lexer_goto_row161[] = {
-       2,
-       48, 102, -81,
-       117, 117, 233
+       1,
+       48, 57, 162
 };
 static const int lexer_goto_row162[] = {
        1,
-       48, 117, -162
+       48, 57, 162
 };
 static const int lexer_goto_row163[] = {
        1,
-       48, 117, -162
+       48, 57, 162
 };
 static const int lexer_goto_row164[] = {
-       1,
-       48, 117, -162
+       2,
+       48, 95, -81,
+       117, 117, 237
 };
-static const int lexer_goto_row169[] = {
+static const int lexer_goto_row165[] = {
        1,
-       101, 101, 234
+       48, 117, -165
 };
-static const int lexer_goto_row170[] = {
-       1,
-       48, 122, -98
+static const int lexer_goto_row166[] = {
+       2,
+       48, 102, -82,
+       117, 117, 238
 };
-static const int lexer_goto_row171[] = {
+static const int lexer_goto_row167[] = {
        1,
-       48, 122, -98
+       48, 117, -167
 };
-static const int lexer_goto_row172[] = {
+static const int lexer_goto_row168[] = {
        1,
-       48, 122, -98
+       48, 117, -167
 };
-static const int lexer_goto_row173[] = {
+static const int lexer_goto_row169[] = {
        1,
-       48, 122, -98
+       48, 117, -167
 };
 static const int lexer_goto_row174[] = {
        1,
-       0, 255, -99
+       101, 101, 239
 };
 static const int lexer_goto_row175[] = {
        1,
-       0, 255, 235
+       48, 122, -100
 };
 static const int lexer_goto_row176[] = {
-       3,
-       0, 124, 236,
-       125, 125, 237,
-       126, 255, 236
+       1,
+       48, 122, -100
 };
 static const int lexer_goto_row177[] = {
-       3,
-       48, 113, -36,
-       114, 114, 238,
-       115, 122, 101
+       1,
+       48, 122, -100
 };
 static const int lexer_goto_row178[] = {
-       3,
-       48, 115, -113,
-       116, 116, 239,
-       117, 122, 101
+       1,
+       48, 122, -100
 };
 static const int lexer_goto_row179[] = {
        1,
-       48, 122, -41
+       0, 255, -101
 };
 static const int lexer_goto_row180[] = {
-       3,
-       48, 100, -45,
-       101, 101, 240,
-       102, 122, 101
+       1,
+       0, 255, 240
 };
 static const int lexer_goto_row181[] = {
        3,
-       48, 95, -35,
-       97, 97, 241,
-       98, 122, 101
+       0, 124, 241,
+       125, 125, 242,
+       126, 255, 241
 };
 static const int lexer_goto_row182[] = {
        3,
-       48, 114, -106,
-       115, 115, 242,
-       116, 122, 101
+       48, 113, -36,
+       114, 114, 243,
+       115, 122, 103
 };
 static const int lexer_goto_row183[] = {
        3,
-       48, 115, -113,
-       116, 116, 243,
-       117, 122, 101
+       48, 115, -115,
+       116, 116, 244,
+       117, 122, 103
 };
 static const int lexer_goto_row184[] = {
-       3,
-       48, 100, -45,
-       101, 101, 244,
-       102, 122, 101
-};
-static const int lexer_goto_row185[] = {
        1,
        48, 122, -41
 };
+static const int lexer_goto_row185[] = {
+       3,
+       48, 100, -45,
+       101, 101, 245,
+       102, 122, 103
+};
 static const int lexer_goto_row186[] = {
-       4,
+       3,
        48, 95, -35,
-       97, 108, 101,
-       109, 109, 245,
-       110, 122, 101
+       97, 97, 246,
+       98, 122, 103
 };
 static const int lexer_goto_row187[] = {
        3,
-       48, 100, -45,
-       101, 101, 246,
-       102, 122, 101
+       48, 114, -108,
+       115, 115, 247,
+       116, 122, 103
 };
 static const int lexer_goto_row188[] = {
        3,
-       48, 114, -106,
-       115, 115, 247,
-       116, 122, 101
+       48, 115, -115,
+       116, 116, 248,
+       117, 122, 103
 };
 static const int lexer_goto_row189[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 100, -45,
+       101, 101, 249,
+       102, 122, 103
 };
 static const int lexer_goto_row190[] = {
        1,
        48, 122, -41
 };
 static const int lexer_goto_row191[] = {
-       5,
-       48, 107, -37,
-       108, 108, 248,
-       109, 110, 101,
-       111, 111, 249,
-       112, 122, 101
+       4,
+       48, 95, -35,
+       97, 108, 103,
+       109, 109, 250,
+       110, 122, 103
 };
 static const int lexer_goto_row192[] = {
        3,
-       48, 115, -113,
-       116, 116, 250,
-       117, 122, 101
-};
-static const int lexer_goto_row193[] = {
-       5,
        48, 100, -45,
        101, 101, 251,
-       102, 113, 101,
-       114, 114, 252,
-       115, 122, 101
+       102, 122, 103
+};
+static const int lexer_goto_row193[] = {
+       3,
+       48, 114, -108,
+       115, 115, 252,
+       116, 122, 103
 };
 static const int lexer_goto_row194[] = {
        1,
        48, 122, -41
 };
 static const int lexer_goto_row195[] = {
-       3,
-       48, 100, -45,
-       101, 101, 253,
-       102, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row196[] = {
-       3,
-       48, 100, -45,
-       101, 101, 254,
-       102, 122, 101
+       5,
+       48, 107, -37,
+       108, 108, 253,
+       109, 110, 103,
+       111, 111, 254,
+       112, 122, 103
 };
 static const int lexer_goto_row197[] = {
        3,
-       48, 111, -118,
-       112, 112, 255,
-       113, 122, 101
+       48, 115, -115,
+       116, 116, 255,
+       117, 122, 103
 };
 static const int lexer_goto_row198[] = {
-       3,
-       48, 116, -136,
-       117, 117, 256,
-       118, 122, 101
+       5,
+       48, 100, -45,
+       101, 101, 256,
+       102, 113, 103,
+       114, 114, 257,
+       115, 122, 103
 };
 static const int lexer_goto_row199[] = {
        1,
        48, 122, -41
 };
 static const int lexer_goto_row200[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 100, -45,
+       101, 101, 258,
+       102, 122, 103
 };
 static const int lexer_goto_row201[] = {
        3,
-       48, 107, -37,
-       108, 108, 257,
-       109, 122, 101
+       48, 100, -45,
+       101, 101, 259,
+       102, 122, 103
 };
 static const int lexer_goto_row202[] = {
        3,
-       48, 100, -45,
-       101, 101, 258,
-       102, 122, 101
+       48, 111, -120,
+       112, 112, 260,
+       113, 122, 103
 };
 static const int lexer_goto_row203[] = {
-       4,
-       48, 95, -35,
-       97, 106, 101,
-       107, 107, 259,
-       108, 122, 101
+       3,
+       48, 116, -138,
+       117, 117, 261,
+       118, 122, 103
 };
 static const int lexer_goto_row204[] = {
-       4,
-       48, 95, -35,
-       97, 117, 101,
-       118, 118, 260,
-       119, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row205[] = {
-       3,
-       48, 115, -113,
-       116, 116, 261,
-       117, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row206[] = {
        3,
        48, 107, -37,
        108, 108, 262,
-       109, 122, 101
+       109, 122, 103
 };
 static const int lexer_goto_row207[] = {
        3,
        48, 100, -45,
        101, 101, 263,
-       102, 122, 101
+       102, 122, 103
 };
 static const int lexer_goto_row208[] = {
-       3,
-       48, 116, -136,
-       117, 117, 264,
-       118, 122, 101
+       4,
+       48, 95, -35,
+       97, 106, 103,
+       107, 107, 264,
+       108, 122, 103
 };
 static const int lexer_goto_row209[] = {
-       3,
-       48, 101, -42,
-       102, 102, 265,
-       103, 122, 101
+       4,
+       48, 95, -35,
+       97, 117, 103,
+       118, 118, 265,
+       119, 122, 103
 };
 static const int lexer_goto_row210[] = {
        3,
-       48, 100, -45,
-       101, 101, 266,
-       102, 122, 101
+       48, 115, -115,
+       116, 116, 266,
+       117, 122, 103
 };
 static const int lexer_goto_row211[] = {
        3,
-       48, 109, -46,
-       110, 110, 267,
-       111, 122, 101
+       48, 107, -37,
+       108, 108, 267,
+       109, 122, 103
 };
 static const int lexer_goto_row212[] = {
        3,
        48, 100, -45,
        101, 101, 268,
-       102, 122, 101
+       102, 122, 103
 };
 static const int lexer_goto_row213[] = {
        3,
-       48, 100, -45,
-       101, 101, 269,
-       102, 122, 101
+       48, 116, -138,
+       117, 117, 269,
+       118, 122, 103
 };
 static const int lexer_goto_row214[] = {
        3,
-       48, 117, -205,
-       118, 118, 270,
-       119, 122, 101
+       48, 101, -42,
+       102, 102, 270,
+       103, 122, 103
 };
 static const int lexer_goto_row215[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 100, -45,
+       101, 101, 271,
+       102, 122, 103
 };
 static const int lexer_goto_row216[] = {
        3,
-       48, 107, -37,
-       108, 108, 271,
-       109, 122, 101
+       48, 109, -46,
+       110, 110, 272,
+       111, 122, 103
 };
 static const int lexer_goto_row217[] = {
        3,
-       48, 103, -50,
-       104, 104, 272,
-       105, 122, 101
+       48, 100, -45,
+       101, 101, 273,
+       102, 122, 103
 };
 static const int lexer_goto_row218[] = {
-       1,
-       0, 255, -143
+       3,
+       48, 100, -45,
+       101, 101, 274,
+       102, 122, 103
 };
 static const int lexer_goto_row219[] = {
-       11,
-       0, 9, 273,
-       10, 10, 274,
-       11, 12, 273,
-       13, 13, 275,
-       14, 33, 273,
-       34, 34, 276,
-       35, 91, 273,
-       92, 92, 277,
-       93, 122, 273,
-       123, 123, 278,
-       124, 255, 273
+       3,
+       48, 117, -210,
+       118, 118, 275,
+       119, 122, 103
 };
 static const int lexer_goto_row220[] = {
        1,
-       0, 255, -149
+       48, 122, -41
 };
 static const int lexer_goto_row221[] = {
-       1,
-       0, 255, -149
+       3,
+       48, 107, -37,
+       108, 108, 276,
+       109, 122, 103
 };
 static const int lexer_goto_row222[] = {
-       1,
-       0, 255, -149
+       3,
+       48, 103, -50,
+       104, 104, 277,
+       105, 122, 103
 };
 static const int lexer_goto_row223[] = {
-       5,
-       0, 33, -149,
-       34, 34, 279,
-       35, 122, -149,
-       123, 123, 280,
-       124, 255, 219
+       1,
+       0, 255, -145
 };
 static const int lexer_goto_row224[] = {
-       3,
-       0, 9, 281,
-       11, 12, 281,
-       14, 255, 281
+       11,
+       0, 9, 278,
+       10, 10, 279,
+       11, 12, 278,
+       13, 13, 280,
+       14, 33, 278,
+       34, 34, 281,
+       35, 91, 278,
+       92, 92, 282,
+       93, 122, 278,
+       123, 123, 283,
+       124, 255, 278
 };
 static const int lexer_goto_row225[] = {
-       5,
-       0, 33, -149,
-       34, 34, 282,
-       35, 122, -149,
-       123, 123, 283,
-       124, 255, 219
+       1,
+       0, 255, -151
 };
 static const int lexer_goto_row226[] = {
        1,
-       0, 255, -153
+       0, 255, -151
 };
 static const int lexer_goto_row227[] = {
        1,
-       0, 255, -153
+       0, 255, -151
 };
 static const int lexer_goto_row228[] = {
-       1,
-       0, 255, -153
+       5,
+       0, 33, -151,
+       34, 34, 284,
+       35, 122, -151,
+       123, 123, 285,
+       124, 255, 224
 };
 static const int lexer_goto_row229[] = {
-       9,
-       0, 9, 284,
-       10, 10, 285,
-       11, 12, 284,
-       13, 13, 286,
-       14, 38, 284,
-       39, 39, 287,
-       40, 91, 284,
-       92, 92, 288,
-       93, 255, 284
+       3,
+       0, 9, 286,
+       11, 12, 286,
+       14, 255, 286
 };
 static const int lexer_goto_row230[] = {
-       3,
-       0, 9, 289,
-       11, 12, 289,
-       14, 255, 289
+       5,
+       0, 33, -151,
+       34, 34, 287,
+       35, 122, -151,
+       123, 123, 288,
+       124, 255, 224
+};
+static const int lexer_goto_row231[] = {
+       1,
+       0, 255, -155
 };
 static const int lexer_goto_row232[] = {
        1,
-       56, 56, 290
+       0, 255, -155
 };
 static const int lexer_goto_row233[] = {
        1,
-       56, 56, 291
+       0, 255, -155
 };
 static const int lexer_goto_row234[] = {
-       1,
-       56, 56, 292
+       9,
+       0, 9, 289,
+       10, 10, 290,
+       11, 12, 289,
+       13, 13, 291,
+       14, 38, 289,
+       39, 39, 292,
+       40, 91, 289,
+       92, 92, 293,
+       93, 255, 289
 };
 static const int lexer_goto_row235[] = {
-       1,
-       98, 98, 293
+       3,
+       0, 9, 294,
+       11, 12, 294,
+       14, 255, 294
 };
-static const int lexer_goto_row236[] = {
+static const int lexer_goto_row237[] = {
        1,
-       0, 255, -99
+       56, 56, 295
 };
-static const int lexer_goto_row237[] = {
+static const int lexer_goto_row238[] = {
        1,
-       0, 255, -99
+       56, 56, 296
 };
 static const int lexer_goto_row239[] = {
-       3,
-       48, 115, -113,
-       116, 116, 294,
-       117, 122, 101
+       1,
+       56, 56, 297
 };
 static const int lexer_goto_row240[] = {
-       3,
-       48, 113, -36,
-       114, 114, 295,
-       115, 122, 101
+       1,
+       98, 98, 298
 };
 static const int lexer_goto_row241[] = {
-       3,
-       48, 113, -36,
-       114, 114, 296,
-       115, 122, 101
+       1,
+       0, 255, -101
 };
 static const int lexer_goto_row242[] = {
-       3,
-       48, 106, -204,
-       107, 107, 297,
-       108, 122, 101
-};
-static const int lexer_goto_row243[] = {
-       3,
-       48, 114, -106,
-       115, 115, 298,
-       116, 122, 101
+       1,
+       0, 255, -101
 };
 static const int lexer_goto_row244[] = {
        3,
-       48, 104, -119,
-       105, 105, 299,
-       106, 122, 101
+       48, 115, -115,
+       116, 116, 299,
+       117, 122, 103
 };
 static const int lexer_goto_row245[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 113, -36,
+       114, 114, 300,
+       115, 122, 103
 };
 static const int lexer_goto_row246[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 113, -36,
+       114, 114, 301,
+       115, 122, 103
 };
 static const int lexer_goto_row247[] = {
        3,
-       48, 113, -36,
-       114, 114, 300,
-       115, 122, 101
+       48, 106, -209,
+       107, 107, 302,
+       108, 122, 103
 };
 static const int lexer_goto_row248[] = {
        3,
-       48, 100, -45,
-       101, 101, 301,
-       102, 122, 101
+       48, 114, -108,
+       115, 115, 303,
+       116, 122, 103
 };
 static const int lexer_goto_row249[] = {
        3,
-       48, 104, -119,
-       105, 105, 302,
-       106, 122, 101
+       48, 104, -121,
+       105, 105, 304,
+       106, 122, 103
 };
 static const int lexer_goto_row250[] = {
-       3,
-       48, 113, -36,
-       114, 114, 303,
-       115, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row251[] = {
        1,
@@ -1308,26 +1307,26 @@ static const int lexer_goto_row251[] = {
 static const int lexer_goto_row252[] = {
        3,
        48, 113, -36,
-       114, 114, 304,
-       115, 122, 101
+       114, 114, 305,
+       115, 122, 103
 };
 static const int lexer_goto_row253[] = {
        3,
-       48, 116, -136,
-       117, 117, 305,
-       118, 122, 101
+       48, 100, -45,
+       101, 101, 306,
+       102, 122, 103
 };
 static const int lexer_goto_row254[] = {
        3,
-       48, 115, -113,
-       116, 116, 306,
-       117, 122, 101
+       48, 104, -121,
+       105, 105, 307,
+       106, 122, 103
 };
 static const int lexer_goto_row255[] = {
        3,
-       48, 107, -37,
-       108, 108, 307,
-       109, 122, 101
+       48, 113, -36,
+       114, 114, 308,
+       115, 122, 103
 };
 static const int lexer_goto_row256[] = {
        1,
@@ -1335,466 +1334,468 @@ static const int lexer_goto_row256[] = {
 };
 static const int lexer_goto_row257[] = {
        3,
-       48, 107, -37,
-       108, 108, 308,
-       109, 122, 101
+       48, 113, -36,
+       114, 114, 309,
+       115, 122, 103
 };
 static const int lexer_goto_row258[] = {
        3,
-       48, 95, -35,
-       97, 97, 309,
-       98, 122, 101
+       48, 116, -138,
+       117, 117, 310,
+       118, 122, 103
 };
 static const int lexer_goto_row259[] = {
+       3,
+       48, 115, -115,
+       116, 116, 311,
+       117, 122, 103
+};
+static const int lexer_goto_row260[] = {
+       3,
+       48, 107, -37,
+       108, 108, 312,
+       109, 122, 103
+};
+static const int lexer_goto_row261[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row260[] = {
+static const int lexer_goto_row262[] = {
+       3,
+       48, 107, -37,
+       108, 108, 313,
+       109, 122, 103
+};
+static const int lexer_goto_row263[] = {
        3,
        48, 95, -35,
-       97, 97, 310,
-       98, 122, 101
+       97, 97, 314,
+       98, 122, 103
 };
-static const int lexer_goto_row261[] = {
+static const int lexer_goto_row264[] = {
+       1,
+       48, 122, -41
+};
+static const int lexer_goto_row265[] = {
        3,
        48, 95, -35,
-       97, 97, 311,
-       98, 122, 101
+       97, 97, 315,
+       98, 122, 103
 };
-static const int lexer_goto_row262[] = {
+static const int lexer_goto_row266[] = {
+       3,
+       48, 95, -35,
+       97, 97, 316,
+       98, 122, 103
+};
+static const int lexer_goto_row267[] = {
        3,
        48, 100, -45,
-       101, 101, 312,
-       102, 122, 101
+       101, 101, 317,
+       102, 122, 103
 };
-static const int lexer_goto_row263[] = {
+static const int lexer_goto_row268[] = {
        3,
-       48, 104, -119,
-       105, 105, 313,
-       106, 122, 101
+       48, 104, -121,
+       105, 105, 318,
+       106, 122, 103
 };
-static const int lexer_goto_row264[] = {
+static const int lexer_goto_row269[] = {
        3,
        48, 101, -42,
-       102, 102, 314,
-       103, 122, 101
+       102, 102, 319,
+       103, 122, 103
 };
-static const int lexer_goto_row265[] = {
+static const int lexer_goto_row270[] = {
        3,
        48, 113, -36,
-       114, 114, 315,
-       115, 122, 101
+       114, 114, 320,
+       115, 122, 103
 };
-static const int lexer_goto_row266[] = {
+static const int lexer_goto_row271[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row267[] = {
+static const int lexer_goto_row272[] = {
        3,
        48, 113, -36,
-       114, 114, 316,
-       115, 122, 101
+       114, 114, 321,
+       115, 122, 103
 };
-static const int lexer_goto_row268[] = {
+static const int lexer_goto_row273[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row269[] = {
+static const int lexer_goto_row274[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row270[] = {
+static const int lexer_goto_row275[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row271[] = {
+static const int lexer_goto_row276[] = {
        3,
        48, 100, -45,
-       101, 101, 317,
-       102, 122, 101
+       101, 101, 322,
+       102, 122, 103
 };
-static const int lexer_goto_row272[] = {
+static const int lexer_goto_row277[] = {
        3,
        48, 100, -45,
-       101, 101, 318,
-       102, 122, 101
+       101, 101, 323,
+       102, 122, 103
 };
-static const int lexer_goto_row273[] = {
+static const int lexer_goto_row278[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row274[] = {
+static const int lexer_goto_row279[] = {
        1,
-       0, 255, -220
+       0, 255, -225
 };
-static const int lexer_goto_row275[] = {
+static const int lexer_goto_row280[] = {
        11,
-       0, 9, 319,
-       10, 10, 274,
-       11, 12, 319,
-       13, 13, 275,
-       14, 33, 319,
-       34, 34, 320,
-       35, 91, 319,
-       92, 92, 321,
-       93, 122, 319,
-       123, 123, 322,
-       124, 255, 319
+       0, 9, 324,
+       10, 10, 279,
+       11, 12, 324,
+       13, 13, 280,
+       14, 33, 324,
+       34, 34, 325,
+       35, 91, 324,
+       92, 92, 326,
+       93, 122, 324,
+       123, 123, 327,
+       124, 255, 324
 };
-static const int lexer_goto_row276[] = {
+static const int lexer_goto_row281[] = {
        1,
-       0, 255, -276
+       0, 255, -281
 };
-static const int lexer_goto_row277[] = {
+static const int lexer_goto_row282[] = {
        5,
-       0, 33, -276,
-       34, 34, 323,
-       35, 122, -276,
-       123, 123, 324,
-       124, 255, 319
+       0, 33, -281,
+       34, 34, 328,
+       35, 122, -281,
+       123, 123, 329,
+       124, 255, 324
 };
-static const int lexer_goto_row278[] = {
+static const int lexer_goto_row283[] = {
        3,
-       0, 9, 325,
-       11, 12, 325,
-       14, 255, 325
+       0, 9, 330,
+       11, 12, 330,
+       14, 255, 330
 };
-static const int lexer_goto_row279[] = {
+static const int lexer_goto_row284[] = {
        5,
-       0, 33, -276,
-       34, 34, 326,
-       35, 122, -276,
-       123, 123, 327,
-       124, 255, 319
+       0, 33, -281,
+       34, 34, 331,
+       35, 122, -281,
+       123, 123, 332,
+       124, 255, 324
 };
-static const int lexer_goto_row280[] = {
+static const int lexer_goto_row285[] = {
        3,
-       0, 33, -149,
-       34, 34, 328,
-       35, 255, -224
+       0, 33, -151,
+       34, 34, 333,
+       35, 255, -229
 };
-static const int lexer_goto_row281[] = {
+static const int lexer_goto_row286[] = {
        3,
-       0, 122, -226,
-       123, 123, 329,
-       124, 255, 219
+       0, 122, -231,
+       123, 123, 334,
+       124, 255, 224
 };
-static const int lexer_goto_row282[] = {
+static const int lexer_goto_row287[] = {
        1,
-       0, 255, -149
+       0, 255, -151
 };
-static const int lexer_goto_row283[] = {
+static const int lexer_goto_row288[] = {
        3,
-       0, 33, -149,
-       34, 34, 330,
-       35, 255, -224
+       0, 33, -151,
+       34, 34, 335,
+       35, 255, -229
 };
-static const int lexer_goto_row284[] = {
+static const int lexer_goto_row289[] = {
        3,
-       0, 122, -226,
-       123, 123, 331,
-       124, 255, 219
+       0, 122, -231,
+       123, 123, 336,
+       124, 255, 224
 };
-static const int lexer_goto_row285[] = {
+static const int lexer_goto_row290[] = {
        1,
-       0, 255, -153
+       0, 255, -155
 };
-static const int lexer_goto_row286[] = {
+static const int lexer_goto_row291[] = {
        1,
-       0, 255, -153
+       0, 255, -155
 };
-static const int lexer_goto_row287[] = {
+static const int lexer_goto_row292[] = {
        1,
-       0, 255, -153
+       0, 255, -155
 };
-static const int lexer_goto_row288[] = {
+static const int lexer_goto_row293[] = {
        9,
-       0, 9, 332,
-       10, 10, 333,
-       11, 12, 332,
-       13, 13, 334,
-       14, 38, 332,
-       39, 39, 335,
-       40, 91, 332,
-       92, 92, 336,
-       93, 255, 332
-};
-static const int lexer_goto_row289[] = {
-       3,
        0, 9, 337,
+       10, 10, 338,
        11, 12, 337,
-       14, 255, 337
+       13, 13, 339,
+       14, 38, 337,
+       39, 39, 340,
+       40, 91, 337,
+       92, 92, 341,
+       93, 255, 337
 };
-static const int lexer_goto_row290[] = {
+static const int lexer_goto_row294[] = {
+       3,
+       0, 9, 342,
+       11, 12, 342,
+       14, 255, 342
+};
+static const int lexer_goto_row295[] = {
        1,
-       0, 255, -153
+       0, 255, -155
 };
-static const int lexer_goto_row294[] = {
+static const int lexer_goto_row299[] = {
        1,
-       117, 117, 338
+       117, 117, 343
 };
-static const int lexer_goto_row295[] = {
+static const int lexer_goto_row300[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row296[] = {
+static const int lexer_goto_row301[] = {
        3,
        48, 95, -35,
-       97, 97, 339,
-       98, 122, 101
+       97, 97, 344,
+       98, 122, 103
 };
-static const int lexer_goto_row297[] = {
+static const int lexer_goto_row302[] = {
        3,
-       48, 115, -113,
-       116, 116, 340,
-       117, 122, 101
+       48, 115, -115,
+       116, 116, 345,
+       117, 122, 103
 };
-static const int lexer_goto_row298[] = {
+static const int lexer_goto_row303[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row299[] = {
+static const int lexer_goto_row304[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row300[] = {
+static const int lexer_goto_row305[] = {
        3,
        48, 109, -46,
-       110, 110, 341,
-       111, 122, 101
+       110, 110, 346,
+       111, 122, 103
 };
-static const int lexer_goto_row301[] = {
+static const int lexer_goto_row306[] = {
        3,
        48, 109, -46,
-       110, 110, 342,
-       111, 122, 101
+       110, 110, 347,
+       111, 122, 103
 };
-static const int lexer_goto_row302[] = {
+static const int lexer_goto_row307[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row303[] = {
+static const int lexer_goto_row308[] = {
        3,
        48, 100, -45,
-       101, 101, 343,
-       102, 122, 101
+       101, 101, 348,
+       102, 122, 103
 };
-static const int lexer_goto_row304[] = {
+static const int lexer_goto_row309[] = {
        3,
-       48, 115, -113,
-       116, 116, 344,
-       117, 122, 101
+       48, 115, -115,
+       116, 116, 349,
+       117, 122, 103
 };
-static const int lexer_goto_row305[] = {
+static const int lexer_goto_row310[] = {
        3,
        48, 101, -42,
-       102, 102, 345,
-       103, 122, 101
+       102, 102, 350,
+       103, 122, 103
 };
-static const int lexer_goto_row306[] = {
+static const int lexer_goto_row311[] = {
        3,
-       48, 99, -105,
-       100, 100, 346,
-       101, 122, 101
+       48, 99, -107,
+       100, 100, 351,
+       101, 122, 103
 };
-static const int lexer_goto_row307[] = {
+static const int lexer_goto_row312[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row308[] = {
+static const int lexer_goto_row313[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row309[] = {
+static const int lexer_goto_row314[] = {
        3,
        48, 100, -45,
-       101, 101, 347,
-       102, 122, 101
+       101, 101, 352,
+       102, 122, 103
 };
-static const int lexer_goto_row310[] = {
+static const int lexer_goto_row315[] = {
        3,
        48, 97, -35,
-       98, 98, 348,
-       99, 122, 101
+       98, 98, 353,
+       99, 122, 103
 };
-static const int lexer_goto_row311[] = {
+static const int lexer_goto_row316[] = {
        4,
        48, 95, -35,
-       97, 102, 101,
-       103, 103, 349,
-       104, 122, 101
+       97, 102, 103,
+       103, 103, 354,
+       104, 122, 103
 };
-static const int lexer_goto_row312[] = {
+static const int lexer_goto_row317[] = {
        3,
-       48, 115, -113,
-       116, 116, 350,
-       117, 122, 101
+       48, 115, -115,
+       116, 116, 355,
+       117, 122, 103
 };
-static const int lexer_goto_row313[] = {
+static const int lexer_goto_row318[] = {
        3,
-       48, 98, -127,
-       99, 99, 351,
-       100, 122, 101
+       48, 98, -129,
+       99, 99, 356,
+       100, 122, 103
 };
-static const int lexer_goto_row314[] = {
+static const int lexer_goto_row319[] = {
        3,
-       48, 98, -127,
-       99, 99, 352,
-       100, 122, 101
+       48, 98, -129,
+       99, 99, 357,
+       100, 122, 103
 };
-static const int lexer_goto_row315[] = {
+static const int lexer_goto_row320[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row316[] = {
+static const int lexer_goto_row321[] = {
        3,
        48, 109, -46,
-       110, 110, 353,
-       111, 122, 101
+       110, 110, 358,
+       111, 122, 103
 };
-static const int lexer_goto_row317[] = {
+static const int lexer_goto_row322[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row318[] = {
+static const int lexer_goto_row323[] = {
        3,
        48, 113, -36,
-       114, 114, 354,
-       115, 122, 101
+       114, 114, 359,
+       115, 122, 103
 };
-static const int lexer_goto_row319[] = {
+static const int lexer_goto_row324[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row320[] = {
-       1,
-       0, 255, -276
-};
-static const int lexer_goto_row321[] = {
-       1,
-       0, 255, -278
-};
-static const int lexer_goto_row322[] = {
-       3,
-       0, 9, 355,
-       11, 12, 355,
-       14, 255, 355
-};
-static const int lexer_goto_row323[] = {
-       1,
-       0, 255, -280
-};
-static const int lexer_goto_row324[] = {
-       3,
-       0, 33, -276,
-       34, 34, 356,
-       35, 255, -278
-};
 static const int lexer_goto_row325[] = {
-       3,
-       0, 122, -280,
-       123, 123, 357,
-       124, 255, 319
+       1,
+       0, 255, -281
 };
 static const int lexer_goto_row326[] = {
        1,
-       0, 255, -220
+       0, 255, -283
 };
 static const int lexer_goto_row327[] = {
        3,
-       0, 33, -276,
-       34, 34, 358,
-       35, 255, -278
+       0, 9, 360,
+       11, 12, 360,
+       14, 255, 360
 };
 static const int lexer_goto_row328[] = {
-       3,
-       0, 122, -280,
-       123, 123, 359,
-       124, 255, 319
+       1,
+       0, 255, -285
 };
 static const int lexer_goto_row329[] = {
-       1,
-       34, 34, 360
+       3,
+       0, 33, -281,
+       34, 34, 361,
+       35, 255, -283
 };
 static const int lexer_goto_row330[] = {
-       1,
-       0, 255, -285
+       3,
+       0, 122, -285,
+       123, 123, 362,
+       124, 255, 324
 };
 static const int lexer_goto_row331[] = {
        1,
-       0, 255, -281
+       0, 255, -225
 };
 static const int lexer_goto_row332[] = {
-       1,
-       123, 123, 361
+       3,
+       0, 33, -281,
+       34, 34, 363,
+       35, 255, -283
 };
 static const int lexer_goto_row333[] = {
-       1,
-       0, 255, -153
+       3,
+       0, 122, -285,
+       123, 123, 364,
+       124, 255, 324
 };
 static const int lexer_goto_row334[] = {
        1,
-       0, 255, -153
+       34, 34, 365
 };
 static const int lexer_goto_row335[] = {
        1,
-       0, 255, -153
+       0, 255, -290
+};
+static const int lexer_goto_row336[] = {
+       1,
+       0, 255, -286
 };
 static const int lexer_goto_row337[] = {
-       3,
-       0, 9, 362,
-       11, 12, 362,
-       14, 255, 362
+       1,
+       123, 123, 366
 };
 static const int lexer_goto_row338[] = {
        1,
-       0, 255, -153
+       0, 255, -155
 };
 static const int lexer_goto_row339[] = {
        1,
-       103, 103, 363
+       0, 255, -155
 };
 static const int lexer_goto_row340[] = {
-       3,
-       48, 98, -127,
-       99, 99, 364,
-       100, 122, 101
-};
-static const int lexer_goto_row341[] = {
        1,
-       48, 122, -41
+       0, 255, -155
 };
 static const int lexer_goto_row342[] = {
        3,
-       48, 116, -136,
-       117, 117, 365,
-       118, 122, 101
+       0, 9, 367,
+       11, 12, 367,
+       14, 255, 367
 };
 static const int lexer_goto_row343[] = {
        1,
-       48, 122, -41
+       0, 255, -155
 };
 static const int lexer_goto_row344[] = {
-       3,
-       48, 114, -106,
-       115, 115, 366,
-       116, 122, 101
+       1,
+       103, 103, 368
 };
 static const int lexer_goto_row345[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 98, -129,
+       99, 99, 369,
+       100, 122, 103
 };
 static const int lexer_goto_row346[] = {
-       3,
-       48, 95, -35,
-       97, 97, 367,
-       98, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row347[] = {
        3,
-       48, 100, -45,
-       101, 101, 368,
-       102, 122, 101
+       48, 116, -138,
+       117, 117, 370,
+       118, 122, 103
 };
 static const int lexer_goto_row348[] = {
        1,
@@ -1802,113 +1803,115 @@ static const int lexer_goto_row348[] = {
 };
 static const int lexer_goto_row349[] = {
        3,
-       48, 107, -37,
-       108, 108, 369,
-       109, 122, 101
+       48, 114, -108,
+       115, 115, 371,
+       116, 122, 103
 };
 static const int lexer_goto_row350[] = {
-       3,
-       48, 100, -45,
-       101, 101, 370,
-       102, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row351[] = {
        3,
-       48, 100, -45,
-       101, 101, 371,
-       102, 122, 101
+       48, 95, -35,
+       97, 97, 372,
+       98, 122, 103
 };
 static const int lexer_goto_row352[] = {
        3,
-       48, 115, -113,
-       116, 116, 372,
-       117, 122, 101
+       48, 100, -45,
+       101, 101, 373,
+       102, 122, 103
 };
 static const int lexer_goto_row353[] = {
        1,
        48, 122, -41
 };
 static const int lexer_goto_row354[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 107, -37,
+       108, 108, 374,
+       109, 122, 103
 };
 static const int lexer_goto_row355[] = {
        3,
-       48, 114, -106,
-       115, 115, 373,
-       116, 122, 101
+       48, 100, -45,
+       101, 101, 375,
+       102, 122, 103
 };
 static const int lexer_goto_row356[] = {
-       1,
-       0, 255, -276
+       3,
+       48, 100, -45,
+       101, 101, 376,
+       102, 122, 103
 };
 static const int lexer_goto_row357[] = {
-       1,
-       34, 34, 374
+       3,
+       48, 115, -115,
+       116, 116, 377,
+       117, 122, 103
 };
 static const int lexer_goto_row358[] = {
        1,
-       0, 255, -329
+       48, 122, -41
 };
 static const int lexer_goto_row359[] = {
        1,
-       0, 255, -325
+       48, 122, -41
 };
 static const int lexer_goto_row360[] = {
-       1,
-       123, 123, 375
+       3,
+       48, 114, -108,
+       115, 115, 378,
+       116, 122, 103
 };
 static const int lexer_goto_row361[] = {
        1,
-       34, 34, 360
+       0, 255, -281
 };
 static const int lexer_goto_row362[] = {
        1,
-       123, 123, 361
+       34, 34, 379
 };
 static const int lexer_goto_row363[] = {
        1,
-       0, 255, -153
+       0, 255, -334
 };
 static const int lexer_goto_row364[] = {
        1,
-       95, 95, 376
+       0, 255, -330
 };
 static const int lexer_goto_row365[] = {
-       3,
-       48, 115, -113,
-       116, 116, 377,
-       117, 122, 101
+       1,
+       123, 123, 380
 };
 static const int lexer_goto_row366[] = {
-       3,
-       48, 100, -45,
-       101, 101, 378,
-       102, 122, 101
+       1,
+       34, 34, 365
 };
 static const int lexer_goto_row367[] = {
        1,
-       48, 122, -41
+       123, 123, 366
 };
 static const int lexer_goto_row368[] = {
-       3,
-       48, 98, -127,
-       99, 99, 379,
-       100, 122, 101
+       1,
+       0, 255, -155
 };
 static const int lexer_goto_row369[] = {
        1,
-       48, 122, -41
+       95, 95, 381
 };
 static const int lexer_goto_row370[] = {
        3,
-       48, 100, -45,
-       101, 101, 380,
-       102, 122, 101
+       48, 115, -115,
+       116, 116, 382,
+       117, 122, 103
 };
 static const int lexer_goto_row371[] = {
-       1,
-       48, 122, -41
+       3,
+       48, 100, -45,
+       101, 101, 383,
+       102, 122, 103
 };
 static const int lexer_goto_row372[] = {
        1,
@@ -1916,67 +1919,91 @@ static const int lexer_goto_row372[] = {
 };
 static const int lexer_goto_row373[] = {
        3,
-       48, 100, -45,
-       101, 101, 381,
-       102, 122, 101
+       48, 98, -129,
+       99, 99, 384,
+       100, 122, 103
 };
 static const int lexer_goto_row374[] = {
-       3,
-       48, 95, -35,
-       97, 97, 382,
-       98, 122, 101
+       1,
+       48, 122, -41
 };
 static const int lexer_goto_row375[] = {
-       1,
-       34, 34, 374
+       3,
+       48, 100, -45,
+       101, 101, 385,
+       102, 122, 103
 };
 static const int lexer_goto_row376[] = {
        1,
-       123, 123, 375
+       48, 122, -41
 };
 static const int lexer_goto_row377[] = {
        1,
-       95, 95, 383
+       48, 122, -41
 };
 static const int lexer_goto_row378[] = {
+       3,
+       48, 100, -45,
+       101, 101, 386,
+       102, 122, 103
+};
+static const int lexer_goto_row379[] = {
+       3,
+       48, 95, -35,
+       97, 97, 387,
+       98, 122, 103
+};
+static const int lexer_goto_row380[] = {
+       1,
+       34, 34, 379
+};
+static const int lexer_goto_row381[] = {
+       1,
+       123, 123, 380
+};
+static const int lexer_goto_row382[] = {
+       1,
+       95, 95, 388
+};
+static const int lexer_goto_row383[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row379[] = {
+static const int lexer_goto_row384[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row380[] = {
+static const int lexer_goto_row385[] = {
        3,
        48, 100, -45,
-       101, 101, 384,
-       102, 122, 101
+       101, 101, 389,
+       102, 122, 103
 };
-static const int lexer_goto_row381[] = {
+static const int lexer_goto_row386[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row382[] = {
+static const int lexer_goto_row387[] = {
        3,
-       48, 99, -105,
-       100, 100, 385,
-       101, 122, 101
+       48, 99, -107,
+       100, 100, 390,
+       101, 122, 103
 };
-static const int lexer_goto_row383[] = {
+static const int lexer_goto_row388[] = {
        3,
        48, 107, -37,
-       108, 108, 386,
-       109, 122, 101
+       108, 108, 391,
+       109, 122, 103
 };
-static const int lexer_goto_row385[] = {
+static const int lexer_goto_row390[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row386[] = {
+static const int lexer_goto_row391[] = {
        1,
        48, 122, -41
 };
-static const int lexer_goto_row387[] = {
+static const int lexer_goto_row392[] = {
        1,
        48, 122, -41
 };
@@ -2066,19 +2093,19 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row82,
        lexer_goto_row83,
        lexer_goto_row84,
-       lexer_goto_row_null,
+       lexer_goto_row85,
        lexer_goto_row86,
-       lexer_goto_row87,
+       lexer_goto_row_null,
+       lexer_goto_row88,
+       lexer_goto_row89,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row90,
-       lexer_goto_row91,
        lexer_goto_row92,
        lexer_goto_row93,
        lexer_goto_row94,
-       lexer_goto_row_null,
+       lexer_goto_row95,
        lexer_goto_row96,
-       lexer_goto_row97,
+       lexer_goto_row_null,
        lexer_goto_row98,
        lexer_goto_row99,
        lexer_goto_row100,
@@ -2122,7 +2149,7 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row138,
        lexer_goto_row139,
        lexer_goto_row140,
-       lexer_goto_row_null,
+       lexer_goto_row141,
        lexer_goto_row142,
        lexer_goto_row_null,
        lexer_goto_row144,
@@ -2130,15 +2157,15 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row146,
        lexer_goto_row_null,
        lexer_goto_row148,
-       lexer_goto_row149,
+       lexer_goto_row_null,
+       lexer_goto_row150,
+       lexer_goto_row151,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row152,
-       lexer_goto_row153,
+       lexer_goto_row154,
+       lexer_goto_row155,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row156,
-       lexer_goto_row157,
        lexer_goto_row158,
        lexer_goto_row159,
        lexer_goto_row160,
@@ -2146,15 +2173,15 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row162,
        lexer_goto_row163,
        lexer_goto_row164,
+       lexer_goto_row165,
+       lexer_goto_row166,
+       lexer_goto_row167,
+       lexer_goto_row168,
+       lexer_goto_row169,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row169,
-       lexer_goto_row170,
-       lexer_goto_row171,
-       lexer_goto_row172,
-       lexer_goto_row173,
        lexer_goto_row174,
        lexer_goto_row175,
        lexer_goto_row176,
@@ -2212,19 +2239,19 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row228,
        lexer_goto_row229,
        lexer_goto_row230,
-       lexer_goto_row_null,
+       lexer_goto_row231,
        lexer_goto_row232,
        lexer_goto_row233,
        lexer_goto_row234,
        lexer_goto_row235,
-       lexer_goto_row236,
-       lexer_goto_row237,
        lexer_goto_row_null,
+       lexer_goto_row237,
+       lexer_goto_row238,
        lexer_goto_row239,
        lexer_goto_row240,
        lexer_goto_row241,
        lexer_goto_row242,
-       lexer_goto_row243,
+       lexer_goto_row_null,
        lexer_goto_row244,
        lexer_goto_row245,
        lexer_goto_row246,
@@ -2272,14 +2299,14 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row288,
        lexer_goto_row289,
        lexer_goto_row290,
+       lexer_goto_row291,
+       lexer_goto_row292,
+       lexer_goto_row293,
+       lexer_goto_row294,
+       lexer_goto_row295,
        lexer_goto_row_null,
        lexer_goto_row_null,
        lexer_goto_row_null,
-       lexer_goto_row294,
-       lexer_goto_row295,
-       lexer_goto_row296,
-       lexer_goto_row297,
-       lexer_goto_row298,
        lexer_goto_row299,
        lexer_goto_row300,
        lexer_goto_row301,
@@ -2317,12 +2344,12 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row333,
        lexer_goto_row334,
        lexer_goto_row335,
-       lexer_goto_row_null,
+       lexer_goto_row336,
        lexer_goto_row337,
        lexer_goto_row338,
        lexer_goto_row339,
        lexer_goto_row340,
-       lexer_goto_row341,
+       lexer_goto_row_null,
        lexer_goto_row342,
        lexer_goto_row343,
        lexer_goto_row344,
@@ -2365,14 +2392,19 @@ const int* const lexer_goto_table[] = {
        lexer_goto_row381,
        lexer_goto_row382,
        lexer_goto_row383,
-       lexer_goto_row_null,
+       lexer_goto_row384,
        lexer_goto_row385,
        lexer_goto_row386,
-       lexer_goto_row387
+       lexer_goto_row387,
+       lexer_goto_row388,
+       lexer_goto_row_null,
+       lexer_goto_row390,
+       lexer_goto_row391,
+       lexer_goto_row392
 };
 
 const int lexer_accept_table[] = {
-       -1,0,1,1,0,94,114,2,80,83,-1,53,54,77,75,57,76,74,79,100,100,58,96,87,60,90,95,97,55,56,82,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,81,114,84,1,86,114,109,-1,110,2,2,2,65,69,115,115,115,78,63,61,62,73,108,64,-1,-1,-1,-1,-1,-1,-1,-1,59,89,88,85,91,92,97,97,97,97,68,-1,99,-1,98,98,98,98,98,98,47,98,98,98,16,98,98,98,98,98,98,23,98,29,15,98,98,98,98,98,98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,98,67,114,112,-1,111,114,109,114,114,2,113,114,115,66,72,102,102,102,103,103,101,101,101,101,104,70,93,71,-1,99,99,99,99,-1,-1,-1,98,98,30,98,98,98,98,98,10,98,98,98,28,11,98,98,98,40,98,98,98,98,39,32,98,98,98,98,98,98,98,98,98,98,98,98,98,98,17,98,98,114,114,114,114,114,-1,-1,-1,114,114,114,-1,-1,113,-1,-1,-1,-1,-1,-1,116,98,98,98,98,98,98,25,9,98,98,98,98,13,98,98,98,98,27,98,46,41,98,98,98,98,98,98,43,98,24,44,12,98,98,51,114,-1,-1,112,-1,111,-1,-1,114,-1,-1,114,114,114,-1,-1,114,106,107,105,-1,37,98,98,36,6,98,98,45,98,98,98,98,49,50,98,98,98,98,98,98,14,98,42,98,26,-1,-1,-1,-1,-1,-1,114,-1,-1,109,-1,-1,110,114,114,114,109,-1,114,-1,98,38,98,18,98,5,98,98,4,98,98,98,98,19,34,98,-1,112,-1,-1,111,109,110,114,-1,98,98,33,98,22,98,3,21,98,98,112,111,-1,7,35,98,48,98,98,52,8,20,9
+       -1,0,1,1,0,94,114,2,80,83,-1,53,54,77,75,57,76,74,79,100,100,58,96,87,60,90,95,97,55,56,82,-1,-1,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,81,114,84,1,86,114,109,-1,110,2,2,2,65,69,115,115,115,78,63,61,62,73,108,64,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,59,89,88,85,91,92,97,97,97,97,68,-1,99,-1,98,98,98,98,98,98,47,98,98,98,16,98,98,98,98,98,98,23,98,29,15,98,98,98,98,98,98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,98,67,114,112,-1,111,114,109,114,114,2,113,114,115,66,72,102,102,102,-1,-1,108,103,103,101,101,101,101,104,70,93,71,-1,99,99,99,99,-1,-1,-1,98,98,30,98,98,98,98,98,10,98,98,98,28,11,98,98,98,40,98,98,98,98,39,32,98,98,98,98,98,98,98,98,98,98,98,98,98,98,17,98,98,114,114,114,114,114,-1,-1,-1,114,114,114,-1,-1,113,-1,-1,-1,-1,-1,-1,116,98,98,98,98,98,98,25,9,98,98,98,98,13,98,98,98,98,27,98,46,41,98,98,98,98,98,98,43,98,24,44,12,98,98,51,114,-1,-1,112,-1,111,-1,-1,114,-1,-1,114,114,114,-1,-1,114,106,107,105,-1,37,98,98,36,6,98,98,45,98,98,98,98,49,50,98,98,98,98,98,98,14,98,42,98,26,-1,-1,-1,-1,-1,-1,114,-1,-1,109,-1,-1,110,114,114,114,109,-1,114,-1,98,38,98,18,98,5,98,98,4,98,98,98,98,19,34,98,-1,112,-1,-1,111,109,110,114,-1,98,98,33,98,22,98,3,21,98,98,112,111,-1,7,35,98,48,98,98,52,8,20,9
 };
 
 static int parser_action_row1[] = {
index 4fcab0a..debc62f 100644 (file)
@@ -1 +1 @@
-alt/base_import_alt3.nit:1,8--21: Error: cannot find module `fail` from `project1`. Tried: ., ../lib/standard, ../lib/standard/collection, alt, ../lib.
+alt/base_import_alt3.nit:1,8--21: Error: cannot find module `fail` from `project1`. Tried: ., ../lib/standard, ../lib/standard/collection, alt, ../lib, ../contrib.
index 20bc8ca..29ce68b 100644 (file)
@@ -1 +1 @@
-error_mod_unk.nit:17,8--11: Error: cannot find module `dfgd` from `error_mod_unk`. Tried: ., ../lib/standard, ../lib/standard/collection, alt, ../lib.
+error_mod_unk.nit:17,8--11: Error: cannot find module `dfgd` from `error_mod_unk`. Tried: ., ../lib/standard, ../lib/standard/collection, alt, ../lib, ../contrib.
index cd932ee..feaed3f 100644 (file)
@@ -5,3 +5,9 @@
 12.346
 12.3
 12
+0.5
+0.000
+0.000003125
+3410.0
+400.0
+10.0
index 112bdb0..64d374b 100644 (file)
@@ -1,3 +1,2 @@
-../examples/nitcorn/src/xymus_net.nit:24,8--14: Error: cannot find module `tnitter` from `nitcorn`. Tried: alt, ../lib, ../examples/nitcorn.
-../examples/nitcorn/src/xymus_net.nit:25,8--26: Error: cannot find module `benitlux_controller` from `nitcorn`. Tried: alt, ../lib, ../examples/nitcorn.
-../examples/nitcorn/src/xymus_net.nit:26,8--29: Error: cannot find module `opportunity_controller` from `nitcorn`. Tried: alt, ../lib, ../examples/nitcorn.
+../examples/nitcorn/src/xymus_net.nit:25,8--26: Error: cannot find module `benitlux_controller` from `nitcorn`. Tried: alt, ../lib, ../contrib, ../examples/nitcorn.
+../examples/nitcorn/src/xymus_net.nit:26,8--29: Error: cannot find module `opportunity_controller` from `nitcorn`. Tried: alt, ../lib, ../contrib, ../examples/nitcorn.
index 387c312..a997f01 100644 (file)
@@ -23,3 +23,14 @@ print(f.to_s)
 print(f.to_precision(3))
 print(f.to_precision(1))
 print(f.to_precision(0))
+f = 5.0e-1
+print(f)
+f = 3.125e-6
+print(f.to_precision(3))
+print(f.to_precision(9))
+f = 3.41e3
+print f
+f = 4e2
+print f
+f = .1e2
+print f