(* Yacc parser template (TP Yacc V3.0), V1.2 6-17-91 AG *) (* global definitions: *) {$APPTYPE CONSOLE} uses SysUtils, Classes, {$IFDEF WIN32} Windows, {$ENDIF} YaccLib, LexLib, strip; const CONV_TO_INT = 1; CONV_TO_FLOAT = 2; CONV_TO_STRING = 3; SPECIAL_TRAP = 1; SPECIAL_SLEEP = 2; SPECIAL_WAIT = 3; SPECIAL_SIGNAL = 4; VARTYPE_FUNCTION = 1; VARTYPE_GLOBAL = 2; VARTYPE_LOCAL = 3; VARTYPE_PARAM = 4; VARTYPE_STATIC = 5; type Root = class lineNum : integer; fname : string; typ : integer; constructor Create(); end; Expr = class(Root) end; Expr_ConstInt = class(Expr) value : Integer; end; Expr_ConstFloat = class(Expr) value : Single; end; Expr_String = class(Expr) value : string; end; Expr_Neg = class(Expr) ex : Expr; end; Expr_Op = class(Expr) op : char; le, re : Expr; end; Expr_Seq = class(Expr) ex, seq : Expr; end; Expr_If = class(Expr) ce : Expr; le, re : Expr; lThen, lElse, lAfter : Integer; end; Expr_Id = class(Expr) id : string; end; Expr_Assign = class(Expr) id, ex : Expr; end; Expr_Asm = class(Expr) line : string; end; Expr_Func = class(Expr) id : string; displ : integer; body : Expr; lStart : integer; end; Expr_Return = class(Expr) id : string; ret : Expr; end; Expr_Call = class(Expr) id : string; params : Expr; end; Expr_External = class(Expr) id : string; assoc : string; end; Expr_Conv = class(expr) ex : Expr; cnv : integer; originaltyp : integer; end; Expr_Cast = class(expr) ex : Expr; desttype : integer; end; Expr_Special = class(Expr) spec : integer; ex : Expr; end; Expr_Loop = class(Expr) lStart : integer; init : Expr; ce : Expr; step : Expr; body : Expr; end; Expr_Rel = class(Expr) op : string; le, re : Expr; end; Expr_And = class(Expr) le, re : Expr; end; Expr_Or = class(Expr) le, re : Expr; end; Expr_Not = class(Expr) ex : Expr; end; Env_Entry = class(Root) id : string; lbl : integer; displ : integer; varTyp : integer; used : boolean; end; var labelNum : integer; globalCount : integer; tmp, varName, varGlob : string; curFunction : string; varType : integer; includeList : TStringList; environment : TList; f : textfile; procedure startCompiler(root : Expr); forward; procedure updateLabel(id : string; lbl : integer); forward; procedure addEnvironment(id : string; typ, lbl, varTyp : integer); forward; function lookupEnv(id : string; lookupCounts : boolean = false) : Env_Entry; forward; procedure compilerError(lineNum : integer; const fname, msg : string); forward; procedure compilerWarning(lineNum : integer; const fname, msg : string); forward; const IDENTIFIER = 257; const LINE = 258; const INT = 259; const FLOAT = 260; const UMINUS = 261; const ILLEGAL = 262; const _IF = 263; const _ELSE = 264; const _ASM = 265; const _TRUE = 266; const _FALSE = 267; const _AND = 268; const _OR = 269; const _NOT = 270; const _RELGT = 271; const _RELLT = 272; const _RELGTE = 273; const _RELLTE = 274; const _RELEQ = 275; const _RETURN = 276; const _BREAK = 277; const _CONTINUE = 278; const _DO = 279; const _SLEEP = 280; const _WAIT = 281; const _SIGNAL = 282; const _WHILE = 283; const _FOR = 284; const _REQUIRE = 285; const _EXPORT = 286; const _VOID = 287; const _INT = 288; const _FLOAT = 289; const _STRING = 290; const _EXTERNAL = 291; type YYSType = record case Integer of 1 : ( yyExpr : Expr ); 2 : ( yyInteger : Integer ); 3 : ( yyShortString : ShortString ); 4 : ( yySingle : Single ); end(*YYSType*); var yylval : YYSType; function yylex : Integer; forward; function yyparse : Integer; var yystate, yysp, yyn : Integer; yys : array [1..yymaxdepth] of Integer; yyv : array [1..yymaxdepth] of YYSType; yyval : YYSType; procedure yyaction ( yyruleno : Integer ); (* local definitions: *) begin (* actions: *) case yyruleno of 1 : begin end; 2 : begin yyaccept; end; 3 : begin startCompiler(yyv[yysp-0].yyExpr); end; 4 : begin yyerrok; end; 5 : begin yyval.yyExpr := nil; end; 6 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 7 : begin yyval.yyExpr := Expr_Seq.Create; Expr_Seq(yyval.yyExpr).seq := yyv[yysp-0].yyExpr; Expr_Seq(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 8 : begin yyval.yyExpr := nil; end; 9 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 10 : begin yyval.yyExpr := Expr_Seq.Create; Expr_Seq(yyval.yyExpr).seq := yyv[yysp-0].yyExpr; Expr_Seq(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 11 : begin yyval.yyExpr := nil; end; 12 : begin yyval.yyExpr := nil; end; 13 : begin yyval.yyExpr := nil; end; 14 : begin yyval.yyExpr := Expr_Return.Create; Expr_Return(yyval.yyExpr).ret := nil; Expr_Return(yyval.yyExpr).id := curFunction; end; 15 : begin yyval.yyExpr := Expr_Return.Create; Expr_Return(yyval.yyExpr).ret := yyv[yysp-1].yyExpr; Expr_Return(yyval.yyExpr).id := curFunction; end; 16 : begin yyval.yyExpr := Expr_Return.Create; Expr_Return(yyval.yyExpr).ret := yyv[yysp-2].yyExpr; Expr_Return(yyval.yyExpr).id := curFunction; end; 17 : begin yyval.yyExpr := nil; end; 18 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 19 : begin yyval.yyExpr := nil; lookupEnv(varName, true); end; 20 : begin yyval.yyExpr := nil; if (not FileExists(varName)) then compilerError(yylineno, yyfname, 'could not open include file ' + varName) else begin if (includeList.IndexOf(varName) > -1) then compilerWarning(yylineno, yyfname, 'ignoring previously included file ' + varName) else begin includeList.Add(varName); yyopen(varName); end; end; end; 21 : begin yyval.yyExpr := nil; end; 22 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; if (yyval.yyExpr <> nil) then yyval.yyExpr.lineNum := yylineno; end; 23 : begin yyval.yyExpr := yyv[yysp-1].yyExpr; if (yyval.yyExpr <> nil) then yyval.yyExpr.lineNum := yylineno; end; 24 : begin yyval.yyExpr := Expr_If.Create; Expr_If(yyval.yyExpr).ce := yyv[yysp-4].yyExpr; Expr_If(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_If(yyval.yyExpr).re := yyv[yysp-0].yyExpr; Expr_If(yyval.yyExpr).lThen := labelNum; inc(labelNum); Expr_If(yyval.yyExpr).lElse := labelNum; inc(labelNum); Expr_If(yyval.yyExpr).lAfter := labelNum; inc(labelNum); end; 25 : begin yyval.yyExpr := Expr_If.Create; Expr_If(yyval.yyExpr).ce := yyv[yysp-2].yyExpr; Expr_If(yyval.yyExpr).le := yyv[yysp-0].yyExpr; Expr_If(yyval.yyExpr).re := nil; Expr_If(yyval.yyExpr).lThen := labelNum; inc(labelNum); Expr_If(yyval.yyExpr).lAfter := labelNum; inc(labelNum); end; 26 : begin yyval.yyExpr := Expr_Loop.Create; Expr_Loop(yyval.yyExpr).init := yyv[yysp-6].yyExpr; Expr_Loop(yyval.yyExpr).ce := yyv[yysp-4].yyExpr; Expr_Loop(yyval.yyExpr).lStart := labelNum; inc(labelNum); Expr_Loop(yyval.yyExpr).step := yyv[yysp-2].yyExpr; Expr_Loop(yyval.yyExpr).body := yyv[yysp-0].yyExpr; end; 27 : begin yyval.yyExpr := Expr_Special.Create; Expr_Special(yyval.yyExpr).spec := SPECIAL_TRAP; Expr_Special(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 28 : begin yyval.yyExpr := Expr_Special.Create; Expr_Special(yyval.yyExpr).spec := SPECIAL_SLEEP; Expr_Special(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 29 : begin yyval.yyExpr := Expr_Special.Create; Expr_Special(yyval.yyExpr).spec := SPECIAL_WAIT; Expr_Special(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 30 : begin yyval.yyExpr := Expr_Special.Create; Expr_Special(yyval.yyExpr).spec := SPECIAL_SIGNAL; Expr_Special(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 31 : begin yyval.yyExpr := yyv[yysp-1].yyExpr; end; 32 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 33 : begin yyval.yyExpr := nil; end; 34 : begin yyval.yyExpr := nil; end; 35 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 36 : begin yyval.yyExpr := nil; end; 37 : begin yyval.yyExpr := nil; addEnvironment(curFunction + ':' + varName, varType, -1, VARTYPE_PARAM); end; 38 : begin yyval.yyExpr := nil; end; 39 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 40 : begin yyval.yyExpr := Expr_Seq.Create; Expr_Seq(yyval.yyExpr).seq := yyv[yysp-2].yyExpr; Expr_Seq(yyval.yyExpr).ex := yyv[yysp-0].yyExpr; end; 41 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 42 : begin yyval.yyExpr := Expr_Seq.Create; Expr_Seq(yyval.yyExpr).seq := yyv[yysp-0].yyExpr; Expr_Seq(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 43 : begin yyval.yyExpr := Expr_Asm.Create; Expr_Asm(yyval.yyExpr).line := varName; end; 44 : begin yyval.yyExpr := Expr_Seq.Create; Expr_Seq(yyval.yyExpr).seq := nil; Expr_Seq(yyval.yyExpr).ex := nil; end; 45 : begin yyval.yyExpr := yyv[yysp-1].yyExpr; end; 46 : begin yyval.yyExpr := nil; end; 47 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 48 : begin yyval.yyExpr := Expr_Seq.Create; Expr_Seq(yyval.yyExpr).seq := yyv[yysp-0].yyExpr; Expr_Seq(yyval.yyExpr).ex := yyv[yysp-1].yyExpr; end; 49 : begin curFunction := varName; yyval.yyExpr := Expr_Func.Create; Expr_Func(yyval.yyExpr).id := curFunction; Expr_Func(yyval.yyExpr).lStart := labelNum; inc(labelNum); addEnvironment(varName, varType, Expr_Func(yyval.yyExpr).lStart, VARTYPE_FUNCTION); end; 50 : begin yyval.yyExpr := nil; end; 51 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 52 : begin yyval.yyExpr := nil; end; 53 : begin yyval.yyExpr := yyv[yysp-4].yyExpr; Expr_Func(yyval.yyExpr).body := yyv[yysp-0].yyExpr; if (yyv[yysp-0].yyExpr = nil) then updateLabel(curFunction, -1); curFunction := ''; end; 54 : begin yyval := yyv[yysp-0]; end; 55 : begin yyval := yyv[yysp-2]; end; 56 : begin varName := curFunction + ':' + varName; yyval.yyShortString := varName; if (curFunction = '') then addEnvironment(varName, varType, -1, VARTYPE_GLOBAL) else addEnvironment(varName, varType, -1, VARTYPE_LOCAL); end; 57 : begin varType := _VOID; yyval.yyInteger := _VOID; end; 58 : begin varType := _INT; yyval.yyInteger := _INT; end; 59 : begin varType := _FLOAT; yyval.yyInteger := _FLOAT; end; 60 : begin varType := _STRING; yyval.yyInteger := _STRING; end; 61 : begin varType := _EXTERNAL; yyval.yyInteger := _EXTERNAL; end; 62 : begin yyval.yyExpr := nil; end; 63 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '+'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 64 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '-'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 65 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '*'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 66 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '/'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 67 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '%'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 68 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '&'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 69 : begin yyval.yyExpr := Expr_Op.Create; Expr_Op(yyval.yyExpr).op := '|'; Expr_Op(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Op(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 70 : begin yyval.yyExpr := yyv[yysp-1].yyExpr; end; 71 : begin yyval.yyExpr := Expr_Neg.Create; Expr_Neg(yyval.yyExpr).ex := yyv[yysp-0].yyExpr; end; 72 : begin yyval.yyExpr := Expr_ConstInt.Create; Expr_ConstInt(yyval.yyExpr).value := yyv[yysp-0].yyInteger; end; 73 : begin yyval.yyExpr := Expr_ConstFloat.Create; Expr_ConstFloat(yyval.yyExpr).value := yyv[yysp-0].yySingle; end; 74 : begin yyval.yyExpr := Expr_String.Create; Expr_String(yyval.yyExpr).value := ''; end; 75 : begin yyval.yyExpr := Expr_String.Create; Expr_String(yyval.yyExpr).value := varName; end; 76 : begin yyval.yyExpr := Expr_Cast.Create; Expr_Cast(yyval.yyExpr).ex := yyv[yysp-0].yyExpr; Expr_Cast(yyval.yyExpr).desttype := yyv[yysp-2].yyInteger; end; 77 : begin if (yyv[yysp-2].yyExpr <> nil) then begin yyval.yyExpr := Expr_Assign.Create; Expr_Assign(yyval.yyExpr).id := yyv[yysp-2].yyExpr; Expr_Assign(yyval.yyExpr).ex := yyv[yysp-0].yyExpr; end else yyval.yyExpr := nil; end; 78 : begin yyval.yyExpr := yyv[yysp-0].yyExpr; end; 79 : begin if (lookupEnv(yyv[yysp-3].yyShortString) = nil) then begin compilerError(yylineno, yyfname, 'undefined function "' + yyv[yysp-3].yyShortString + '"'); yyval.yyExpr := nil; yyabort; end; yyval.yyExpr := Expr_Call.Create; Expr_Call(yyval.yyExpr).id := yyv[yysp-3].yyShortString; Expr_Call(yyval.yyExpr).params := yyv[yysp-1].yyExpr; end; 80 : begin yyval.yyExpr := Expr_Rel.Create; Expr_Rel(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Rel(yyval.yyExpr).op := '>'; Expr_Rel(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 81 : begin yyval.yyExpr := Expr_Rel.Create; Expr_Rel(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Rel(yyval.yyExpr).op := '<'; Expr_Rel(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 82 : begin yyval.yyExpr := Expr_Rel.Create; Expr_Rel(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Rel(yyval.yyExpr).op := '>='; Expr_Rel(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 83 : begin yyval.yyExpr := Expr_Rel.Create; Expr_Rel(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Rel(yyval.yyExpr).op := '=<'; Expr_Rel(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 84 : begin yyval.yyExpr := Expr_Rel.Create; Expr_Rel(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Rel(yyval.yyExpr).op := '=='; Expr_Rel(yyval.yyExpr).re := yyv[yysp-0].yyExpr; end; 85 : begin yyval.yyExpr := Expr_And.Create; Expr_And(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_And(yyval.yyExpr).re := yyv[yysp-0].yyExpr; yyval.yyExpr.lineNum := yylineno; end; 86 : begin yyval.yyExpr := Expr_Or.Create; Expr_Or(yyval.yyExpr).le := yyv[yysp-2].yyExpr; Expr_Or(yyval.yyExpr).re := yyv[yysp-0].yyExpr; yyval.yyExpr.lineNum := yylineno; end; 87 : begin yyval.yyExpr := Expr_Not.Create; Expr_Not(yyval.yyExpr).ex := yyv[yysp-0].yyExpr; end; 88 : begin yyval.yyExpr := Expr_ConstInt.Create; Expr_ConstInt(yyval.yyExpr).value := 1; end; 89 : begin yyval.yyExpr := Expr_ConstInt.Create; Expr_ConstInt(yyval.yyExpr).value := 0; end; 90 : begin yyval.yyShortString := varName; end; 91 : begin varGlob := ':' + yyv[yysp-0].yyShortString; tmp := curFunction + varGlob; varGlob := left(varGlob, '.'); varName := left(tmp, '.'); if (varName <> tmp) then begin if (lookupEnv(varName) <> nil) then begin yyval.yyExpr := Expr_External.Create; Expr_External(yyval.yyExpr).id := varName; Expr_External(yyval.yyExpr).assoc := right(tmp, '.'); end else begin compilerError(yylineno, yyfname, 'undeclared identifier "' + right(varGlob, ':') + '"'); yyval.yyExpr := nil; yyabort; end; end else if (lookupEnv(varName) <> nil) then begin yyval.yyExpr := Expr_Id.Create; Expr_Id(yyval.yyExpr).id := varName; end else if (lookupEnv(varGlob) <> nil) then begin yyval.yyExpr := Expr_Id.Create; Expr_Id(yyval.yyExpr).id := varGlob; end else begin compilerError(yylineno, yyfname, 'undeclared identifier "' + right(varGlob, ':') + '"'); yyval.yyExpr := nil; yyabort; end; end; 92 : begin end; 93 : begin yyval.yyShortString := varName; end; 94 : begin yyval.yyShortString := yyv[yysp-2].yyShortString + '.' + varName; end; end; end(*yyaction*); (* parse table: *) type YYARec = record sym, act : Integer; end; YYRRec = record len, sym : Integer; end; const yynacts = 1771; yyngotos = 198; yynstates = 163; yynrules = 94; yya : array [1..yynacts] of YYARec = ( { 0: } ( sym: 256; act: 2 ), ( sym: 0; act: -1 ), ( sym: 10; act: -1 ), ( sym: 285; act: -1 ), ( sym: 286; act: -1 ), ( sym: 287; act: -1 ), ( sym: 288; act: -1 ), ( sym: 289; act: -1 ), ( sym: 290; act: -1 ), ( sym: 291; act: -1 ), { 1: } ( sym: 0; act: 0 ), ( sym: 10; act: 9 ), ( sym: 285; act: 10 ), ( sym: 286; act: 11 ), ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), { 2: } ( sym: 10; act: 17 ), { 3: } ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 0; act: -18 ), ( sym: 10; act: -18 ), ( sym: 285; act: -18 ), ( sym: 286; act: -18 ), { 4: } { 5: } ( sym: 285; act: 10 ), ( sym: 286; act: 11 ), ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 0; act: -3 ), ( sym: 10; act: -3 ), { 6: } { 7: } ( sym: 40; act: 20 ), { 8: } ( sym: 257; act: 23 ), { 9: } { 10: } ( sym: 34; act: 24 ), { 11: } ( sym: 257; act: 25 ), { 12: } { 13: } { 14: } { 15: } { 16: } { 17: } { 18: } { 19: } { 20: } ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 41; act: -34 ), ( sym: 44; act: -34 ), { 21: } ( sym: 44; act: 29 ), ( sym: 59; act: 30 ), { 22: } { 23: } ( sym: 40; act: -49 ), ( sym: 44; act: -56 ), ( sym: 59; act: -56 ), { 24: } ( sym: 258; act: 31 ), { 25: } { 26: } { 27: } ( sym: 41; act: 32 ), ( sym: 44; act: 33 ), { 28: } ( sym: 257; act: 34 ), { 29: } ( sym: 257; act: 36 ), { 30: } { 31: } ( sym: 34; act: 37 ), { 32: } ( sym: 59; act: 40 ), ( sym: 123; act: 41 ), { 33: } ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), { 34: } { 35: } { 36: } { 37: } { 38: } { 39: } { 40: } { 41: } ( sym: 125; act: 44 ), ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 34; act: -46 ), ( sym: 37; act: -46 ), ( sym: 38; act: -46 ), ( sym: 40; act: -46 ), ( sym: 42; act: -46 ), ( sym: 43; act: -46 ), ( sym: 45; act: -46 ), ( sym: 46; act: -46 ), ( sym: 47; act: -46 ), ( sym: 59; act: -46 ), ( sym: 61; act: -46 ), ( sym: 123; act: -46 ), ( sym: 124; act: -46 ), ( sym: 257; act: -46 ), ( sym: 259; act: -46 ), ( sym: 260; act: -46 ), ( sym: 263; act: -46 ), ( sym: 265; act: -46 ), ( sym: 266; act: -46 ), ( sym: 267; act: -46 ), ( sym: 268; act: -46 ), ( sym: 269; act: -46 ), ( sym: 270; act: -46 ), ( sym: 271; act: -46 ), ( sym: 272; act: -46 ), ( sym: 273; act: -46 ), ( sym: 274; act: -46 ), ( sym: 275; act: -46 ), ( sym: 276; act: -46 ), ( sym: 277; act: -46 ), ( sym: 278; act: -46 ), ( sym: 279; act: -46 ), ( sym: 280; act: -46 ), ( sym: 281; act: -46 ), ( sym: 282; act: -46 ), ( sym: 284; act: -46 ), { 42: } { 43: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 59; act: 56 ), ( sym: 123; act: 41 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 263; act: 60 ), ( sym: 265; act: 61 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 276; act: 65 ), ( sym: 277; act: 66 ), ( sym: 278; act: 67 ), ( sym: 279; act: 68 ), ( sym: 280; act: 69 ), ( sym: 281; act: 70 ), ( sym: 282; act: 71 ), ( sym: 284; act: 72 ), ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 37; act: -8 ), ( sym: 38; act: -8 ), ( sym: 42; act: -8 ), ( sym: 43; act: -8 ), ( sym: 46; act: -8 ), ( sym: 47; act: -8 ), ( sym: 61; act: -8 ), ( sym: 124; act: -8 ), ( sym: 125; act: -8 ), ( sym: 268; act: -8 ), ( sym: 269; act: -8 ), ( sym: 271; act: -8 ), ( sym: 272; act: -8 ), ( sym: 273; act: -8 ), ( sym: 274; act: -8 ), ( sym: 275; act: -8 ), { 44: } { 45: } ( sym: 46; act: 73 ), ( sym: 37; act: -91 ), ( sym: 38; act: -91 ), ( sym: 41; act: -91 ), ( sym: 42; act: -91 ), ( sym: 43; act: -91 ), ( sym: 44; act: -91 ), ( sym: 45; act: -91 ), ( sym: 47; act: -91 ), ( sym: 59; act: -91 ), ( sym: 61; act: -91 ), ( sym: 124; act: -91 ), ( sym: 268; act: -91 ), ( sym: 269; act: -91 ), ( sym: 271; act: -91 ), ( sym: 272; act: -91 ), ( sym: 273; act: -91 ), ( sym: 274; act: -91 ), ( sym: 275; act: -91 ), { 46: } ( sym: 40; act: 74 ), { 47: } ( sym: 61; act: 75 ), ( sym: 37; act: -78 ), ( sym: 38; act: -78 ), ( sym: 41; act: -78 ), ( sym: 42; act: -78 ), ( sym: 43; act: -78 ), ( sym: 44; act: -78 ), ( sym: 45; act: -78 ), ( sym: 47; act: -78 ), ( sym: 59; act: -78 ), ( sym: 124; act: -78 ), ( sym: 268; act: -78 ), ( sym: 269; act: -78 ), ( sym: 271; act: -78 ), ( sym: 272; act: -78 ), ( sym: 273; act: -78 ), ( sym: 274; act: -78 ), ( sym: 275; act: -78 ), { 48: } { 49: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 59; act: 56 ), ( sym: 123; act: 41 ), ( sym: 125; act: 77 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 263; act: 60 ), ( sym: 265; act: 61 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 276; act: 65 ), ( sym: 277; act: 66 ), ( sym: 278; act: 67 ), ( sym: 279; act: 68 ), ( sym: 280; act: 69 ), ( sym: 281; act: 70 ), ( sym: 282; act: 71 ), ( sym: 284; act: 72 ), ( sym: 37; act: -11 ), ( sym: 38; act: -11 ), ( sym: 42; act: -11 ), ( sym: 43; act: -11 ), ( sym: 46; act: -11 ), ( sym: 47; act: -11 ), ( sym: 61; act: -11 ), ( sym: 124; act: -11 ), ( sym: 268; act: -11 ), ( sym: 269; act: -11 ), ( sym: 271; act: -11 ), ( sym: 272; act: -11 ), ( sym: 273; act: -11 ), ( sym: 274; act: -11 ), ( sym: 275; act: -11 ), { 50: } { 51: } { 52: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 84 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 53: } ( sym: 34; act: 93 ), ( sym: 258; act: 94 ), { 54: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 55: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 56: } { 57: } ( sym: 40; act: -90 ), ( sym: 37; act: -93 ), ( sym: 38; act: -93 ), ( sym: 41; act: -93 ), ( sym: 42; act: -93 ), ( sym: 43; act: -93 ), ( sym: 44; act: -93 ), ( sym: 45; act: -93 ), ( sym: 46; act: -93 ), ( sym: 47; act: -93 ), ( sym: 59; act: -93 ), ( sym: 61; act: -93 ), ( sym: 124; act: -93 ), ( sym: 268; act: -93 ), ( sym: 269; act: -93 ), ( sym: 271; act: -93 ), ( sym: 272; act: -93 ), ( sym: 273; act: -93 ), ( sym: 274; act: -93 ), ( sym: 275; act: -93 ), { 58: } { 59: } { 60: } ( sym: 40; act: 98 ), { 61: } ( sym: 123; act: 99 ), { 62: } { 63: } { 64: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 65: } ( sym: 34; act: 53 ), ( sym: 40; act: 102 ), ( sym: 45; act: 55 ), ( sym: 59; act: 103 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 66: } ( sym: 59; act: 104 ), { 67: } ( sym: 59; act: 105 ), { 68: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 69: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 70: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 71: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 72: } ( sym: 40; act: 110 ), { 73: } ( sym: 257; act: 111 ), { 74: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 41; act: -38 ), ( sym: 44; act: -38 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 75: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 76: } { 77: } { 78: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 79: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 80: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 81: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 82: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 83: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 84: } { 85: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 86: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 87: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 88: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 89: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 90: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 91: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 92: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 93: } { 94: } ( sym: 34; act: 129 ), { 95: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 41; act: 130 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 96: } ( sym: 41; act: 131 ), { 97: } ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 37; act: -71 ), ( sym: 38; act: -71 ), ( sym: 41; act: -71 ), ( sym: 42; act: -71 ), ( sym: 43; act: -71 ), ( sym: 44; act: -71 ), ( sym: 45; act: -71 ), ( sym: 47; act: -71 ), ( sym: 59; act: -71 ), ( sym: 124; act: -71 ), { 98: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 99: } ( sym: 34; act: 135 ), { 100: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -87 ), ( sym: 44; act: -87 ), ( sym: 59; act: -87 ), { 101: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 136 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 102: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 287; act: 12 ), ( sym: 288; act: 13 ), ( sym: 289; act: 14 ), ( sym: 290; act: 15 ), ( sym: 291; act: 16 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 103: } { 104: } { 105: } { 106: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 138 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 107: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 139 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 108: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 140 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 109: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 141 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 110: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 111: } { 112: } ( sym: 41; act: 143 ), ( sym: 44; act: 144 ), { 113: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -39 ), ( sym: 44; act: -39 ), { 114: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -77 ), ( sym: 44; act: -77 ), ( sym: 59; act: -77 ), { 115: } ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 37; act: -67 ), ( sym: 38; act: -67 ), ( sym: 41; act: -67 ), ( sym: 42; act: -67 ), ( sym: 43; act: -67 ), ( sym: 44; act: -67 ), ( sym: 45; act: -67 ), ( sym: 47; act: -67 ), ( sym: 59; act: -67 ), ( sym: 124; act: -67 ), { 116: } ( sym: 37; act: 78 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 38; act: -68 ), ( sym: 41; act: -68 ), ( sym: 44; act: -68 ), ( sym: 59; act: -68 ), ( sym: 124; act: -68 ), { 117: } ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 37; act: -65 ), ( sym: 38; act: -65 ), ( sym: 41; act: -65 ), ( sym: 42; act: -65 ), ( sym: 43; act: -65 ), ( sym: 44; act: -65 ), ( sym: 45; act: -65 ), ( sym: 47; act: -65 ), ( sym: 59; act: -65 ), ( sym: 124; act: -65 ), { 118: } ( sym: 37; act: 78 ), ( sym: 42; act: 80 ), ( sym: 47; act: 83 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 38; act: -63 ), ( sym: 41; act: -63 ), ( sym: 43; act: -63 ), ( sym: 44; act: -63 ), ( sym: 45; act: -63 ), ( sym: 59; act: -63 ), ( sym: 124; act: -63 ), { 119: } ( sym: 37; act: 78 ), ( sym: 42; act: 80 ), ( sym: 47; act: 83 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 38; act: -64 ), ( sym: 41; act: -64 ), ( sym: 43; act: -64 ), ( sym: 44; act: -64 ), ( sym: 45; act: -64 ), ( sym: 59; act: -64 ), ( sym: 124; act: -64 ), { 120: } ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 37; act: -66 ), ( sym: 38; act: -66 ), ( sym: 41; act: -66 ), ( sym: 42; act: -66 ), ( sym: 43; act: -66 ), ( sym: 44; act: -66 ), ( sym: 45; act: -66 ), ( sym: 47; act: -66 ), ( sym: 59; act: -66 ), ( sym: 124; act: -66 ), { 121: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -69 ), ( sym: 44; act: -69 ), ( sym: 59; act: -69 ), ( sym: 124; act: -69 ), { 122: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -85 ), ( sym: 44; act: -85 ), ( sym: 59; act: -85 ), { 123: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -86 ), ( sym: 44; act: -86 ), ( sym: 59; act: -86 ), { 124: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -80 ), ( sym: 44; act: -80 ), ( sym: 59; act: -80 ), { 125: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -81 ), ( sym: 44; act: -81 ), ( sym: 59; act: -81 ), { 126: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -82 ), ( sym: 44; act: -82 ), ( sym: 59; act: -82 ), { 127: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -83 ), ( sym: 44; act: -83 ), ( sym: 59; act: -83 ), { 128: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -84 ), ( sym: 44; act: -84 ), ( sym: 59; act: -84 ), { 129: } { 130: } { 131: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 132: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 41; act: 146 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 133: } { 134: } ( sym: 34; act: 135 ), ( sym: 125; act: 148 ), { 135: } ( sym: 258; act: 149 ), { 136: } { 137: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 41; act: 150 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 138: } { 139: } { 140: } { 141: } { 142: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 151 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 143: } { 144: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 44; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 145: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -76 ), ( sym: 44; act: -76 ), ( sym: 59; act: -76 ), { 146: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 59; act: 56 ), ( sym: 123; act: 41 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 263; act: 60 ), ( sym: 265; act: 61 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 276; act: 65 ), ( sym: 277; act: 66 ), ( sym: 278; act: 67 ), ( sym: 279; act: 68 ), ( sym: 280; act: 69 ), ( sym: 281; act: 70 ), ( sym: 282; act: 71 ), ( sym: 284; act: 72 ), ( sym: 37; act: -11 ), ( sym: 38; act: -11 ), ( sym: 42; act: -11 ), ( sym: 43; act: -11 ), ( sym: 46; act: -11 ), ( sym: 47; act: -11 ), ( sym: 61; act: -11 ), ( sym: 124; act: -11 ), ( sym: 125; act: -11 ), ( sym: 264; act: -11 ), ( sym: 268; act: -11 ), ( sym: 269; act: -11 ), ( sym: 271; act: -11 ), ( sym: 272; act: -11 ), ( sym: 273; act: -11 ), ( sym: 274; act: -11 ), ( sym: 275; act: -11 ), { 147: } { 148: } { 149: } ( sym: 34; act: 154 ), { 150: } ( sym: 59; act: 155 ), ( sym: 37; act: -70 ), ( sym: 38; act: -70 ), ( sym: 42; act: -70 ), ( sym: 43; act: -70 ), ( sym: 45; act: -70 ), ( sym: 47; act: -70 ), ( sym: 124; act: -70 ), ( sym: 268; act: -70 ), ( sym: 269; act: -70 ), ( sym: 271; act: -70 ), ( sym: 272; act: -70 ), ( sym: 273; act: -70 ), ( sym: 274; act: -70 ), ( sym: 275; act: -70 ), { 151: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 59; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 152: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), ( sym: 41; act: -40 ), ( sym: 44; act: -40 ), { 153: } ( sym: 264; act: 157 ), ( sym: 34; act: -25 ), ( sym: 37; act: -25 ), ( sym: 38; act: -25 ), ( sym: 40; act: -25 ), ( sym: 42; act: -25 ), ( sym: 43; act: -25 ), ( sym: 45; act: -25 ), ( sym: 46; act: -25 ), ( sym: 47; act: -25 ), ( sym: 59; act: -25 ), ( sym: 61; act: -25 ), ( sym: 123; act: -25 ), ( sym: 124; act: -25 ), ( sym: 125; act: -25 ), ( sym: 257; act: -25 ), ( sym: 259; act: -25 ), ( sym: 260; act: -25 ), ( sym: 263; act: -25 ), ( sym: 265; act: -25 ), ( sym: 266; act: -25 ), ( sym: 267; act: -25 ), ( sym: 268; act: -25 ), ( sym: 269; act: -25 ), ( sym: 270; act: -25 ), ( sym: 271; act: -25 ), ( sym: 272; act: -25 ), ( sym: 273; act: -25 ), ( sym: 274; act: -25 ), ( sym: 275; act: -25 ), ( sym: 276; act: -25 ), ( sym: 277; act: -25 ), ( sym: 278; act: -25 ), ( sym: 279; act: -25 ), ( sym: 280; act: -25 ), ( sym: 281; act: -25 ), ( sym: 282; act: -25 ), ( sym: 284; act: -25 ), { 154: } { 155: } { 156: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 59; act: 158 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 157: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 59; act: 56 ), ( sym: 123; act: 41 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 263; act: 60 ), ( sym: 265; act: 61 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 276; act: 65 ), ( sym: 277; act: 66 ), ( sym: 278; act: 67 ), ( sym: 279; act: 68 ), ( sym: 280; act: 69 ), ( sym: 281; act: 70 ), ( sym: 282; act: 71 ), ( sym: 284; act: 72 ), ( sym: 37; act: -11 ), ( sym: 38; act: -11 ), ( sym: 42; act: -11 ), ( sym: 43; act: -11 ), ( sym: 46; act: -11 ), ( sym: 47; act: -11 ), ( sym: 61; act: -11 ), ( sym: 124; act: -11 ), ( sym: 125; act: -11 ), ( sym: 264; act: -11 ), ( sym: 268; act: -11 ), ( sym: 269; act: -11 ), ( sym: 271; act: -11 ), ( sym: 272; act: -11 ), ( sym: 273; act: -11 ), ( sym: 274; act: -11 ), ( sym: 275; act: -11 ), { 158: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 37; act: -62 ), ( sym: 38; act: -62 ), ( sym: 41; act: -62 ), ( sym: 42; act: -62 ), ( sym: 43; act: -62 ), ( sym: 47; act: -62 ), ( sym: 124; act: -62 ), ( sym: 268; act: -62 ), ( sym: 269; act: -62 ), ( sym: 271; act: -62 ), ( sym: 272; act: -62 ), ( sym: 273; act: -62 ), ( sym: 274; act: -62 ), ( sym: 275; act: -62 ), ( sym: 46; act: -92 ), ( sym: 61; act: -92 ), { 159: } { 160: } ( sym: 37; act: 78 ), ( sym: 38; act: 79 ), ( sym: 41; act: 161 ), ( sym: 42; act: 80 ), ( sym: 43; act: 81 ), ( sym: 45; act: 82 ), ( sym: 47; act: 83 ), ( sym: 124; act: 85 ), ( sym: 268; act: 86 ), ( sym: 269; act: 87 ), ( sym: 271; act: 88 ), ( sym: 272; act: 89 ), ( sym: 273; act: 90 ), ( sym: 274; act: 91 ), ( sym: 275; act: 92 ), { 161: } ( sym: 34; act: 53 ), ( sym: 40; act: 54 ), ( sym: 45; act: 55 ), ( sym: 59; act: 56 ), ( sym: 123; act: 41 ), ( sym: 257; act: 57 ), ( sym: 259; act: 58 ), ( sym: 260; act: 59 ), ( sym: 263; act: 60 ), ( sym: 265; act: 61 ), ( sym: 266; act: 62 ), ( sym: 267; act: 63 ), ( sym: 270; act: 64 ), ( sym: 276; act: 65 ), ( sym: 277; act: 66 ), ( sym: 278; act: 67 ), ( sym: 279; act: 68 ), ( sym: 280; act: 69 ), ( sym: 281; act: 70 ), ( sym: 282; act: 71 ), ( sym: 284; act: 72 ), ( sym: 37; act: -11 ), ( sym: 38; act: -11 ), ( sym: 42; act: -11 ), ( sym: 43; act: -11 ), ( sym: 46; act: -11 ), ( sym: 47; act: -11 ), ( sym: 61; act: -11 ), ( sym: 124; act: -11 ), ( sym: 125; act: -11 ), ( sym: 264; act: -11 ), ( sym: 268; act: -11 ), ( sym: 269; act: -11 ), ( sym: 271; act: -11 ), ( sym: 272; act: -11 ), ( sym: 273; act: -11 ), ( sym: 274; act: -11 ), ( sym: 275; act: -11 ) { 162: } ); yyg : array [1..yyngotos] of YYARec = ( { 0: } ( sym: -24; act: 1 ), { 1: } ( sym: -16; act: 3 ), ( sym: -15; act: 4 ), ( sym: -8; act: 5 ), ( sym: -7; act: 6 ), ( sym: -5; act: 7 ), ( sym: -2; act: 8 ), { 2: } { 3: } ( sym: -15; act: 18 ), ( sym: -5; act: 7 ), ( sym: -2; act: 8 ), { 4: } { 5: } ( sym: -16; act: 3 ), ( sym: -15; act: 4 ), ( sym: -7; act: 19 ), ( sym: -5; act: 7 ), ( sym: -2; act: 8 ), { 6: } { 7: } { 8: } ( sym: -25; act: 21 ), ( sym: -21; act: 22 ), { 9: } { 10: } { 11: } { 12: } { 13: } { 14: } { 15: } { 16: } { 17: } { 18: } { 19: } { 20: } ( sym: -12; act: 26 ), ( sym: -11; act: 27 ), ( sym: -2; act: 28 ), { 21: } { 22: } { 23: } { 24: } { 25: } { 26: } { 27: } { 28: } { 29: } ( sym: -21; act: 35 ), { 30: } { 31: } { 32: } ( sym: -14; act: 38 ), ( sym: -6; act: 39 ), { 33: } ( sym: -12; act: 42 ), ( sym: -2; act: 28 ), { 34: } { 35: } { 36: } { 37: } { 38: } { 39: } { 40: } { 41: } ( sym: -16; act: 43 ), ( sym: -15; act: 4 ), ( sym: -5; act: 7 ), ( sym: -2; act: 8 ), { 42: } { 43: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -15; act: 18 ), ( sym: -14; act: 48 ), ( sym: -10; act: 49 ), ( sym: -9; act: 50 ), ( sym: -5; act: 7 ), ( sym: -4; act: 51 ), ( sym: -3; act: 52 ), ( sym: -2; act: 8 ), { 44: } { 45: } { 46: } { 47: } { 48: } { 49: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -14; act: 48 ), ( sym: -9; act: 76 ), ( sym: -4; act: 51 ), ( sym: -3; act: 52 ), { 50: } { 51: } { 52: } { 53: } { 54: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 95 ), ( sym: -2; act: 96 ), { 55: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 97 ), { 56: } { 57: } { 58: } { 59: } { 60: } { 61: } { 62: } { 63: } { 64: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 100 ), { 65: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 101 ), { 66: } { 67: } { 68: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 106 ), { 69: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 107 ), { 70: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 108 ), { 71: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 109 ), { 72: } { 73: } { 74: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -13; act: 112 ), ( sym: -3; act: 113 ), { 75: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 114 ), { 76: } { 77: } { 78: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 115 ), { 79: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 116 ), { 80: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 117 ), { 81: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 118 ), { 82: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 119 ), { 83: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 120 ), { 84: } { 85: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 121 ), { 86: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 122 ), { 87: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 123 ), { 88: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 124 ), { 89: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 125 ), { 90: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 126 ), { 91: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 127 ), { 92: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 128 ), { 93: } { 94: } { 95: } { 96: } { 97: } { 98: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 132 ), { 99: } ( sym: -20; act: 133 ), ( sym: -19; act: 134 ), { 100: } { 101: } { 102: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 137 ), ( sym: -2; act: 96 ), { 103: } { 104: } { 105: } { 106: } { 107: } { 108: } { 109: } { 110: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 142 ), { 111: } { 112: } { 113: } { 114: } { 115: } { 116: } { 117: } { 118: } { 119: } { 120: } { 121: } { 122: } { 123: } { 124: } { 125: } { 126: } { 127: } { 128: } { 129: } { 130: } { 131: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 145 ), { 132: } { 133: } { 134: } ( sym: -20; act: 147 ), { 135: } { 136: } { 137: } { 138: } { 139: } { 140: } { 141: } { 142: } { 143: } { 144: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 152 ), { 145: } { 146: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -14; act: 48 ), ( sym: -9; act: 153 ), ( sym: -4; act: 51 ), ( sym: -3; act: 52 ), { 147: } { 148: } { 149: } { 150: } { 151: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 156 ), { 152: } { 153: } { 154: } { 155: } { 156: } { 157: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -14; act: 48 ), ( sym: -9; act: 159 ), ( sym: -4; act: 51 ), ( sym: -3; act: 52 ), { 158: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -3; act: 160 ), { 159: } { 160: } { 161: } ( sym: -23; act: 45 ), ( sym: -22; act: 46 ), ( sym: -18; act: 47 ), ( sym: -14; act: 48 ), ( sym: -9; act: 162 ), ( sym: -4; act: 51 ), ( sym: -3; act: 52 ) { 162: } ); yyd : array [0..yynstates-1] of Integer = ( { 0: } 0, { 1: } 0, { 2: } 0, { 3: } 0, { 4: } -47, { 5: } 0, { 6: } -6, { 7: } 0, { 8: } 0, { 9: } -2, { 10: } 0, { 11: } 0, { 12: } -57, { 13: } -58, { 14: } -59, { 15: } -60, { 16: } -61, { 17: } -4, { 18: } -48, { 19: } -7, { 20: } 0, { 21: } 0, { 22: } -54, { 23: } 0, { 24: } 0, { 25: } -19, { 26: } -35, { 27: } 0, { 28: } 0, { 29: } 0, { 30: } -52, { 31: } 0, { 32: } 0, { 33: } 0, { 34: } -37, { 35: } -55, { 36: } -56, { 37: } -20, { 38: } -51, { 39: } -53, { 40: } -50, { 41: } 0, { 42: } -36, { 43: } 0, { 44: } -44, { 45: } 0, { 46: } 0, { 47: } 0, { 48: } -22, { 49: } 0, { 50: } -9, { 51: } -32, { 52: } 0, { 53: } 0, { 54: } 0, { 55: } 0, { 56: } -33, { 57: } 0, { 58: } -72, { 59: } -73, { 60: } 0, { 61: } 0, { 62: } -88, { 63: } -89, { 64: } 0, { 65: } 0, { 66: } 0, { 67: } 0, { 68: } 0, { 69: } 0, { 70: } 0, { 71: } 0, { 72: } 0, { 73: } 0, { 74: } 0, { 75: } 0, { 76: } -10, { 77: } -45, { 78: } 0, { 79: } 0, { 80: } 0, { 81: } 0, { 82: } 0, { 83: } 0, { 84: } -23, { 85: } 0, { 86: } 0, { 87: } 0, { 88: } 0, { 89: } 0, { 90: } 0, { 91: } 0, { 92: } 0, { 93: } -74, { 94: } 0, { 95: } 0, { 96: } 0, { 97: } 0, { 98: } 0, { 99: } 0, { 100: } 0, { 101: } 0, { 102: } 0, { 103: } -14, { 104: } -12, { 105: } -13, { 106: } 0, { 107: } 0, { 108: } 0, { 109: } 0, { 110: } 0, { 111: } -94, { 112: } 0, { 113: } 0, { 114: } 0, { 115: } 0, { 116: } 0, { 117: } 0, { 118: } 0, { 119: } 0, { 120: } 0, { 121: } 0, { 122: } 0, { 123: } 0, { 124: } 0, { 125: } 0, { 126: } 0, { 127: } 0, { 128: } 0, { 129: } -75, { 130: } -70, { 131: } 0, { 132: } 0, { 133: } -41, { 134: } 0, { 135: } 0, { 136: } -15, { 137: } 0, { 138: } -27, { 139: } -28, { 140: } -29, { 141: } -30, { 142: } 0, { 143: } -79, { 144: } 0, { 145: } 0, { 146: } 0, { 147: } -42, { 148: } -31, { 149: } 0, { 150: } 0, { 151: } 0, { 152: } 0, { 153: } 0, { 154: } -43, { 155: } -16, { 156: } 0, { 157: } 0, { 158: } 0, { 159: } -24, { 160: } 0, { 161: } 0, { 162: } -26 ); yyal : array [0..yynstates-1] of Integer = ( { 0: } 1, { 1: } 11, { 2: } 20, { 3: } 21, { 4: } 30, { 5: } 30, { 6: } 39, { 7: } 39, { 8: } 40, { 9: } 41, { 10: } 41, { 11: } 42, { 12: } 43, { 13: } 43, { 14: } 43, { 15: } 43, { 16: } 43, { 17: } 43, { 18: } 43, { 19: } 43, { 20: } 43, { 21: } 50, { 22: } 52, { 23: } 52, { 24: } 55, { 25: } 56, { 26: } 56, { 27: } 56, { 28: } 58, { 29: } 59, { 30: } 60, { 31: } 60, { 32: } 61, { 33: } 63, { 34: } 68, { 35: } 68, { 36: } 68, { 37: } 68, { 38: } 68, { 39: } 68, { 40: } 68, { 41: } 68, { 42: } 110, { 43: } 110, { 44: } 152, { 45: } 152, { 46: } 171, { 47: } 172, { 48: } 190, { 49: } 190, { 50: } 227, { 51: } 227, { 52: } 227, { 53: } 242, { 54: } 244, { 55: } 274, { 56: } 301, { 57: } 301, { 58: } 321, { 59: } 321, { 60: } 321, { 61: } 322, { 62: } 323, { 63: } 323, { 64: } 323, { 65: } 350, { 66: } 375, { 67: } 376, { 68: } 377, { 69: } 402, { 70: } 427, { 71: } 452, { 72: } 477, { 73: } 478, { 74: } 479, { 75: } 505, { 76: } 532, { 77: } 532, { 78: } 532, { 79: } 559, { 80: } 586, { 81: } 613, { 82: } 640, { 83: } 667, { 84: } 694, { 85: } 694, { 86: } 721, { 87: } 748, { 88: } 775, { 89: } 802, { 90: } 829, { 91: } 856, { 92: } 883, { 93: } 910, { 94: } 910, { 95: } 911, { 96: } 926, { 97: } 927, { 98: } 944, { 99: } 969, { 100: } 970, { 101: } 987, { 102: } 1002, { 103: } 1032, { 104: } 1032, { 105: } 1032, { 106: } 1032, { 107: } 1047, { 108: } 1062, { 109: } 1077, { 110: } 1092, { 111: } 1117, { 112: } 1117, { 113: } 1119, { 114: } 1135, { 115: } 1152, { 116: } 1169, { 117: } 1186, { 118: } 1203, { 119: } 1220, { 120: } 1237, { 121: } 1254, { 122: } 1271, { 123: } 1288, { 124: } 1305, { 125: } 1322, { 126: } 1339, { 127: } 1356, { 128: } 1373, { 129: } 1390, { 130: } 1390, { 131: } 1390, { 132: } 1417, { 133: } 1432, { 134: } 1432, { 135: } 1434, { 136: } 1435, { 137: } 1435, { 138: } 1450, { 139: } 1450, { 140: } 1450, { 141: } 1450, { 142: } 1450, { 143: } 1465, { 144: } 1465, { 145: } 1491, { 146: } 1508, { 147: } 1546, { 148: } 1546, { 149: } 1546, { 150: } 1547, { 151: } 1562, { 152: } 1587, { 153: } 1603, { 154: } 1641, { 155: } 1641, { 156: } 1641, { 157: } 1656, { 158: } 1694, { 159: } 1719, { 160: } 1719, { 161: } 1734, { 162: } 1772 ); yyah : array [0..yynstates-1] of Integer = ( { 0: } 10, { 1: } 19, { 2: } 20, { 3: } 29, { 4: } 29, { 5: } 38, { 6: } 38, { 7: } 39, { 8: } 40, { 9: } 40, { 10: } 41, { 11: } 42, { 12: } 42, { 13: } 42, { 14: } 42, { 15: } 42, { 16: } 42, { 17: } 42, { 18: } 42, { 19: } 42, { 20: } 49, { 21: } 51, { 22: } 51, { 23: } 54, { 24: } 55, { 25: } 55, { 26: } 55, { 27: } 57, { 28: } 58, { 29: } 59, { 30: } 59, { 31: } 60, { 32: } 62, { 33: } 67, { 34: } 67, { 35: } 67, { 36: } 67, { 37: } 67, { 38: } 67, { 39: } 67, { 40: } 67, { 41: } 109, { 42: } 109, { 43: } 151, { 44: } 151, { 45: } 170, { 46: } 171, { 47: } 189, { 48: } 189, { 49: } 226, { 50: } 226, { 51: } 226, { 52: } 241, { 53: } 243, { 54: } 273, { 55: } 300, { 56: } 300, { 57: } 320, { 58: } 320, { 59: } 320, { 60: } 321, { 61: } 322, { 62: } 322, { 63: } 322, { 64: } 349, { 65: } 374, { 66: } 375, { 67: } 376, { 68: } 401, { 69: } 426, { 70: } 451, { 71: } 476, { 72: } 477, { 73: } 478, { 74: } 504, { 75: } 531, { 76: } 531, { 77: } 531, { 78: } 558, { 79: } 585, { 80: } 612, { 81: } 639, { 82: } 666, { 83: } 693, { 84: } 693, { 85: } 720, { 86: } 747, { 87: } 774, { 88: } 801, { 89: } 828, { 90: } 855, { 91: } 882, { 92: } 909, { 93: } 909, { 94: } 910, { 95: } 925, { 96: } 926, { 97: } 943, { 98: } 968, { 99: } 969, { 100: } 986, { 101: } 1001, { 102: } 1031, { 103: } 1031, { 104: } 1031, { 105: } 1031, { 106: } 1046, { 107: } 1061, { 108: } 1076, { 109: } 1091, { 110: } 1116, { 111: } 1116, { 112: } 1118, { 113: } 1134, { 114: } 1151, { 115: } 1168, { 116: } 1185, { 117: } 1202, { 118: } 1219, { 119: } 1236, { 120: } 1253, { 121: } 1270, { 122: } 1287, { 123: } 1304, { 124: } 1321, { 125: } 1338, { 126: } 1355, { 127: } 1372, { 128: } 1389, { 129: } 1389, { 130: } 1389, { 131: } 1416, { 132: } 1431, { 133: } 1431, { 134: } 1433, { 135: } 1434, { 136: } 1434, { 137: } 1449, { 138: } 1449, { 139: } 1449, { 140: } 1449, { 141: } 1449, { 142: } 1464, { 143: } 1464, { 144: } 1490, { 145: } 1507, { 146: } 1545, { 147: } 1545, { 148: } 1545, { 149: } 1546, { 150: } 1561, { 151: } 1586, { 152: } 1602, { 153: } 1640, { 154: } 1640, { 155: } 1640, { 156: } 1655, { 157: } 1693, { 158: } 1718, { 159: } 1718, { 160: } 1733, { 161: } 1771, { 162: } 1771 ); yygl : array [0..yynstates-1] of Integer = ( { 0: } 1, { 1: } 2, { 2: } 8, { 3: } 8, { 4: } 11, { 5: } 11, { 6: } 16, { 7: } 16, { 8: } 16, { 9: } 18, { 10: } 18, { 11: } 18, { 12: } 18, { 13: } 18, { 14: } 18, { 15: } 18, { 16: } 18, { 17: } 18, { 18: } 18, { 19: } 18, { 20: } 18, { 21: } 21, { 22: } 21, { 23: } 21, { 24: } 21, { 25: } 21, { 26: } 21, { 27: } 21, { 28: } 21, { 29: } 21, { 30: } 22, { 31: } 22, { 32: } 22, { 33: } 24, { 34: } 26, { 35: } 26, { 36: } 26, { 37: } 26, { 38: } 26, { 39: } 26, { 40: } 26, { 41: } 26, { 42: } 30, { 43: } 30, { 44: } 41, { 45: } 41, { 46: } 41, { 47: } 41, { 48: } 41, { 49: } 41, { 50: } 48, { 51: } 48, { 52: } 48, { 53: } 48, { 54: } 48, { 55: } 53, { 56: } 57, { 57: } 57, { 58: } 57, { 59: } 57, { 60: } 57, { 61: } 57, { 62: } 57, { 63: } 57, { 64: } 57, { 65: } 61, { 66: } 65, { 67: } 65, { 68: } 65, { 69: } 69, { 70: } 73, { 71: } 77, { 72: } 81, { 73: } 81, { 74: } 81, { 75: } 86, { 76: } 90, { 77: } 90, { 78: } 90, { 79: } 94, { 80: } 98, { 81: } 102, { 82: } 106, { 83: } 110, { 84: } 114, { 85: } 114, { 86: } 118, { 87: } 122, { 88: } 126, { 89: } 130, { 90: } 134, { 91: } 138, { 92: } 142, { 93: } 146, { 94: } 146, { 95: } 146, { 96: } 146, { 97: } 146, { 98: } 146, { 99: } 150, { 100: } 152, { 101: } 152, { 102: } 152, { 103: } 157, { 104: } 157, { 105: } 157, { 106: } 157, { 107: } 157, { 108: } 157, { 109: } 157, { 110: } 157, { 111: } 161, { 112: } 161, { 113: } 161, { 114: } 161, { 115: } 161, { 116: } 161, { 117: } 161, { 118: } 161, { 119: } 161, { 120: } 161, { 121: } 161, { 122: } 161, { 123: } 161, { 124: } 161, { 125: } 161, { 126: } 161, { 127: } 161, { 128: } 161, { 129: } 161, { 130: } 161, { 131: } 161, { 132: } 165, { 133: } 165, { 134: } 165, { 135: } 166, { 136: } 166, { 137: } 166, { 138: } 166, { 139: } 166, { 140: } 166, { 141: } 166, { 142: } 166, { 143: } 166, { 144: } 166, { 145: } 170, { 146: } 170, { 147: } 177, { 148: } 177, { 149: } 177, { 150: } 177, { 151: } 177, { 152: } 181, { 153: } 181, { 154: } 181, { 155: } 181, { 156: } 181, { 157: } 181, { 158: } 188, { 159: } 192, { 160: } 192, { 161: } 192, { 162: } 199 ); yygh : array [0..yynstates-1] of Integer = ( { 0: } 1, { 1: } 7, { 2: } 7, { 3: } 10, { 4: } 10, { 5: } 15, { 6: } 15, { 7: } 15, { 8: } 17, { 9: } 17, { 10: } 17, { 11: } 17, { 12: } 17, { 13: } 17, { 14: } 17, { 15: } 17, { 16: } 17, { 17: } 17, { 18: } 17, { 19: } 17, { 20: } 20, { 21: } 20, { 22: } 20, { 23: } 20, { 24: } 20, { 25: } 20, { 26: } 20, { 27: } 20, { 28: } 20, { 29: } 21, { 30: } 21, { 31: } 21, { 32: } 23, { 33: } 25, { 34: } 25, { 35: } 25, { 36: } 25, { 37: } 25, { 38: } 25, { 39: } 25, { 40: } 25, { 41: } 29, { 42: } 29, { 43: } 40, { 44: } 40, { 45: } 40, { 46: } 40, { 47: } 40, { 48: } 40, { 49: } 47, { 50: } 47, { 51: } 47, { 52: } 47, { 53: } 47, { 54: } 52, { 55: } 56, { 56: } 56, { 57: } 56, { 58: } 56, { 59: } 56, { 60: } 56, { 61: } 56, { 62: } 56, { 63: } 56, { 64: } 60, { 65: } 64, { 66: } 64, { 67: } 64, { 68: } 68, { 69: } 72, { 70: } 76, { 71: } 80, { 72: } 80, { 73: } 80, { 74: } 85, { 75: } 89, { 76: } 89, { 77: } 89, { 78: } 93, { 79: } 97, { 80: } 101, { 81: } 105, { 82: } 109, { 83: } 113, { 84: } 113, { 85: } 117, { 86: } 121, { 87: } 125, { 88: } 129, { 89: } 133, { 90: } 137, { 91: } 141, { 92: } 145, { 93: } 145, { 94: } 145, { 95: } 145, { 96: } 145, { 97: } 145, { 98: } 149, { 99: } 151, { 100: } 151, { 101: } 151, { 102: } 156, { 103: } 156, { 104: } 156, { 105: } 156, { 106: } 156, { 107: } 156, { 108: } 156, { 109: } 156, { 110: } 160, { 111: } 160, { 112: } 160, { 113: } 160, { 114: } 160, { 115: } 160, { 116: } 160, { 117: } 160, { 118: } 160, { 119: } 160, { 120: } 160, { 121: } 160, { 122: } 160, { 123: } 160, { 124: } 160, { 125: } 160, { 126: } 160, { 127: } 160, { 128: } 160, { 129: } 160, { 130: } 160, { 131: } 164, { 132: } 164, { 133: } 164, { 134: } 165, { 135: } 165, { 136: } 165, { 137: } 165, { 138: } 165, { 139: } 165, { 140: } 165, { 141: } 165, { 142: } 165, { 143: } 165, { 144: } 169, { 145: } 169, { 146: } 176, { 147: } 176, { 148: } 176, { 149: } 176, { 150: } 176, { 151: } 180, { 152: } 180, { 153: } 180, { 154: } 180, { 155: } 180, { 156: } 180, { 157: } 187, { 158: } 191, { 159: } 191, { 160: } 191, { 161: } 198, { 162: } 198 ); yyr : array [1..yynrules] of YYRRec = ( { 1: } ( len: 0; sym: -24 ), { 2: } ( len: 2; sym: -24 ), { 3: } ( len: 2; sym: -24 ), { 4: } ( len: 2; sym: -24 ), { 5: } ( len: 0; sym: -8 ), { 6: } ( len: 1; sym: -8 ), { 7: } ( len: 2; sym: -8 ), { 8: } ( len: 0; sym: -10 ), { 9: } ( len: 1; sym: -10 ), { 10: } ( len: 2; sym: -10 ), { 11: } ( len: 0; sym: -4 ), { 12: } ( len: 2; sym: -4 ), { 13: } ( len: 2; sym: -4 ), { 14: } ( len: 2; sym: -4 ), { 15: } ( len: 3; sym: -4 ), { 16: } ( len: 5; sym: -4 ), { 17: } ( len: 0; sym: -7 ), { 18: } ( len: 1; sym: -7 ), { 19: } ( len: 2; sym: -7 ), { 20: } ( len: 4; sym: -7 ), { 21: } ( len: 0; sym: -9 ), { 22: } ( len: 1; sym: -9 ), { 23: } ( len: 2; sym: -9 ), { 24: } ( len: 7; sym: -9 ), { 25: } ( len: 5; sym: -9 ), { 26: } ( len: 9; sym: -9 ), { 27: } ( len: 3; sym: -9 ), { 28: } ( len: 3; sym: -9 ), { 29: } ( len: 3; sym: -9 ), { 30: } ( len: 3; sym: -9 ), { 31: } ( len: 4; sym: -9 ), { 32: } ( len: 1; sym: -9 ), { 33: } ( len: 1; sym: -9 ), { 34: } ( len: 0; sym: -11 ), { 35: } ( len: 1; sym: -11 ), { 36: } ( len: 3; sym: -11 ), { 37: } ( len: 2; sym: -12 ), { 38: } ( len: 0; sym: -13 ), { 39: } ( len: 1; sym: -13 ), { 40: } ( len: 3; sym: -13 ), { 41: } ( len: 1; sym: -19 ), { 42: } ( len: 2; sym: -19 ), { 43: } ( len: 3; sym: -20 ), { 44: } ( len: 2; sym: -14 ), { 45: } ( len: 4; sym: -14 ), { 46: } ( len: 0; sym: -16 ), { 47: } ( len: 1; sym: -16 ), { 48: } ( len: 2; sym: -16 ), { 49: } ( len: 2; sym: -5 ), { 50: } ( len: 1; sym: -6 ), { 51: } ( len: 1; sym: -6 ), { 52: } ( len: 3; sym: -15 ), { 53: } ( len: 5; sym: -15 ), { 54: } ( len: 1; sym: -25 ), { 55: } ( len: 3; sym: -25 ), { 56: } ( len: 1; sym: -21 ), { 57: } ( len: 1; sym: -2 ), { 58: } ( len: 1; sym: -2 ), { 59: } ( len: 1; sym: -2 ), { 60: } ( len: 1; sym: -2 ), { 61: } ( len: 1; sym: -2 ), { 62: } ( len: 0; sym: -3 ), { 63: } ( len: 3; sym: -3 ), { 64: } ( len: 3; sym: -3 ), { 65: } ( len: 3; sym: -3 ), { 66: } ( len: 3; sym: -3 ), { 67: } ( len: 3; sym: -3 ), { 68: } ( len: 3; sym: -3 ), { 69: } ( len: 3; sym: -3 ), { 70: } ( len: 3; sym: -3 ), { 71: } ( len: 2; sym: -3 ), { 72: } ( len: 1; sym: -3 ), { 73: } ( len: 1; sym: -3 ), { 74: } ( len: 2; sym: -3 ), { 75: } ( len: 3; sym: -3 ), { 76: } ( len: 4; sym: -3 ), { 77: } ( len: 3; sym: -3 ), { 78: } ( len: 1; sym: -3 ), { 79: } ( len: 4; sym: -3 ), { 80: } ( len: 3; sym: -3 ), { 81: } ( len: 3; sym: -3 ), { 82: } ( len: 3; sym: -3 ), { 83: } ( len: 3; sym: -3 ), { 84: } ( len: 3; sym: -3 ), { 85: } ( len: 3; sym: -3 ), { 86: } ( len: 3; sym: -3 ), { 87: } ( len: 2; sym: -3 ), { 88: } ( len: 1; sym: -3 ), { 89: } ( len: 1; sym: -3 ), { 90: } ( len: 1; sym: -22 ), { 91: } ( len: 1; sym: -18 ), { 92: } ( len: 0; sym: -23 ), { 93: } ( len: 1; sym: -23 ), { 94: } ( len: 3; sym: -23 ) ); const _error = 256; (* error token *) function yyact(state, sym : Integer; var act : Integer) : Boolean; (* search action table *) var k : Integer; begin k := yyal[state]; while (k<=yyah[state]) and (yya[k].sym<>sym) do inc(k); if k>yyah[state] then yyact := false else begin act := yya[k].act; yyact := true; end; end(*yyact*); function yygoto(state, sym : Integer; var nstate : Integer) : Boolean; (* search goto table *) var k : Integer; begin k := yygl[state]; while (k<=yygh[state]) and (yyg[k].sym<>sym) do inc(k); if k>yygh[state] then yygoto := false else begin nstate := yyg[k].act; yygoto := true; end; end(*yygoto*); label parse, next, error, errlab, shift, reduce, accept, abort; begin(*yyparse*) (* initialize: *) yystate := 0; yychar := -1; yynerrs := 0; yyerrflag := 0; yysp := 0; {$ifdef yydebug} yydebug := true; {$else} yydebug := false; {$endif} parse: (* push state and value: *) inc(yysp); if yysp>yymaxdepth then begin yyerror('yyparse stack overflow'); goto abort; end; yys[yysp] := yystate; yyv[yysp] := yyval; next: if (yyd[yystate]=0) and (yychar=-1) then (* get next symbol *) begin yychar := yylex; if yychar<0 then yychar := 0; end; if yydebug then writeln('state ', yystate, ', char ', yychar); (* determine parse action: *) yyn := yyd[yystate]; if yyn<>0 then goto reduce; (* simple state *) (* no default action; search parse table *) if not yyact(yystate, yychar, yyn) then goto error else if yyn>0 then goto shift else if yyn<0 then goto reduce else goto accept; error: (* error; start error recovery: *) if yyerrflag=0 then yyerror('syntax error'); errlab: if yyerrflag=0 then inc(yynerrs); (* new error *) if yyerrflag<=2 then (* incomplete recovery; try again *) begin yyerrflag := 3; (* uncover a state with shift action on error token *) while (yysp>0) and not ( yyact(yys[yysp], _error, yyn) and (yyn>0) ) do begin if yydebug then if yysp>1 then writeln('error recovery pops state ', yys[yysp], ', uncovers ', yys[yysp-1]) else writeln('error recovery fails ... abort'); dec(yysp); end; if yysp=0 then goto abort; (* parser has fallen from stack; abort *) yystate := yyn; (* simulate shift on error *) goto parse; end else (* no shift yet; discard symbol *) begin if yydebug then writeln('error recovery discards char ', yychar); if yychar=0 then goto abort; (* end of input; abort *) yychar := -1; goto next; (* clear lookahead char and try again *) end; shift: (* go to new state, clear lookahead character: *) yystate := yyn; yychar := -1; yyval := yylval; if yyerrflag>0 then dec(yyerrflag); goto parse; reduce: (* execute action, pop rule from stack, and go to next state: *) if yydebug then writeln('reduce ', -yyn); yyflag := yyfnone; yyaction(-yyn); dec(yysp, yyr[-yyn].len); if yygoto(yys[yysp], yyr[-yyn].sym, yyn) then yystate := yyn; (* handle action calls to yyaccept, yyabort and yyerror: *) case yyflag of yyfaccept : goto accept; yyfabort : goto abort; yyferror : goto errlab; end; goto parse; accept: yyparse := 0; exit; abort: yyparse := 1; exit; end(*yyparse*); {$I gmclex.pas} var output : textfile; function typeExpr(expr : Expr) : Expr; forward; function optimizeExpr(expr : Expr) : Expr; forward; procedure showExpr(expr : Expr); forward; function typeToString(typ : integer) : string; forward; constructor Root.Create(); begin inherited Create(); lineNum := yylineno; fname := yyfname; end; procedure emit(line : string); begin writeln(output, line); end; procedure compilerError(lineNum : integer; const fname, msg : string); begin writeln('error (line ', lineNum, ', file ', fname, '): ', msg); yyerrors := true; end; procedure compilerWarning(lineNum : integer; const fname, msg : string); begin writeln('warning (line ', lineNum, ', file ', fname, '): ', msg); end; procedure updateLabel(id : string; lbl : integer); var a : integer; e : Env_Entry; begin for a := 0 to environment.count - 1 do begin e := environment[a]; if (e.id = id) then begin e.lbl := lbl; break; end; end; end; procedure addEnvironment(id : string; typ, lbl, varTyp : integer); var e : Env_Entry; begin if (lookupEnv(id) <> nil) then begin compilerError(yylineno, yyfname, 'identifier redeclared'); exit; end; e := Env_Entry.Create; e.id := id; e.typ := typ; e.lbl := lbl; e.varTyp := varTyp; e.used := false; e.lineNum := yylineno; e.fname := yyfname; if (varTyp = VARTYPE_GLOBAL) then begin e.displ := globalCount; inc(globalCount); end else e.displ := 0; environment.add(e); end; function lookupEnv(id : string; lookupCounts : boolean = false) : Env_Entry; var a : integer; e : Env_Entry; begin Result := nil; for a := 0 to environment.count - 1 do begin e := environment[a]; if (e.id = id) then begin if (lookupCounts) then e.used := true; Result := e; break; end; end; end; function typeToString(typ : integer) : string; begin case typ of _INT : Result := 'int'; _STRING : Result := 'string'; _FLOAT : Result := 'float'; _VOID : Result := 'void'; _EXTERNAL : Result := 'external'; else Result := 'unknown (' + IntToStr(typ) + ')'; end; end; function cleanIdentifier(const id : string) : string; begin Result := right(id, ':'); end; function reportEnvEntry(e : Env_Entry) : string; var typ : string; begin case e.varTyp of VARTYPE_LOCAL: typ := 'local variable'; VARTYPE_GLOBAL: typ := 'global variable'; VARTYPE_PARAM: typ := 'parameter'; VARTYPE_FUNCTION: typ := 'function'; VARTYPE_STATIC: typ := 'static variabel'; end; Result := typ + ' "' + cleanIdentifier(e.id) + '"'; end; function coerce(expr : Expr; src, dest: integer) : Expr; var cn : Expr_Conv; begin if ((src = _INT) or (src = _EXTERNAL)) and (dest = _FLOAT) then begin cn := Expr_Conv.Create; cn.ex := expr; cn.cnv := CONV_TO_FLOAT; cn.originaltyp := src; cn.typ := _FLOAT; Result := cn; end else if ((src = _INT) or (src = _FLOAT) or (src = _EXTERNAL)) and (dest = _STRING) then begin cn := Expr_Conv.Create; cn.ex := expr; cn.cnv := CONV_TO_STRING; cn.originaltyp := src; cn.typ := _STRING; Result := cn; end else begin compilerError(expr.lineNum, expr.fname, 'no appropriate conversion from ''' + typeToString(src) + ''' to ''' + typeToString(dest) + ''''); Result := expr; end; end; function typeExpr(expr : Expr) : Expr; var t1, t2 : integer; begin Result := expr; if (expr = nil) then exit; Result.typ := _VOID; if (expr is Expr_Op) then begin Expr_Op(expr).le := typeExpr(Expr_Op(expr).le); Expr_Op(expr).re := typeExpr(Expr_Op(expr).re); t1 := Expr_Op(expr).le.typ; t2 := Expr_Op(expr).re.typ; if (t1 <> t2) and (t1 <> _EXTERNAL) and (t2 <> _EXTERNAL) then Expr_Op(expr).re := coerce(Expr_Op(expr).re, t2, t1); expr.typ := t1; end else if (expr is Expr_Func) then begin Expr_Func(expr).body := typeExpr(Expr_Func(expr).body); expr.typ := lookupEnv(Expr_Func(expr).id).typ; end else if (expr is Expr_Return) then begin t1 := lookupEnv(Expr_Func(expr).id, true).typ; if (t1 = _VOID) then begin if (Expr_Return(expr).ret <> nil) then compilerError(expr.lineNum, expr.fname, 'can not assign return value to void function'); end else begin Expr_Return(expr).ret := typeExpr(Expr_Return(expr).ret); t2 := Expr_Return(expr).ret.typ; if (t1 <> t2) and (t1 <> _EXTERNAL) and (t2 <> _EXTERNAL) then Expr_Return(expr).ret := coerce(Expr_Return(expr).ret, t2, t1); end; end else if (expr is Expr_Call) then begin Expr_Call(expr).params := typeExpr(Expr_Call(expr).params); t1 := lookupEnv(Expr_Call(expr).id, true).typ; if (t1 <> -1) then expr.typ := t1 else expr.typ := _VOID; end else if (expr is Expr_ConstInt) then expr.typ := _INT else if (expr is Expr_ConstFloat) then expr.typ := _FLOAT else if (expr is Expr_External) then expr.typ := _EXTERNAL else if (expr is Expr_String) then expr.typ := _STRING else if (expr is Expr_Id) then begin t1 := lookupEnv(Expr_Id(expr).id, true).typ; if (t1 <> -1) then expr.typ := t1 else expr.typ := _VOID; end else if (expr is Expr_If) then begin Expr_If(expr).ce := typeExpr(Expr_If(expr).ce); Expr_If(expr).le := typeExpr(Expr_If(expr).le); Expr_If(expr).re := typeExpr(Expr_If(expr).re); expr.typ := _VOID; end else if (expr is Expr_Seq) then begin Expr_Seq(expr).ex := typeExpr(Expr_Seq(expr).ex); Expr_Seq(expr).seq := typeExpr(Expr_Seq(expr).seq); expr.typ := _VOID; end else if (expr is Expr_Assign) then begin Expr_Assign(expr).id := typeExpr(Expr_Assign(expr).id); Expr_Assign(expr).ex := typeExpr(Expr_Assign(expr).ex); t1 := Expr_Assign(expr).id.typ; t2 := Expr_Assign(expr).ex.typ; if (t1 <> t2) and (t1 <> _EXTERNAL) and (t2 <> _EXTERNAL) then Expr_Assign(expr).ex := coerce(Expr_Assign(expr).ex, t2, t1); expr.typ := _VOID; end else if (expr is Expr_Special) then begin Expr_Special(expr).ex := typeExpr(Expr_Special(expr).ex); expr.typ := Expr_Special(expr).ex.typ; end else if (expr is Expr_Loop) then begin Expr_Loop(expr).init := typeExpr(Expr_Loop(expr).init); Expr_Loop(expr).ce := typeExpr(Expr_Loop(expr).ce); Expr_Loop(expr).step := typeExpr(Expr_Loop(expr).step); Expr_Loop(expr).body := typeExpr(Expr_Loop(expr).body); end else if (expr is Expr_Cast) then begin Expr_Cast(expr).ex := typeExpr(Expr_Cast(expr).ex); t1 := Expr_Cast(expr).ex.typ; Result := coerce(Expr_Cast(expr).ex, t1, Expr_Cast(expr).desttype); Expr_Cast(expr).Free; end else if (expr is Expr_Rel) then begin Expr_Rel(expr).le := typeExpr(Expr_Rel(expr).le); Expr_Rel(expr).re := typeExpr(Expr_Rel(expr).re); t1 := Expr_Rel(expr).le.typ; t2 := Expr_Rel(expr).re.typ; if (t1 <> t2) and (t1 <> _EXTERNAL) and (t2 <> _EXTERNAL) then compilerError(expr.lineNum, expr.fname, 'no appropriate conversion from ''' + typeToString(t1) + ''' to ''' + typeToString(t2) + ''''); expr.typ := _INT; end else if (expr is Expr_Not) then begin Expr_Not(expr).ex := typeExpr(Expr_Not(expr).ex); t1 := Expr_Not(expr).ex.typ; if (t1 <> _INT) then compilerError(expr.lineNum, expr.fname, 'impossible to negate non-integer value'); expr.typ := _INT; end else if (expr is Expr_And) then begin Expr_And(expr).le := typeExpr(Expr_And(expr).le); Expr_And(expr).re := typeExpr(Expr_And(expr).re); t1 := Expr_And(expr).le.typ; t2 := Expr_And(expr).re.typ; if (t1 <> _INT) or (t2 <> _INT) then compilerError(expr.lineNum, expr.fname, 'impossible to and non-integer value'); expr.typ := _INT; end else if (expr is Expr_Or) then begin Expr_Or(expr).le := typeExpr(Expr_Or(expr).le); Expr_Or(expr).re := typeExpr(Expr_Or(expr).re); t1 := Expr_Or(expr).le.typ; t2 := Expr_Or(expr).re.typ; if (t1 <> _INT) or (t2 <> _INT) then compilerError(expr.lineNum, expr.fname, 'impossible to or non-integer value'); expr.typ := _INT; end; end; function optimizeExpr(expr : Expr) : Expr; var bval, lval, rval : integer; begin Result := expr; if (expr = nil) then exit; if (expr is Expr_Op) then begin Expr_Op(expr).le := optimizeExpr(Expr_Op(expr).le); Expr_Op(expr).re := optimizeExpr(Expr_Op(expr).re); if (Expr_Op(expr).le is Expr_ConstInt) and (Expr_Op(expr).re is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_Op(expr).le).value; rval := Expr_ConstInt(Expr_Op(expr).re).value; case Expr_Op(expr).op of '+': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval + rval; end; '-': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval - rval; end; '*': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval * rval; end; '/': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval div rval; end; '%': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval mod rval; end; '&': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval and rval; end; '|': begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval or rval; end; end; Expr_Op(expr).le.Free; Expr_Op(expr).re.Free; expr.Free; end; end else if (expr is Expr_Seq) then begin Expr_Seq(expr).ex := optimizeExpr(Expr_Seq(expr).ex); Expr_Seq(expr).seq := optimizeExpr(Expr_Seq(expr).seq); end else if (expr is Expr_Func) then begin if (not lookupEnv(Expr_Func(expr).id).used) then begin Result := nil; exit; end; Expr_Func(expr).body := optimizeExpr(Expr_Func(expr).body); end else if (expr is Expr_Return) then begin Expr_Return(expr).ret := optimizeExpr(Expr_Return(expr).ret); end else if (expr is Expr_Assign) then begin Expr_Assign(expr).ex := optimizeExpr(Expr_Assign(expr).ex); end else if (expr is Expr_Call) then begin Expr_Call(expr).params := optimizeExpr(Expr_Call(expr).params); end else if (expr is Expr_Conv) then begin Expr_Conv(expr).ex := optimizeExpr(Expr_Conv(expr).ex); case Expr_Conv(expr).cnv of CONV_TO_FLOAT : if (Expr_Conv(expr).ex is Expr_ConstInt) then begin Result := Expr_ConstFloat.Create; Expr_ConstFloat(Result).value := Expr_ConstInt(Expr_Conv(expr).ex).value; Expr_Conv(expr).ex.Free; expr.Free; end; CONV_TO_INT : if (Expr_Conv(expr).ex is Expr_ConstFloat) then begin Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := trunc(Expr_ConstFloat(Expr_Conv(expr).ex).value); Expr_Conv(expr).ex.Free; expr.Free; end; end; end else if (expr is Expr_If) then begin Expr_If(expr).ce := optimizeExpr(Expr_If(expr).ce); if (Expr_If(expr).ce is Expr_ConstInt) then begin bval := Expr_ConstInt(Expr_If(expr).ce).value; if (bval = 1) then Result := Expr_If(expr).le else Result := Expr_If(expr).re; end; end else if (expr is Expr_Loop) then begin Expr_Loop(expr).init := optimizeExpr(Expr_Loop(expr).init); Expr_Loop(expr).ce := optimizeExpr(Expr_Loop(expr).ce); Expr_Loop(expr).step := optimizeExpr(Expr_Loop(expr).step); Expr_Loop(expr).body := optimizeExpr(Expr_Loop(expr).body); end else if (expr is Expr_Rel) then begin Expr_Rel(expr).le := optimizeExpr(Expr_Rel(expr).le); Expr_Rel(expr).re := optimizeExpr(Expr_Rel(expr).re); end else if (expr is Expr_And) then begin Expr_And(expr).le := optimizeExpr(Expr_And(expr).le); Expr_And(expr).re := optimizeExpr(Expr_And(expr).re); if (Expr_And(expr).le is Expr_ConstInt) and (Expr_And(expr).re is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_And(expr).le).value; rval := Expr_ConstInt(Expr_And(expr).re).value; Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval and rval; Expr_And(expr).le.Free; Expr_And(expr).re.Free; expr.Free; end else if (Expr_And(expr).le is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_And(expr).le).value; if (lval = 1) then begin Result := Expr_And(expr).re; Expr_And(expr).le.Free; expr.Free; end else begin Result := Expr_And(expr).le; Expr_And(expr).re.Free; expr.Free; end; end else if (Expr_And(expr).re is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_And(expr).re).value; if (lval = 1) then begin Result := Expr_And(expr).le; Expr_And(expr).re.Free; expr.Free; end else begin Result := Expr_And(expr).re; Expr_And(expr).le.Free; expr.Free; end; end; end else if (expr is Expr_Or) then begin Expr_Or(expr).le := optimizeExpr(Expr_Or(expr).le); Expr_Or(expr).re := optimizeExpr(Expr_Or(expr).re); if (Expr_Or(expr).le is Expr_ConstInt) and (Expr_Or(expr).re is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_Or(expr).le).value; rval := Expr_ConstInt(Expr_Or(expr).re).value; Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := lval and rval; Expr_Or(expr).le.Free; Expr_Or(expr).re.Free; expr.Free; end else if (Expr_Or(expr).le is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_Or(expr).le).value; if (lval = 1) then begin Result := Expr_Or(expr).le; Expr_Or(expr).re.Free; expr.Free; end else begin Result := Expr_Or(expr).re; Expr_Or(expr).le.Free; expr.Free; end; end else if (Expr_Or(expr).re is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_Or(expr).re).value; if (lval = 1) then begin Result := Expr_Or(expr).re; Expr_Or(expr).le.Free; expr.Free; end else begin Result := Expr_Or(expr).le; Expr_Or(expr).re.Free; expr.Free; end; end; end else if (expr is Expr_Not) then begin Expr_Not(expr).ex := optimizeExpr(Expr_Not(expr).ex); if (Expr_Not(expr).ex is Expr_ConstInt) then begin lval := Expr_ConstInt(Expr_Not(expr).ex).value; Result := Expr_ConstInt.Create; Expr_ConstInt(Result).value := not lval; Expr_Not(expr).ex.Free; expr.Free; end; end; end; procedure showExpr(expr : Expr); var t : integer; num, displ, pdispl : integer; e : Env_Entry; begin if (expr = nil) then exit; if (expr is Expr_Op) then begin showExpr(Expr_Op(expr).le); showExpr(Expr_Op(expr).re); case Expr_Op(expr).op of '+': emit('ADD'); '-': emit('SUB'); '*': emit('MUL'); '/': emit('DIV'); '%': emit('MOD'); '&': emit('AND'); '|': emit('OR'); end; end else if (expr is Expr_ConstInt) then emit('PUSHI ' + IntToStr(Expr_ConstInt(expr).value)) else if (expr is Expr_ConstFloat) then emit('PUSHF ' + FloatToStr(Expr_ConstFloat(expr).value)) else if (expr is Expr_String) then emit('PUSHS ' + Expr_String(expr).value) else if (expr is Expr_If) then begin showExpr(Expr_If(expr).ce); if (Expr_If(expr).re = nil) and (Expr_If(expr).le = nil) then begin end else if (Expr_If(expr).re <> nil) then begin emit('JZ L' + IntToStr(Expr_If(expr).lElse)); emit('L' + IntToStr(Expr_If(expr).lThen) + ':'); showExpr(Expr_If(expr).le); emit('JMP L' + IntToStr(Expr_If(expr).lAfter)); emit('L' + IntToStr(Expr_If(expr).lElse) + ':'); showExpr(Expr_If(expr).re); end else begin emit('JZ L' + IntToStr(Expr_If(expr).lAfter)); emit('L' + IntToStr(Expr_If(expr).lThen) + ':'); showExpr(Expr_If(expr).le); end; emit('L' + IntToStr(Expr_If(expr).lAfter) + ':'); end else if (expr is Expr_Func) then begin if (Expr_Func(expr).body <> nil) then begin displ := 1; pdispl := -2; num := 0; for t := 0 to environment.count - 1 do begin e := environment[t]; if (pos(Expr_Func(expr).id + ':', e.id) > 0) then begin if (e.varTyp = VARTYPE_PARAM) then begin inc(num); e.displ := pdispl; dec(pdispl); end else if (e.varTyp = VARTYPE_LOCAL) then begin e.displ := displ; inc(displ); end; end; end; emit('L' + IntToStr(Expr_Func(expr).lStart) + ':'); emit('PUSHBP'); emit('MSPBP'); if (displ > 1) then emit('ADDSP ' + IntToStr(displ - 1)); showExpr(Expr_Func(expr).body); if (expr.typ <> _VOID) then begin emit('POPDISP ' + IntToStr(pdispl + 1)); dec(num); end; emit('MBPSP'); emit('POPBP'); if (num > 0) then begin emit('MTSD ' + IntToStr(num)); emit('SUBSP ' + IntToStr(num)); end; emit('RET'); end; end else if (expr is Expr_Return) then begin showExpr(Expr_Return(expr).ret); end else if (expr is Expr_Call) then begin t := lookupEnv(Expr_Call(expr).id, true).lbl; if (t > 0) then begin showExpr(Expr_Call(expr).params); emit('CALL L' + IntToStr(t)); end else if (t = -1) then begin showExpr(Expr_Call(expr).params); emit('CALLE ' + Expr_Call(expr).id); end; end else if (expr is Expr_Seq) then begin showExpr(Expr_Seq(expr).ex); showExpr(Expr_Seq(expr).seq); end else if (expr is Expr_Id) then begin e := lookupEnv(Expr_Id(expr).id, true); if (e.varTyp = VARTYPE_GLOBAL) then emit('PUSHR R' + IntToStr(e.displ)) else emit('PUSHDISP ' + IntToStr(e.displ)); end else if (expr is Expr_External) then begin e := lookupEnv(Expr_External(expr).id, true); if (e.varTyp = VARTYPE_GLOBAL) then emit('PUSHR R' + IntToStr(e.displ)) else emit('PUSHDISP ' + IntToStr(e.displ)); emit('PUSHS ' + Expr_External(expr).assoc); emit('GET'); end else if (expr is Expr_Assign) then begin showExpr(Expr_Assign(expr).ex); e := lookupEnv(Expr_Id(Expr_Assign(expr).id).id, true); { if (e.typ = _EXTERNAL) then emit('GET'); } if (e.varTyp = VARTYPE_GLOBAL) then emit('POPR R' + IntToStr(e.displ)) else emit('POPDISP ' + IntToStr(e.displ)); end else if (expr is Expr_Asm) then begin emit(Expr_Asm(expr).line); end else if (expr is Expr_Special) then begin showExpr(Expr_Special(expr).ex); case Expr_Special(expr).spec of SPECIAL_TRAP: emit('TRAP'); SPECIAL_SLEEP: emit('SLEEP'); SPECIAL_WAIT: emit('WAIT'); SPECIAL_SIGNAL: emit('SIGNAL'); end; end else if (expr is Expr_Conv) then begin showExpr(Expr_Conv(expr).ex); case Expr_Conv(expr).cnv of CONV_TO_INT : emit('TOI'); CONV_TO_FLOAT : emit('TOF'); CONV_TO_STRING : emit('TOS'); end; end else if (expr is Expr_Loop) then begin showExpr(Expr_Loop(Expr).init); emit('L' + IntToStr(Expr_Loop(expr).lStart) + ':'); showExpr(Expr_Loop(Expr).body); showExpr(Expr_Loop(Expr).step); showExpr(Expr_Loop(Expr).ce); emit('JNZ L' + IntToStr(Expr_Loop(expr).lStart)); end else if (expr is Expr_Rel) then begin showExpr(Expr_Rel(expr).le); showExpr(Expr_Rel(expr).re); if (Expr_Rel(expr).op = '>') then emit('GT') else if (Expr_Rel(expr).op = '<') then emit('LT') else if (Expr_Rel(expr).op = '>=') then emit('GTE') else if (Expr_Rel(expr).op = '=<') then emit('LTE') else if (Expr_Rel(expr).op = '==') then emit('EQ'); end else if (expr is Expr_Not) then begin showExpr(Expr_Not(expr).ex); emit('NOT'); end else if (expr is Expr_And) then begin showExpr(Expr_And(expr).le); showExpr(Expr_And(expr).re); emit('AND'); end else if (expr is Expr_Or) then begin showExpr(Expr_Or(expr).le); showExpr(Expr_Or(expr).re); emit('OR'); end; end; procedure optimizeEnvironment(); var e : Env_Entry; x : integer; begin for x := 0 to environment.Count - 1 do begin e := Env_Entry(environment[x]); if (e.varTyp in [VARTYPE_LOCAL,VARTYPE_GLOBAL,VARTYPE_STATIC]) and (not e.used) then begin compilerWarning(e.lineNum, e.fname, reportEnvEntry(e) + ' unused'); end; if (e.varTyp in [VARTYPE_FUNCTION]) and (e.lbl > -1) and (not e.used) then begin compilerWarning(e.lineNum, e.fname, reportEnvEntry(e) + ' unused, if incorrect add "export ' + cleanIdentifier(e.id) + '" at the end of the file'); end; end; environment.Pack(); end; procedure startCompiler(root : Expr); var a : integer; e : Env_Entry; begin root := typeExpr(root); optimizeEnvironment(); if (not yyerrors) then root := optimizeExpr(root); if (not yyerrors) then begin emit('$DATA ' + IntToStr(globalCount)); for a := 0 to environment.count - 1 do begin e := environment[a]; if (e.lbl > 0) and (e.used) then begin emit('$SYMBOL ' + e.id + ' L' + IntToStr(e.lbl)); end; end; showExpr(root); writeln('Output file written, datasize is ', globalCount, ' element(s).'); end; end; var ifname : string; ofname : string; {$IFDEF WIN32} SI : TStartupInfo; PI : TProcessInformation; ex : DWORD; {$ENDIF} begin DecimalSeparator := '.'; writeln('GMCC - GMC ''Elise'' compiler v0.3'#13#10); if (paramcount < 1) then begin writeln('gmcc <input file>'#13#10); { writeln(' -o turn optimizations on (not implemented at the moment)'); writeln(' -c just compile, do not call assembler'); } exit; end; ifname := paramstr(1); ofname := ChangeFileExt(ifname, '.asm'); if (not FileExists(ifname)) then begin writeln('Could not open ', ifname); exit; end; yyopen(ifname); assignfile(output, ofname); {$I-} rewrite(output); {$I+} if (IOresult <> 0) then begin writeln('Could not open ', ofname); exit; end; environment := TList.Create; includeList := TStringList.Create(); labelNum := 1; globalCount := 0; yylineno := 1; start(INITIAL); if yyparse=0 then { done; }; closefile(output); if (not yyerrors) then begin {$IFDEF WIN32} FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(SI); CreateProcess(nil, PChar('gasm ' + ofname), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI); repeat GetExitCodeProcess(PI.hProcess, ex); until (ex <> STILL_ACTIVE); {$ENDIF} end; end.