diff Bison-Flex/Compiler-StackBase/UTF8/script-parser.cc @ 6:86c0a38332fe

update
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 May 2011 18:26:00 +0900
parents caede627f691
children
line wrap: on
line diff
--- a/Bison-Flex/Compiler-StackBase/UTF8/script-parser.cc	Tue May 17 12:45:07 2011 +0900
+++ b/Bison-Flex/Compiler-StackBase/UTF8/script-parser.cc	Tue May 17 18:26:00 2011 +0900
@@ -200,77 +200,77 @@
     switch (yytype)
       {
         case 4: /* "\"identifier\"" */
-#line 93 "script-parser.yy"
+#line 95 "script-parser.yy"
 	{ delete (yyvaluep->sval); };
 #line 206 "script-parser.cc"
 	break;
       case 5: /* "\"sval\"" */
-#line 94 "script-parser.yy"
+#line 96 "script-parser.yy"
 	{ delete (yyvaluep->sval); };
 #line 211 "script-parser.cc"
 	break;
-      case 56: /* "value_list" */
-#line 96 "script-parser.yy"
+      case 58: /* "value_list" */
+#line 98 "script-parser.yy"
 	{ delete (yyvaluep->value_list); };
 #line 216 "script-parser.cc"
 	break;
-      case 57: /* "arglist" */
-#line 97 "script-parser.yy"
+      case 59: /* "arglist" */
+#line 99 "script-parser.yy"
 	{ delete (yyvaluep->arglist); };
 #line 221 "script-parser.cc"
 	break;
-      case 58: /* "arg" */
-#line 98 "script-parser.yy"
+      case 60: /* "arg" */
+#line 100 "script-parser.yy"
 	{ delete (yyvaluep->argdef); };
 #line 226 "script-parser.cc"
 	break;
-      case 61: /* "block" */
-#line 102 "script-parser.yy"
+      case 63: /* "block" */
+#line 104 "script-parser.yy"
 	{ delete (yyvaluep->block); };
 #line 231 "script-parser.cc"
 	break;
-      case 62: /* "decl_list" */
-#line 99 "script-parser.yy"
+      case 64: /* "decl_list" */
+#line 101 "script-parser.yy"
 	{ delete (yyvaluep->decls); };
 #line 236 "script-parser.cc"
 	break;
-      case 63: /* "state_list" */
-#line 100 "script-parser.yy"
+      case 65: /* "state_list" */
+#line 102 "script-parser.yy"
 	{ delete (yyvaluep->states); };
 #line 241 "script-parser.cc"
 	break;
-      case 64: /* "decls" */
-#line 99 "script-parser.yy"
+      case 66: /* "decls" */
+#line 101 "script-parser.yy"
 	{ delete (yyvaluep->decls); };
 #line 246 "script-parser.cc"
 	break;
-      case 65: /* "states" */
-#line 100 "script-parser.yy"
+      case 67: /* "states" */
+#line 102 "script-parser.yy"
 	{ delete (yyvaluep->states); };
 #line 251 "script-parser.cc"
 	break;
-      case 66: /* "statement" */
-#line 104 "script-parser.yy"
+      case 68: /* "statement" */
+#line 106 "script-parser.yy"
 	{ delete (yyvaluep->statement); };
 #line 256 "script-parser.cc"
 	break;
-      case 67: /* "assign" */
-#line 103 "script-parser.yy"
+      case 69: /* "assign" */
+#line 105 "script-parser.yy"
 	{ delete (yyvaluep->assign); };
 #line 261 "script-parser.cc"
 	break;
-      case 68: /* "expr" */
-#line 106 "script-parser.yy"
+      case 70: /* "expr" */
+#line 108 "script-parser.yy"
 	{ delete (yyvaluep->expr); };
 #line 266 "script-parser.cc"
 	break;
-      case 69: /* "value" */
-#line 105 "script-parser.yy"
+      case 71: /* "value" */
+#line 107 "script-parser.yy"
 	{ delete (yyvaluep->value); };
 #line 271 "script-parser.cc"
 	break;
-      case 70: /* "args" */
-#line 101 "script-parser.yy"
+      case 72: /* "args" */
+#line 103 "script-parser.yy"
 	{ delete (yyvaluep->args); };
 #line 276 "script-parser.cc"
 	break;
@@ -470,423 +470,438 @@
     switch (yyn)
       {
 	  case 7:
-#line 128 "script-parser.yy"
+#line 130 "script-parser.yy"
     { driver.DefineValue((yylocation_stack_[(3) - (2)]), (yysemantic_stack_[(3) - (1)].type), (yysemantic_stack_[(3) - (2)].value_list)); ;}
     break;
 
   case 8:
-#line 129 "script-parser.yy"
+#line 131 "script-parser.yy"
     { driver.DefineFunction((yylocation_stack_[(5) - (2)]), (yysemantic_stack_[(5) - (1)].type), (yysemantic_stack_[(5) - (2)].sval), NULL); ;}
     break;
 
   case 9:
-#line 130 "script-parser.yy"
+#line 132 "script-parser.yy"
     { driver.DefineFunction((yylocation_stack_[(6) - (2)]), (yysemantic_stack_[(6) - (1)].type), (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].arglist)); ;}
     break;
 
   case 10:
-#line 131 "script-parser.yy"
+#line 133 "script-parser.yy"
     { driver.DefineFunction((yylocation_stack_[(5) - (2)]), TYPE_VOID, (yysemantic_stack_[(5) - (2)].sval), NULL); ;}
     break;
 
   case 11:
-#line 132 "script-parser.yy"
+#line 134 "script-parser.yy"
     { driver.DefineFunction((yylocation_stack_[(6) - (2)]), TYPE_VOID, (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].arglist)); ;}
     break;
 
   case 12:
-#line 133 "script-parser.yy"
+#line 135 "script-parser.yy"
     { driver.DefineFunction((yylocation_stack_[(5) - (2)]), TYPE_CODE, (yysemantic_stack_[(5) - (2)].sval), NULL); ;}
     break;
 
   case 13:
-#line 134 "script-parser.yy"
+#line 136 "script-parser.yy"
     { driver.DefineFunction((yylocation_stack_[(6) - (2)]), TYPE_CODE, (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].arglist)); ;}
     break;
 
   case 14:
-#line 137 "script-parser.yy"
+#line 139 "script-parser.yy"
     { (yyval.value_list) = new CValueList((yysemantic_stack_[(1) - (1)].value)); ;}
     break;
 
   case 15:
-#line 138 "script-parser.yy"
+#line 140 "script-parser.yy"
     { (yyval.value_list) = (yysemantic_stack_[(3) - (1)].value_list)->Add((yysemantic_stack_[(3) - (3)].value)); ;}
     break;
 
   case 16:
-#line 141 "script-parser.yy"
+#line 143 "script-parser.yy"
     { (yyval.arglist) = new CArgList((yysemantic_stack_[(1) - (1)].argdef)); ;}
     break;
 
   case 17:
-#line 142 "script-parser.yy"
+#line 144 "script-parser.yy"
     { (yyval.arglist) = (yysemantic_stack_[(3) - (1)].arglist)->Add((yysemantic_stack_[(3) - (3)].argdef)); ;}
     break;
 
   case 18:
-#line 145 "script-parser.yy"
+#line 147 "script-parser.yy"
     { (yyval.argdef) = new CArgDef((yylocation_stack_[(1) - (1)]), (yysemantic_stack_[(1) - (1)].type), NULL); ;}
     break;
 
   case 19:
-#line 146 "script-parser.yy"
+#line 148 "script-parser.yy"
     { (yyval.argdef) = new CArgDef((yylocation_stack_[(2) - (1)]), TypeToRef((yysemantic_stack_[(2) - (1)].type)), NULL); ;}
     break;
 
   case 20:
-#line 147 "script-parser.yy"
+#line 149 "script-parser.yy"
     { (yyval.argdef) = new CArgDef((yylocation_stack_[(2) - (1)]), (yysemantic_stack_[(2) - (1)].type), (yysemantic_stack_[(2) - (2)].sval)); ;}
     break;
 
   case 21:
-#line 148 "script-parser.yy"
+#line 150 "script-parser.yy"
     { (yyval.argdef) = new CArgDef((yylocation_stack_[(3) - (1)]), TypeToRef((yysemantic_stack_[(3) - (1)].type)), (yysemantic_stack_[(3) - (3)].sval)); ;}
     break;
 
   case 22:
-#line 149 "script-parser.yy"
+#line 151 "script-parser.yy"
     { (yyval.argdef) = new CArgDef((yylocation_stack_[(4) - (1)]), TypeToRef((yysemantic_stack_[(4) - (1)].type)), (yysemantic_stack_[(4) - (2)].sval)); ;}
     break;
 
   case 23:
-#line 150 "script-parser.yy"
+#line 152 "script-parser.yy"
     { (yyval.argdef) = new CArgDef((yylocation_stack_[(5) - (1)]), TypeToRef((yysemantic_stack_[(5) - (1)].type)), (yysemantic_stack_[(5) - (3)].sval)); ;}
     break;
 
   case 24:
-#line 153 "script-parser.yy"
+#line 155 "script-parser.yy"
     { driver.AddFunction((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (1)].type), (yysemantic_stack_[(5) - (2)].sval), NULL, (yysemantic_stack_[(5) - (5)].block)); ;}
     break;
 
   case 25:
-#line 154 "script-parser.yy"
+#line 156 "script-parser.yy"
     { driver.AddFunction((yylocation_stack_[(6) - (1)]), (yysemantic_stack_[(6) - (1)].type), (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].arglist), (yysemantic_stack_[(6) - (6)].block)); ;}
     break;
 
   case 26:
-#line 155 "script-parser.yy"
+#line 157 "script-parser.yy"
     { driver.AddFunction((yylocation_stack_[(5) - (1)]), TYPE_VOID, (yysemantic_stack_[(5) - (2)].sval), NULL, (yysemantic_stack_[(5) - (5)].block)); ;}
     break;
 
   case 27:
-#line 156 "script-parser.yy"
+#line 158 "script-parser.yy"
     { driver.AddFunction((yylocation_stack_[(6) - (1)]), TYPE_VOID, (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].arglist), (yysemantic_stack_[(6) - (6)].block)); ;}
     break;
 
   case 28:
-#line 157 "script-parser.yy"
+#line 159 "script-parser.yy"
     { driver.AddGotoFunction((yylocation_stack_[(5) - (1)]), TYPE_CODE, (yysemantic_stack_[(5) - (2)].sval), NULL, (yysemantic_stack_[(5) - (5)].block)); ;}
     break;
 
   case 29:
-#line 158 "script-parser.yy"
+#line 160 "script-parser.yy"
     { driver.AddGotoFunction((yylocation_stack_[(6) - (1)]), TYPE_CODE, (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].arglist), (yysemantic_stack_[(6) - (6)].block)); ;}
     break;
 
   case 30:
-#line 161 "script-parser.yy"
+#line 163 "script-parser.yy"
     { (yyval.type) = TYPE_INTEGER; ;}
     break;
 
   case 31:
-#line 162 "script-parser.yy"
+#line 164 "script-parser.yy"
     { (yyval.type) = TYPE_STRING; ;}
     break;
 
   case 32:
-#line 165 "script-parser.yy"
+#line 167 "script-parser.yy"
     { (yyval.block) = new CStateBlock((yysemantic_stack_[(4) - (2)].decls), (yysemantic_stack_[(4) - (3)].states)); ;}
     break;
 
   case 33:
-#line 168 "script-parser.yy"
+#line 170 "script-parser.yy"
     { (yyval.decls) = NULL ;}
     break;
 
   case 34:
-#line 169 "script-parser.yy"
+#line 171 "script-parser.yy"
     { (yyval.decls) = (yysemantic_stack_[(1) - (1)].decls) ;}
     break;
 
   case 35:
-#line 172 "script-parser.yy"
+#line 174 "script-parser.yy"
     { (yyval.states) = NULL ;}
     break;
 
   case 36:
-#line 173 "script-parser.yy"
+#line 175 "script-parser.yy"
     { (yyval.states) = (yysemantic_stack_[(1) - (1)].states) ;}
     break;
 
   case 37:
-#line 176 "script-parser.yy"
+#line 178 "script-parser.yy"
     { (yyval.decls) = new CDeclList(new CDecl((yysemantic_stack_[(3) - (1)].type), (yysemantic_stack_[(3) - (2)].value_list))); ;}
     break;
 
   case 38:
-#line 177 "script-parser.yy"
+#line 179 "script-parser.yy"
     { (yyval.decls) = (yysemantic_stack_[(4) - (1)].decls)->Add(new CDecl((yysemantic_stack_[(4) - (2)].type), (yysemantic_stack_[(4) - (3)].value_list))); ;}
     break;
 
   case 39:
-#line 180 "script-parser.yy"
+#line 182 "script-parser.yy"
     { (yyval.states) = new CStateList((yysemantic_stack_[(1) - (1)].statement)); ;}
     break;
 
   case 40:
-#line 181 "script-parser.yy"
+#line 183 "script-parser.yy"
     { (yyval.states) = (yysemantic_stack_[(2) - (1)].states)->Add((yysemantic_stack_[(2) - (2)].statement)); ;}
     break;
 
   case 41:
-#line 184 "script-parser.yy"
+#line 186 "script-parser.yy"
     { (yyval.statement) = new CNopStatement((yylocation_stack_[(1) - (1)])); ;}
     break;
 
   case 42:
-#line 185 "script-parser.yy"
+#line 187 "script-parser.yy"
     { (yyval.statement) = new CAssignStatement((yylocation_stack_[(2) - (1)]), (yysemantic_stack_[(2) - (1)].assign)); ;}
     break;
 
   case 43:
-#line 186 "script-parser.yy"
+#line 188 "script-parser.yy"
     { (yyval.statement) = new CFunctionStatement((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (1)].sval), (yysemantic_stack_[(5) - (3)].args)); ;}
     break;
 
   case 44:
-#line 187 "script-parser.yy"
+#line 189 "script-parser.yy"
     { (yyval.statement) = new CFunctionStatement((yylocation_stack_[(4) - (1)]), (yysemantic_stack_[(4) - (1)].sval), NULL); ;}
     break;
 
   case 45:
-#line 188 "script-parser.yy"
-    { (yyval.statement) = new CCaseStatement((yylocation_stack_[(3) - (1)]), (yysemantic_stack_[(3) - (2)].expr)); ;}
+#line 190 "script-parser.yy"
+    { driver.AddExit((yylocation_stack_[(4) - (1)]), TYPE_EXIT); ;}
     break;
 
   case 46:
-#line 189 "script-parser.yy"
-    { (yyval.statement) = new CDefaultStatement((yylocation_stack_[(2) - (1)])); ;}
+#line 191 "script-parser.yy"
+    { (yyval.statement) = new CGotoFunctionStatement((yylocation_stack_[(6) - (1)]), (yysemantic_stack_[(6) - (2)].sval), (yysemantic_stack_[(6) - (4)].args)); ;}
     break;
 
   case 47:
-#line 190 "script-parser.yy"
-    { (yyval.statement) = new CBreakStatement((yylocation_stack_[(2) - (1)])); ;}
+#line 192 "script-parser.yy"
+    { (yyval.statement) = new CGotoFunctionStatement((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (2)].sval), NULL); ;}
     break;
 
   case 48:
-#line 191 "script-parser.yy"
-    { (yyval.statement) = new CReturnStatement((yylocation_stack_[(2) - (1)]), NULL); ;}
+#line 193 "script-parser.yy"
+    { (yyval.statement) = new CCaseStatement((yylocation_stack_[(3) - (1)]), (yysemantic_stack_[(3) - (2)].expr)); ;}
     break;
 
   case 49:
-#line 192 "script-parser.yy"
-    { (yyval.statement) = new CReturnStatement((yylocation_stack_[(3) - (1)]), (yysemantic_stack_[(3) - (2)].expr)); ;}
+#line 194 "script-parser.yy"
+    { (yyval.statement) = new CDefaultStatement((yylocation_stack_[(2) - (1)])); ;}
     break;
 
   case 50:
-#line 193 "script-parser.yy"
-    { (yyval.statement) = new CIfStatement((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (3)].expr), (yysemantic_stack_[(5) - (5)].statement)); ;}
+#line 195 "script-parser.yy"
+    { (yyval.statement) = new CBreakStatement((yylocation_stack_[(2) - (1)])); ;}
     break;
 
   case 51:
-#line 194 "script-parser.yy"
-    { (yyval.statement) = new CIfStatement((yylocation_stack_[(7) - (1)]), (yysemantic_stack_[(7) - (3)].expr), (yysemantic_stack_[(7) - (5)].statement), (yysemantic_stack_[(7) - (7)].statement)); ;}
+#line 196 "script-parser.yy"
+    { (yyval.statement) = new CReturnStatement((yylocation_stack_[(2) - (1)]), NULL); ;}
     break;
 
   case 52:
-#line 196 "script-parser.yy"
-    { (yyval.statement) = new CForStatement((yylocation_stack_[(9) - (1)]), (yysemantic_stack_[(9) - (3)].assign), (yysemantic_stack_[(9) - (5)].expr), (yysemantic_stack_[(9) - (7)].assign), (yysemantic_stack_[(9) - (9)].statement)); ;}
+#line 197 "script-parser.yy"
+    { (yyval.statement) = new CReturnStatement((yylocation_stack_[(3) - (1)]), (yysemantic_stack_[(3) - (2)].expr)); ;}
     break;
 
   case 53:
-#line 197 "script-parser.yy"
-    { (yyval.statement) = new CWhileStatement((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (3)].expr), (yysemantic_stack_[(5) - (5)].statement)); ;}
+#line 198 "script-parser.yy"
+    { (yyval.statement) = new CIfStatement((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (3)].expr), (yysemantic_stack_[(5) - (5)].statement)); ;}
     break;
 
   case 54:
-#line 198 "script-parser.yy"
-    { (yyval.statement) = new CSwitchStatement((yylocation_stack_[(7) - (1)]), (yysemantic_stack_[(7) - (3)].expr), (yysemantic_stack_[(7) - (6)].states)); ;}
+#line 199 "script-parser.yy"
+    { (yyval.statement) = new CIfStatement((yylocation_stack_[(7) - (1)]), (yysemantic_stack_[(7) - (3)].expr), (yysemantic_stack_[(7) - (5)].statement), (yysemantic_stack_[(7) - (7)].statement)); ;}
     break;
 
   case 55:
-#line 199 "script-parser.yy"
-    { (yyval.statement) = new CBlockStatement((yylocation_stack_[(1) - (1)]), (yysemantic_stack_[(1) - (1)].block)); ;}
+#line 201 "script-parser.yy"
+    { (yyval.statement) = new CForStatement((yylocation_stack_[(9) - (1)]), (yysemantic_stack_[(9) - (3)].assign), (yysemantic_stack_[(9) - (5)].expr), (yysemantic_stack_[(9) - (7)].assign), (yysemantic_stack_[(9) - (9)].statement)); ;}
     break;
 
   case 56:
 #line 202 "script-parser.yy"
-    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '=', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    { (yyval.statement) = new CWhileStatement((yylocation_stack_[(5) - (1)]), (yysemantic_stack_[(5) - (3)].expr), (yysemantic_stack_[(5) - (5)].statement)); ;}
     break;
 
   case 57:
 #line 203 "script-parser.yy"
-    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '+', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    { (yyval.statement) = new CSwitchStatement((yylocation_stack_[(7) - (1)]), (yysemantic_stack_[(7) - (3)].expr), (yysemantic_stack_[(7) - (6)].states)); ;}
     break;
 
   case 58:
 #line 204 "script-parser.yy"
-    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '-', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    { (yyval.statement) = new CBlockStatement((yylocation_stack_[(1) - (1)]), (yysemantic_stack_[(1) - (1)].block)); ;}
     break;
 
   case 59:
-#line 205 "script-parser.yy"
-    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '*', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 207 "script-parser.yy"
+    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '=', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 60:
-#line 206 "script-parser.yy"
-    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '/', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 208 "script-parser.yy"
+    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '+', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 61:
-#line 207 "script-parser.yy"
-    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '%', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 209 "script-parser.yy"
+    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '-', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 62:
 #line 210 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LOGAND, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '*', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 63:
 #line 211 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LOGOR, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '/', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 64:
 #line 212 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_EQ, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    { (yyval.assign) = new CAssign((yylocation_stack_[(3) - (1)]), '%', (yysemantic_stack_[(3) - (1)].value), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 65:
-#line 213 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_NE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 215 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LOGAND, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 66:
-#line 214 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_GT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 216 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LOGOR, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 67:
-#line 215 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_GE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 217 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_EQ, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 68:
-#line 216 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 218 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_NE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 69:
-#line 217 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 219 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_GT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 70:
-#line 218 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_AND, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 220 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_GE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 71:
-#line 219 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_OR, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 221 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 72:
-#line 220 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LSHIFT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+#line 222 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 73:
-#line 221 "script-parser.yy"
+#line 223 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_AND, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    break;
+
+  case 74:
+#line 224 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_OR, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    break;
+
+  case 75:
+#line 225 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_LSHIFT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
+    break;
+
+  case 76:
+#line 226 "script-parser.yy"
     { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_RSHIFT, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
-  case 74:
-#line 222 "script-parser.yy"
+  case 77:
+#line 227 "script-parser.yy"
     { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_MINUS, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
-  case 75:
-#line 223 "script-parser.yy"
+  case 78:
+#line 228 "script-parser.yy"
     { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_PLUS, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
-  case 76:
-#line 224 "script-parser.yy"
+  case 79:
+#line 229 "script-parser.yy"
     { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_TIMES, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
-  case 77:
-#line 225 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_DIVIDE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
-    break;
-
-  case 78:
-#line 226 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_MOD, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
-    break;
-
-  case 79:
-#line 227 "script-parser.yy"
-    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(2) - (2)]), OP_NEG, (yysemantic_stack_[(2) - (2)].expr)); ;}
-    break;
-
   case 80:
-#line 228 "script-parser.yy"
-    { (yyval.expr) = (yysemantic_stack_[(3) - (2)].expr); ;}
+#line 230 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_DIVIDE, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 81:
-#line 229 "script-parser.yy"
-    { (yyval.expr) = (yysemantic_stack_[(1) - (1)].value); ;}
+#line 231 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(3) - (2)]), OP_MOD, (yysemantic_stack_[(3) - (1)].expr), (yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
   case 82:
-#line 230 "script-parser.yy"
-    { (yyval.expr) = new CNode((yylocation_stack_[(1) - (1)]), OP_CONST, (yysemantic_stack_[(1) - (1)].ival)); ;}
+#line 232 "script-parser.yy"
+    { (yyval.expr) = CNode::MakeNode(driver, (yylocation_stack_[(2) - (2)]), OP_NEG, (yysemantic_stack_[(2) - (2)].expr)); ;}
     break;
 
   case 83:
-#line 231 "script-parser.yy"
-    { (yyval.expr) = new CNode((yylocation_stack_[(1) - (1)]), OP_STRING, (yysemantic_stack_[(1) - (1)].sval)); ;}
+#line 233 "script-parser.yy"
+    { (yyval.expr) = (yysemantic_stack_[(3) - (2)].expr); ;}
     break;
 
   case 84:
-#line 232 "script-parser.yy"
-    { (yyval.expr) = new CFunctionNode((yylocation_stack_[(4) - (1)]), (yysemantic_stack_[(4) - (1)].sval), (yysemantic_stack_[(4) - (3)].args)); ;}
+#line 234 "script-parser.yy"
+    { (yyval.expr) = (yysemantic_stack_[(1) - (1)].value); ;}
     break;
 
   case 85:
-#line 233 "script-parser.yy"
-    { (yyval.expr) = new CFunctionNode((yylocation_stack_[(3) - (1)]), (yysemantic_stack_[(3) - (1)].sval), NULL); ;}
+#line 235 "script-parser.yy"
+    { (yyval.expr) = new CNode((yylocation_stack_[(1) - (1)]), OP_CONST, (yysemantic_stack_[(1) - (1)].ival)); ;}
     break;
 
   case 86:
 #line 236 "script-parser.yy"
-    { (yyval.value) = new CValueNode((yylocation_stack_[(1) - (1)]), (yysemantic_stack_[(1) - (1)].sval)); ;}
+    { (yyval.expr) = new CNode((yylocation_stack_[(1) - (1)]), OP_STRING, (yysemantic_stack_[(1) - (1)].sval)); ;}
     break;
 
   case 87:
 #line 237 "script-parser.yy"
-    { (yyval.value) = new CValueNode((yylocation_stack_[(4) - (1)]), (yysemantic_stack_[(4) - (1)].sval), (yysemantic_stack_[(4) - (3)].expr)); ;}
+    { (yyval.expr) = new CFunctionNode((yylocation_stack_[(4) - (1)]), (yysemantic_stack_[(4) - (1)].sval), (yysemantic_stack_[(4) - (3)].args)); ;}
     break;
 
   case 88:
-#line 240 "script-parser.yy"
-    { (yyval.args) = new CArgs((yysemantic_stack_[(1) - (1)].expr)); ;}
+#line 238 "script-parser.yy"
+    { (yyval.expr) = new CFunctionNode((yylocation_stack_[(3) - (1)]), (yysemantic_stack_[(3) - (1)].sval), NULL); ;}
     break;
 
   case 89:
 #line 241 "script-parser.yy"
+    { (yyval.value) = new CValueNode((yylocation_stack_[(1) - (1)]), (yysemantic_stack_[(1) - (1)].sval)); ;}
+    break;
+
+  case 90:
+#line 242 "script-parser.yy"
+    { (yyval.value) = new CValueNode((yylocation_stack_[(4) - (1)]), (yysemantic_stack_[(4) - (1)].sval), (yysemantic_stack_[(4) - (3)].expr)); ;}
+    break;
+
+  case 91:
+#line 245 "script-parser.yy"
+    { (yyval.args) = new CArgs((yysemantic_stack_[(1) - (1)].expr)); ;}
+    break;
+
+  case 92:
+#line 246 "script-parser.yy"
     { (yyval.args) = (yysemantic_stack_[(3) - (1)].args)->Add((yysemantic_stack_[(3) - (3)].expr)); ;}
     break;
 
 
     /* Line 675 of lalr1.cc.  */
-#line 890 "script-parser.cc"
+#line 905 "script-parser.cc"
 	default: break;
       }
     YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
@@ -1093,29 +1108,30 @@
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
-  const signed char script_parser::yypact_ninf_ = -124;
+  const short int script_parser::yypact_ninf_ = -133;
   const short int
   script_parser::yypact_[] =
   {
-        64,   -41,  -124,  -124,     7,    12,     4,  -124,  -124,  -124,
-      34,  -124,    19,    21,  -124,  -124,   -23,    55,  -124,    -7,
-      43,   131,   148,  -124,    84,   -40,   111,  -124,     2,   -33,
-     157,    41,   209,  -124,    67,  -124,   148,   148,   171,  -124,
-      27,  -124,  -124,   213,  -124,   102,   213,    44,    94,  -124,
-    -124,   115,  -124,  -124,   126,    26,  -124,   187,   148,   148,
-     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-     148,   148,   148,   148,   148,  -124,    84,   116,   213,  -124,
-    -124,  -124,    89,   119,  -124,  -124,  -124,  -124,  -124,   339,
-     211,  -124,   373,   382,   391,   391,   391,   391,   150,   150,
-     391,   391,   109,   109,   190,   190,  -124,  -124,  -124,   170,
-     197,   124,   149,   173,   201,   148,   163,   215,    81,  -124,
-    -124,   220,   116,  -124,   240,    10,    84,  -124,   245,  -124,
-     148,  -124,   129,   148,   148,    84,   148,    69,  -124,  -124,
-    -124,   291,  -124,  -124,  -124,   148,   148,   148,   148,   148,
-     148,   172,  -124,   339,   251,   223,   226,   239,   252,   278,
-    -124,  -124,   339,   339,   339,   339,   339,   339,  -124,  -124,
-     253,   116,   116,   148,   248,  -124,   285,  -124,   328,   116,
-     116,    84,   257,  -124,   263,  -124,   116,  -124
+        78,   -32,  -133,  -133,    21,    33,     1,  -133,  -133,  -133,
+      57,  -133,    18,    27,  -133,  -133,   -37,    46,  -133,   108,
+     151,   156,    70,  -133,    77,   -35,    51,  -133,     2,   -34,
+     196,    45,   208,  -133,    81,  -133,    70,    70,   183,  -133,
+      64,  -133,  -133,   228,  -133,   105,   228,    80,   134,  -133,
+    -133,   107,  -133,  -133,   154,    23,  -133,   199,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,  -133,    77,    61,   228,  -133,
+    -133,  -133,    91,   104,  -133,  -133,  -133,  -133,  -133,   357,
+     221,  -133,   366,   401,   410,   410,   410,   410,   -18,   -18,
+     410,   410,   188,   188,   173,   173,  -133,  -133,  -133,   106,
+     113,   121,   158,   171,   186,    70,   147,   200,   120,   254,
+     251,  -133,  -133,   222,    61,  -133,   241,    86,    77,  -133,
+     248,  -133,    70,  -133,    31,    70,    70,    77,    70,   135,
+    -133,  -133,  -133,   307,   264,   252,  -133,  -133,  -133,    70,
+      70,    70,    70,    70,    70,   139,  -133,   357,   266,   223,
+     240,   253,   267,   294,  -133,  -133,   117,   268,   357,   357,
+     357,   357,   357,   357,  -133,  -133,   277,    61,    61,    70,
+     258,   278,   225,  -133,  -133,   303,  -133,   346,    61,  -133,
+     280,    61,    77,   274,  -133,  -133,   281,  -133,    61,  -133
   };
 
   /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
@@ -1125,40 +1141,41 @@
   script_parser::yydefact_[] =
   {
          0,     0,    30,    31,     0,     0,     0,     2,     6,     5,
-       0,     4,     0,     0,     1,     3,    86,     0,    14,     0,
+       0,     4,     0,     0,     1,     3,    89,     0,    14,     0,
        0,     0,     0,     7,     0,     0,     0,    16,    18,     0,
-       0,     0,     0,    82,    86,    83,     0,     0,     0,    81,
-      86,    15,    10,    33,    26,     0,     0,    20,    19,    12,
-      28,     0,     8,    24,     0,     0,    79,     0,     0,     0,
+       0,     0,     0,    85,    89,    86,     0,     0,     0,    84,
+      89,    15,    10,    33,    26,     0,     0,    20,    19,    12,
+      28,     0,     8,    24,     0,     0,    82,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    87,     0,    35,    34,    11,
-      27,    17,     0,    21,    13,    29,     9,    25,    85,    88,
-       0,    80,    63,    62,    64,    65,    67,    69,    72,    73,
-      66,    68,    70,    71,    75,    74,    76,    77,    78,     0,
-      86,     0,     0,     0,     0,     0,     0,     0,     0,    41,
-      55,     0,    36,    39,     0,     0,     0,    22,     0,    84,
-       0,    37,     0,     0,     0,     0,     0,     0,    46,    47,
-      48,     0,    32,    40,    42,     0,     0,     0,     0,     0,
-       0,     0,    23,    89,     0,     0,     0,     0,     0,     0,
-      45,    49,    57,    58,    59,    60,    61,    56,    38,    44,
-       0,     0,     0,     0,     0,    43,    50,    53,     0,    35,
-       0,     0,     0,    51,     0,    54,     0,    52
+       0,     0,     0,     0,     0,    90,     0,    35,    34,    11,
+      27,    17,     0,    21,    13,    29,     9,    25,    88,    91,
+       0,    83,    66,    65,    67,    68,    70,    72,    75,    76,
+      69,    71,    73,    74,    78,    77,    79,    80,    81,     0,
+      89,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    41,    58,     0,    36,    39,     0,     0,     0,    22,
+       0,    87,     0,    37,     0,     0,     0,     0,     0,     0,
+      49,    50,    51,     0,     0,     0,    32,    40,    42,     0,
+       0,     0,     0,     0,     0,     0,    23,    92,     0,     0,
+       0,     0,     0,     0,    48,    52,     0,     0,    60,    61,
+      62,    63,    64,    59,    38,    44,     0,     0,     0,     0,
+       0,     0,     0,    45,    43,    53,    56,     0,    35,    47,
+       0,     0,     0,     0,    46,    54,     0,    57,     0,    55
   };
 
   /* YYPGOTO[NTERM-NUM].  */
   const short int
   script_parser::yypgoto_[] =
   {
-      -124,  -124,   302,  -124,   -69,   260,   273,  -124,    13,   407,
-    -124,   130,  -124,  -124,  -112,  -123,   -19,   -10,   188
+      -133,  -133,   320,  -133,   -69,   263,   291,  -133,    13,   428,
+    -133,   150,  -133,  -133,  -120,  -132,   -19,   -10,  -102
   };
 
   /* YYDEFGOTO[NTERM-NUM].  */
   const signed char
   script_parser::yydefgoto_[] =
   {
-        -1,     6,     7,     8,    17,    26,    27,     9,    28,   120,
-      77,   121,    78,   122,   123,   124,    89,    39,    90
+        -1,     6,     7,     8,    17,    26,    27,     9,    28,   122,
+      77,   123,    78,   124,   125,   126,    89,    39,    90
   };
 
   /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1168,106 +1185,110 @@
   const short int
   script_parser::yytable_[] =
   {
-        18,    11,    42,    38,    14,     1,    47,   109,    43,    49,
-     143,    12,   158,    10,    41,    43,    13,    56,    57,    10,
-      21,     2,     3,    22,   145,   146,   147,   148,   149,    33,
-      34,    35,     2,     3,     4,     5,    48,    25,    16,    92,
+        18,    14,     1,    38,   147,   162,    47,   109,    21,    42,
+      49,    22,    11,    10,    41,    43,    43,    56,    57,    10,
+      70,    71,    72,    73,    74,    12,    33,    34,    35,     2,
+       3,     4,   159,     5,    33,    34,    35,    13,    48,    92,
       93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,    76,   151,   184,   176,
-     177,   150,    19,    36,    20,     1,    18,   125,   183,    37,
-      88,     2,     3,    22,   187,    58,    59,    60,    61,    62,
-      63,    64,    65,    52,    33,    34,    35,    29,    40,    43,
-      82,   126,     2,     3,     4,     5,   137,    23,    83,   141,
-      24,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      55,   153,   125,    22,   156,   157,    18,   159,    36,   160,
-     110,    64,    65,   140,    37,   125,   162,   163,   164,   165,
-     166,   167,    33,    34,    35,   111,   127,   112,   113,   114,
-     115,   116,   117,   118,    79,    70,    71,    72,    73,    74,
-      43,    33,    34,    35,   178,    45,    46,    84,   119,     2,
-       3,   125,   125,    43,    43,   128,    36,   133,    86,   125,
-     125,   125,    37,   154,    43,    31,   125,    58,    59,    60,
-      61,    62,    63,    64,    65,    36,    70,    71,    72,    73,
-      74,    37,   134,    58,    59,    60,    61,    62,    63,    64,
-      65,    51,    46,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,   131,   138,   168,    24,   135,    24,    75,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    72,    73,
-      74,    91,    58,    59,    60,    61,    62,    63,    64,    65,
-     132,     2,     3,    22,   136,    58,    59,    60,    61,    62,
-      63,    64,    65,    54,    46,   129,   130,   139,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,   170,   130,   142,
-     171,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      30,    32,   144,   172,    58,    59,    60,    61,    62,    63,
-      64,    65,   152,   169,   173,   175,   179,    58,    59,    60,
-      61,    62,    63,    64,    65,   180,   185,   186,    15,   182,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    81,
-     155,     0,   174,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,     0,   161,    58,    59,    60,    61,    62,    63,
-      64,    65,     0,     0,     0,    58,    59,    60,    61,    62,
-      63,    64,    65,     0,     0,     0,     0,     0,     0,     0,
+     103,   104,   105,   106,   107,   108,    76,   185,   186,   155,
+     196,    16,    36,    19,   182,   110,    18,   127,    37,    88,
+      36,   195,    20,    33,    34,    35,    37,   158,   199,     1,
+     111,    40,   112,   113,   114,   115,   116,   117,   118,    52,
+      23,   128,   119,    24,   120,    43,   139,    45,    46,   143,
+     149,   150,   151,   152,   153,   121,     2,     3,     4,    36,
+       5,    43,    22,   157,   127,    37,   160,   161,    18,   163,
+      33,    34,    35,    33,    34,    35,    55,   127,    82,    22,
+     168,   169,   170,   171,   172,   173,     2,     3,    83,   154,
+     129,    58,    59,    60,    61,    62,    63,    64,    65,    79,
+     133,    84,   130,    24,    25,    43,    36,    43,   134,    36,
+     187,    22,    37,   181,   142,    37,   135,   127,   127,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,   127,     2,
+       3,   127,   127,   174,     2,     3,    24,   164,   127,    58,
+      59,    60,    61,    62,    63,    64,    65,    29,    86,   140,
+      64,    65,    31,   136,    43,    58,    59,    60,    61,    62,
+      63,    64,    65,    72,    73,    74,   137,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    70,    71,    72,    73,
+      74,   138,    75,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    51,    46,   141,    91,    58,    59,    60,    61,
+      62,    63,    64,    65,    54,    46,     2,     3,   144,    58,
+      59,    60,    61,    62,    63,    64,    65,   131,   132,   176,
+     132,   190,   132,   146,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    30,    32,   148,   177,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,   145,   156,   167,   178,
+      58,    59,    60,    61,    62,    63,    64,    65,   188,   166,
+     175,   179,   183,    58,    59,    60,    61,    62,    63,    64,
+      65,   184,   189,   191,   194,   197,    15,   198,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    81,   193,     0,
+     180,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+       0,   165,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,     0,     0,    58,    59,    60,    61,    62,    63,    64,
+      65,     0,     0,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,     0,
-     181,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      59,    60,    61,    62,    63,    64,    65,     0,     0,     0,
-      60,    61,    62,    63,    64,    65,     0,     0,     0,    -1,
-      -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    68,    69,    70,    71,    72,
-      73,    74,    44,     0,     0,     0,    50,     0,    53,     0,
+     192,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    60,
+      61,    62,    63,    64,    65,     0,     0,     0,    -1,    -1,
+      -1,    -1,    64,    65,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    -1,    -1,    68,    69,    70,    71,
+      72,    73,    74,    44,     0,     0,     0,    50,     0,    53,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    80,     0,     0,     0,     0,     0,    85,     0,
-       0,    87
+       0,     0,     0,    80,     0,     0,     0,     0,     0,    85,
+       0,     0,    87
   };
 
   /* YYCHECK.  */
   const short int
   script_parser::yycheck_[] =
   {
-        10,    42,    42,    22,     0,     1,     4,    76,    48,    42,
-     122,     4,   135,     0,    24,    48,     4,    36,    37,     6,
-      43,    28,    29,    46,    14,    15,    16,    17,    18,     3,
-       4,     5,    28,    29,    30,    31,    34,    44,     4,    58,
+        10,     0,     1,    22,   124,   137,     4,    76,    45,    44,
+      44,    48,    44,     0,    24,    50,    50,    36,    37,     6,
+      38,    39,    40,    41,    42,     4,     3,     4,     5,    28,
+      29,    30,   134,    32,     3,     4,     5,     4,    36,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    43,   126,   181,   171,
-     172,    51,    43,    37,    43,     1,    76,    77,   180,    43,
-      44,    28,    29,    46,   186,     6,     7,     8,     9,    10,
-      11,    12,    13,    42,     3,     4,     5,    44,     4,    48,
-      46,    78,    28,    29,    30,    31,   115,    42,     4,   118,
-      45,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      43,   130,   122,    46,   133,   134,   126,   136,    37,    50,
-       4,    12,    13,    42,    43,   135,   145,   146,   147,   148,
-     149,   150,     3,     4,     5,    19,    47,    21,    22,    23,
-      24,    25,    26,    27,    42,    36,    37,    38,    39,    40,
-      48,     3,     4,     5,   173,    44,    45,    42,    42,    28,
-      29,   171,   172,    48,    48,    46,    37,    43,    42,   179,
-     180,   181,    43,    44,    48,    44,   186,     6,     7,     8,
-       9,    10,    11,    12,    13,    37,    36,    37,    38,    39,
-      40,    43,    43,     6,     7,     8,     9,    10,    11,    12,
-      13,    44,    45,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    42,    50,    42,    45,    43,    45,    47,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    38,    39,
-      40,    44,     6,     7,     8,     9,    10,    11,    12,    13,
-      43,    28,    29,    46,    43,     6,     7,     8,     9,    10,
-      11,    12,    13,    44,    45,    44,    45,    42,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    44,    45,    49,
-      44,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      20,    21,    42,    44,     6,     7,     8,     9,    10,    11,
-      12,    13,    47,    42,    42,    42,    48,     6,     7,     8,
-       9,    10,    11,    12,    13,    20,    49,    44,     6,   179,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    46,
-     132,    -1,    44,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    -1,    42,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,     6,     7,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    -1,
-      42,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,     8,
-       9,    10,    11,    12,    13,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    25,    -1,    -1,    -1,    29,    -1,    31,    -1,
+      69,    70,    71,    72,    73,    74,    43,   177,   178,   128,
+     192,     4,    39,    45,   166,     4,    76,    77,    45,    46,
+      39,   191,    45,     3,     4,     5,    45,    46,   198,     1,
+      19,     4,    21,    22,    23,    24,    25,    26,    27,    44,
+      44,    78,    31,    47,    33,    50,   115,    46,    47,   118,
+      14,    15,    16,    17,    18,    44,    28,    29,    30,    39,
+      32,    50,    48,   132,   124,    45,   135,   136,   128,   138,
+       3,     4,     5,     3,     4,     5,    45,   137,    48,    48,
+     149,   150,   151,   152,   153,   154,    28,    29,     4,    53,
+      49,     6,     7,     8,     9,    10,    11,    12,    13,    44,
+      44,    44,    48,    47,    46,    50,    39,    50,    45,    39,
+     179,    48,    45,    46,    44,    45,    45,   177,   178,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,   188,    28,
+      29,   191,   192,    44,    28,    29,    47,    52,   198,     6,
+       7,     8,     9,    10,    11,    12,    13,    46,    44,    52,
+      12,    13,    46,    45,    50,     6,     7,     8,     9,    10,
+      11,    12,    13,    40,    41,    42,    45,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    38,    39,    40,    41,
+      42,    45,    49,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    46,    47,    44,    46,     6,     7,     8,     9,
+      10,    11,    12,    13,    46,    47,    28,    29,     4,     6,
+       7,     8,     9,    10,    11,    12,    13,    46,    47,    46,
+      47,    46,    47,    51,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    20,    21,    44,    46,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    45,    49,    46,    46,
+       6,     7,     8,     9,    10,    11,    12,    13,    50,    45,
+      44,    44,    44,     6,     7,     8,     9,    10,    11,    12,
+      13,    44,    44,    20,    44,    51,     6,    46,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    46,   188,    -1,
+      46,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      -1,    44,     6,     7,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,     6,     7,     8,     9,    10,    11,    12,
+      13,    -1,    -1,     7,     8,     9,    10,    11,    12,    13,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    -1,
+      44,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,     8,
+       9,    10,    11,    12,    13,    -1,    -1,    -1,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    25,    -1,    -1,    -1,    29,    -1,    31,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    -1,
-      -1,    54
+      -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,
+      -1,    -1,    54
   };
 
   /* STOS_[STATE-NUM] -- The (internal number of the) accessing
@@ -1275,25 +1296,26 @@
   const unsigned char
   script_parser::yystos_[] =
   {
-         0,     1,    28,    29,    30,    31,    53,    54,    55,    59,
-      60,    42,     4,     4,     0,    54,     4,    56,    69,    43,
-      43,    43,    46,    42,    45,    44,    57,    58,    60,    44,
-      57,    44,    57,     3,     4,     5,    37,    43,    68,    69,
-       4,    69,    42,    48,    61,    44,    45,     4,    34,    42,
-      61,    44,    42,    61,    44,    43,    68,    68,     6,     7,
-       8,     9,    10,    11,    12,    13,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    47,    60,    62,    64,    42,
-      61,    58,    46,     4,    42,    61,    42,    61,    44,    68,
-      70,    44,    68,    68,    68,    68,    68,    68,    68,    68,
-      68,    68,    68,    68,    68,    68,    68,    68,    68,    56,
-       4,    19,    21,    22,    23,    24,    25,    26,    27,    42,
-      61,    63,    65,    66,    67,    69,    60,    47,    46,    44,
-      45,    42,    43,    43,    43,    43,    43,    68,    50,    42,
-      42,    68,    49,    66,    42,    14,    15,    16,    17,    18,
-      51,    56,    47,    68,    44,    70,    68,    68,    67,    68,
-      50,    42,    68,    68,    68,    68,    68,    68,    42,    42,
-      44,    44,    44,    42,    44,    42,    66,    66,    68,    48,
-      20,    42,    63,    66,    67,    49,    44,    66
+         0,     1,    28,    29,    30,    32,    55,    56,    57,    61,
+      62,    44,     4,     4,     0,    56,     4,    58,    71,    45,
+      45,    45,    48,    44,    47,    46,    59,    60,    62,    46,
+      59,    46,    59,     3,     4,     5,    39,    45,    70,    71,
+       4,    71,    44,    50,    63,    46,    47,     4,    36,    44,
+      63,    46,    44,    63,    46,    45,    70,    70,     6,     7,
+       8,     9,    10,    11,    12,    13,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    49,    62,    64,    66,    44,
+      63,    60,    48,     4,    44,    63,    44,    63,    46,    70,
+      72,    46,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    58,
+       4,    19,    21,    22,    23,    24,    25,    26,    27,    31,
+      33,    44,    63,    65,    67,    68,    69,    71,    62,    49,
+      48,    46,    47,    44,    45,    45,    45,    45,    45,    70,
+      52,    44,    44,    70,     4,    45,    51,    68,    44,    14,
+      15,    16,    17,    18,    53,    58,    49,    70,    46,    72,
+      70,    70,    69,    70,    52,    44,    45,    46,    70,    70,
+      70,    70,    70,    70,    44,    44,    46,    46,    46,    44,
+      46,    46,    72,    44,    44,    68,    68,    70,    50,    44,
+      46,    20,    44,    65,    44,    68,    69,    51,    46,    68
   };
 
 #if YYDEBUG
@@ -1305,9 +1327,9 @@
          0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,    62,    60,    38,   124,    43,    45,    42,    47,
-      37,   287,    59,    40,    41,    44,    91,    93,   123,   125,
-      58,    61
+     285,   286,   287,   288,    62,    60,    38,   124,    43,    45,
+      42,    47,    37,   289,    59,    40,    41,    44,    91,    93,
+     123,   125,    58,    61
   };
 #endif
 
@@ -1315,15 +1337,16 @@
   const unsigned char
   script_parser::yyr1_[] =
   {
-         0,    52,    53,    53,    54,    54,    54,    55,    55,    55,
-      55,    55,    55,    55,    56,    56,    57,    57,    58,    58,
-      58,    58,    58,    58,    59,    59,    59,    59,    59,    59,
-      60,    60,    61,    62,    62,    63,    63,    64,    64,    65,
-      65,    66,    66,    66,    66,    66,    66,    66,    66,    66,
-      66,    66,    66,    66,    66,    66,    67,    67,    67,    67,
-      67,    67,    68,    68,    68,    68,    68,    68,    68,    68,
-      68,    68,    68,    68,    68,    68,    68,    68,    68,    68,
-      68,    68,    68,    68,    68,    68,    69,    69,    70,    70
+         0,    54,    55,    55,    56,    56,    56,    57,    57,    57,
+      57,    57,    57,    57,    58,    58,    59,    59,    60,    60,
+      60,    60,    60,    60,    61,    61,    61,    61,    61,    61,
+      62,    62,    63,    64,    64,    65,    65,    66,    66,    67,
+      67,    68,    68,    68,    68,    68,    68,    68,    68,    68,
+      68,    68,    68,    68,    68,    68,    68,    68,    68,    69,
+      69,    69,    69,    69,    69,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    71,
+      71,    72,    72
   };
 
   /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1334,11 +1357,12 @@
        5,     6,     5,     6,     1,     3,     1,     3,     1,     2,
        2,     3,     4,     5,     5,     6,     5,     6,     5,     6,
        1,     1,     4,     0,     1,     0,     1,     3,     4,     1,
-       2,     1,     2,     5,     4,     3,     2,     2,     2,     3,
-       5,     7,     9,     5,     7,     1,     3,     3,     3,     3,
+       2,     1,     2,     5,     4,     4,     6,     5,     3,     2,
+       2,     2,     3,     5,     7,     9,     5,     7,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     2,
-       3,     1,     1,     1,     4,     3,     1,     4,     1,     3
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     2,     3,     1,     1,     1,     4,     3,     1,
+       4,     1,     3
   };
 
 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
@@ -1352,12 +1376,12 @@
   "\"<<\"", "\">>\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"%=\"",
   "\"if\"", "\"else\"", "\"while\"", "\"for\"", "\"switch\"", "\"case\"",
   "\"default\"", "\"break\"", "\"return\"", "\"int\"", "\"string\"",
-  "\"void\"", "\"__code\"", "'>'", "'<'", "'&'", "'|'", "'+'", "'-'",
-  "'*'", "'/'", "'%'", "NEG", "';'", "'('", "')'", "','", "'['", "']'",
-  "'{'", "'}'", "':'", "'='", "$accept", "unit", "define_or_state",
-  "declaration", "value_list", "arglist", "arg", "function", "type",
-  "block", "decl_list", "state_list", "decls", "states", "statement",
-  "assign", "expr", "value", "args", 0
+  "\"void\"", "\"goto\"", "\"__code\"", "\"exit\"", "'>'", "'<'", "'&'",
+  "'|'", "'+'", "'-'", "'*'", "'/'", "'%'", "NEG", "';'", "'('", "')'",
+  "','", "'['", "']'", "'{'", "'}'", "':'", "'='", "$accept", "unit",
+  "define_or_state", "declaration", "value_list", "arglist", "arg",
+  "function", "type", "block", "decl_list", "state_list", "decls",
+  "states", "statement", "assign", "expr", "value", "args", 0
   };
 #endif
 
@@ -1366,43 +1390,44 @@
   const script_parser::rhs_number_type
   script_parser::yyrhs_[] =
   {
-        53,     0,    -1,    54,    -1,    53,    54,    -1,     1,    42,
-      -1,    59,    -1,    55,    -1,    60,    56,    42,    -1,    60,
-       4,    43,    44,    42,    -1,    60,     4,    43,    57,    44,
-      42,    -1,    30,     4,    43,    44,    42,    -1,    30,     4,
-      43,    57,    44,    42,    -1,    31,     4,    43,    44,    42,
-      -1,    31,     4,    43,    57,    44,    42,    -1,    69,    -1,
-      56,    45,    69,    -1,    58,    -1,    57,    45,    58,    -1,
-      60,    -1,    60,    34,    -1,    60,     4,    -1,    60,    34,
-       4,    -1,    60,     4,    46,    47,    -1,    60,    34,     4,
-      46,    47,    -1,    60,     4,    43,    44,    61,    -1,    60,
-       4,    43,    57,    44,    61,    -1,    30,     4,    43,    44,
-      61,    -1,    30,     4,    43,    57,    44,    61,    -1,    31,
-       4,    43,    44,    61,    -1,    31,     4,    43,    57,    44,
-      61,    -1,    28,    -1,    29,    -1,    48,    62,    63,    49,
-      -1,    -1,    64,    -1,    -1,    65,    -1,    60,    56,    42,
-      -1,    64,    60,    56,    42,    -1,    66,    -1,    65,    66,
-      -1,    42,    -1,    67,    42,    -1,     4,    43,    70,    44,
-      42,    -1,     4,    43,    44,    42,    -1,    24,    68,    50,
-      -1,    25,    50,    -1,    26,    42,    -1,    27,    42,    -1,
-      27,    68,    42,    -1,    19,    43,    68,    44,    66,    -1,
-      19,    43,    68,    44,    66,    20,    66,    -1,    22,    43,
-      67,    42,    68,    42,    67,    44,    66,    -1,    21,    43,
-      68,    44,    66,    -1,    23,    43,    68,    44,    48,    63,
-      49,    -1,    61,    -1,    69,    51,    68,    -1,    69,    14,
-      68,    -1,    69,    15,    68,    -1,    69,    16,    68,    -1,
-      69,    17,    68,    -1,    69,    18,    68,    -1,    68,     7,
-      68,    -1,    68,     6,    68,    -1,    68,     8,    68,    -1,
-      68,     9,    68,    -1,    68,    32,    68,    -1,    68,    10,
-      68,    -1,    68,    33,    68,    -1,    68,    11,    68,    -1,
-      68,    34,    68,    -1,    68,    35,    68,    -1,    68,    12,
-      68,    -1,    68,    13,    68,    -1,    68,    37,    68,    -1,
-      68,    36,    68,    -1,    68,    38,    68,    -1,    68,    39,
-      68,    -1,    68,    40,    68,    -1,    37,    68,    -1,    43,
-      68,    44,    -1,    69,    -1,     3,    -1,     5,    -1,     4,
-      43,    70,    44,    -1,     4,    43,    44,    -1,     4,    -1,
-       4,    46,    68,    47,    -1,    68,    -1,    70,    45,    68,
-      -1
+        55,     0,    -1,    56,    -1,    55,    56,    -1,     1,    44,
+      -1,    61,    -1,    57,    -1,    62,    58,    44,    -1,    62,
+       4,    45,    46,    44,    -1,    62,     4,    45,    59,    46,
+      44,    -1,    30,     4,    45,    46,    44,    -1,    30,     4,
+      45,    59,    46,    44,    -1,    32,     4,    45,    46,    44,
+      -1,    32,     4,    45,    59,    46,    44,    -1,    71,    -1,
+      58,    47,    71,    -1,    60,    -1,    59,    47,    60,    -1,
+      62,    -1,    62,    36,    -1,    62,     4,    -1,    62,    36,
+       4,    -1,    62,     4,    48,    49,    -1,    62,    36,     4,
+      48,    49,    -1,    62,     4,    45,    46,    63,    -1,    62,
+       4,    45,    59,    46,    63,    -1,    30,     4,    45,    46,
+      63,    -1,    30,     4,    45,    59,    46,    63,    -1,    32,
+       4,    45,    46,    63,    -1,    32,     4,    45,    59,    46,
+      63,    -1,    28,    -1,    29,    -1,    50,    64,    65,    51,
+      -1,    -1,    66,    -1,    -1,    67,    -1,    62,    58,    44,
+      -1,    66,    62,    58,    44,    -1,    68,    -1,    67,    68,
+      -1,    44,    -1,    69,    44,    -1,     4,    45,    72,    46,
+      44,    -1,     4,    45,    46,    44,    -1,    33,    45,    46,
+      44,    -1,    31,     4,    45,    72,    46,    44,    -1,    31,
+       4,    45,    46,    44,    -1,    24,    70,    52,    -1,    25,
+      52,    -1,    26,    44,    -1,    27,    44,    -1,    27,    70,
+      44,    -1,    19,    45,    70,    46,    68,    -1,    19,    45,
+      70,    46,    68,    20,    68,    -1,    22,    45,    69,    44,
+      70,    44,    69,    46,    68,    -1,    21,    45,    70,    46,
+      68,    -1,    23,    45,    70,    46,    50,    65,    51,    -1,
+      63,    -1,    71,    53,    70,    -1,    71,    14,    70,    -1,
+      71,    15,    70,    -1,    71,    16,    70,    -1,    71,    17,
+      70,    -1,    71,    18,    70,    -1,    70,     7,    70,    -1,
+      70,     6,    70,    -1,    70,     8,    70,    -1,    70,     9,
+      70,    -1,    70,    34,    70,    -1,    70,    10,    70,    -1,
+      70,    35,    70,    -1,    70,    11,    70,    -1,    70,    36,
+      70,    -1,    70,    37,    70,    -1,    70,    12,    70,    -1,
+      70,    13,    70,    -1,    70,    39,    70,    -1,    70,    38,
+      70,    -1,    70,    40,    70,    -1,    70,    41,    70,    -1,
+      70,    42,    70,    -1,    39,    70,    -1,    45,    70,    46,
+      -1,    71,    -1,     3,    -1,     5,    -1,     4,    45,    72,
+      46,    -1,     4,    45,    46,    -1,     4,    -1,     4,    48,
+      70,    49,    -1,    70,    -1,    72,    47,    70,    -1
   };
 
   /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
@@ -1414,26 +1439,28 @@
       32,    38,    45,    51,    58,    60,    64,    66,    70,    72,
       75,    78,    82,    87,    93,    99,   106,   112,   119,   125,
      132,   134,   136,   141,   142,   144,   145,   147,   151,   156,
-     158,   161,   163,   166,   172,   177,   181,   184,   187,   190,
-     194,   200,   208,   218,   224,   232,   234,   238,   242,   246,
-     250,   254,   258,   262,   266,   270,   274,   278,   282,   286,
-     290,   294,   298,   302,   306,   310,   314,   318,   322,   326,
-     329,   333,   335,   337,   339,   344,   348,   350,   355,   357
+     158,   161,   163,   166,   172,   177,   182,   189,   195,   199,
+     202,   205,   208,   212,   218,   226,   236,   242,   250,   252,
+     256,   260,   264,   268,   272,   276,   280,   284,   288,   292,
+     296,   300,   304,   308,   312,   316,   320,   324,   328,   332,
+     336,   340,   344,   347,   351,   353,   355,   357,   362,   366,
+     368,   373,   375
   };
 
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
   const unsigned char
   script_parser::yyrline_[] =
   {
-         0,   119,   119,   120,   123,   124,   125,   128,   129,   130,
-     131,   132,   133,   134,   137,   138,   141,   142,   145,   146,
-     147,   148,   149,   150,   153,   154,   155,   156,   157,   158,
-     161,   162,   165,   168,   169,   172,   173,   176,   177,   180,
-     181,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   197,   198,   199,   202,   203,   204,   205,
-     206,   207,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   236,   237,   240,   241
+         0,   121,   121,   122,   125,   126,   127,   130,   131,   132,
+     133,   134,   135,   136,   139,   140,   143,   144,   147,   148,
+     149,   150,   151,   152,   155,   156,   157,   158,   159,   160,
+     163,   164,   167,   170,   171,   174,   175,   178,   179,   182,
+     183,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   202,   203,   204,   207,
+     208,   209,   210,   211,   212,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   241,
+     242,   245,   246
   };
 
   // Print the state stack on the debug stream.
@@ -1476,16 +1503,16 @@
            0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    40,    34,     2,
-      43,    44,    38,    36,    45,    37,     2,    39,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    50,    42,
-      33,    51,    32,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    42,    36,     2,
+      45,    46,    40,    38,    47,    39,     2,    41,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    52,    44,
+      35,    53,    34,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    46,     2,    47,     2,     2,     2,     2,     2,     2,
+       2,    48,     2,    49,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    48,    35,    49,     2,     2,     2,     2,
+       2,     2,     2,    50,    37,    51,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1501,7 +1528,7 @@
        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    41
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    43
     };
     if ((unsigned int) t <= yyuser_token_number_max_)
       return translate_table[t];
@@ -1510,20 +1537,20 @@
   }
 
   const int script_parser::yyeof_ = 0;
-  const int script_parser::yylast_ = 461;
+  const int script_parser::yylast_ = 482;
   const int script_parser::yynnts_ = 19;
   const int script_parser::yyempty_ = -2;
   const int script_parser::yyfinal_ = 14;
   const int script_parser::yyterror_ = 1;
   const int script_parser::yyerrcode_ = 256;
-  const int script_parser::yyntokens_ = 52;
+  const int script_parser::yyntokens_ = 54;
 
-  const unsigned int script_parser::yyuser_token_number_max_ = 287;
+  const unsigned int script_parser::yyuser_token_number_max_ = 289;
   const script_parser::token_number_type script_parser::yyundef_token_ = 2;
 
 } // namespace yy
 
-#line 244 "script-parser.yy"
+#line 249 "script-parser.yy"
 
 void yy::script_parser::error(const yy::script_parser::location_type& l, const std::string& m)
 {