module Salt class Parser # This file assumes that the output of the generator will be placed # within a module or a class. However, the module/class requires a # `type` method, which takes a terminal and gives its type, as a # symbol. These types should line up with the terminals that were # defined in the original grammar. # The actions to take during parsing. In every state, there are a # set of acceptable peek tokens; this table tells the parser what # to do on each acceptable peek token. The possible actions include # `:accept`, `:reduce`, and `:state`; `:accept` means to accept the # input and return the value of the pasing. `:reduce` means to # reduce the top of the stack into a given nonterminal. `:state` # means to transition to another state. # # @return [Array)>>] ACTION_TABLE = [{:body=>[:state, 1], :"parts.maybe"=>[:state, 2], :parts=>[:state, 3], :part=>[:state, 4], :type=>[:state, 5], :function=>[:state, 6], :class=>[:state, 7], :typedef=>[:state, 8], :preprocessor=>[:state, 9], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :FUNCTION=>[:state, 13], :CLASS=>[:state, 14], :"typedef.type"=>[:state, 15], :"typedef.func"=>[:state, 16], :HASH=>[:state, 17], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20], :TYPEDEF=>[:state, 21], :$end=>[:reduce, 4]}, {:$end=>[:state, 22]}, {:$end=>[:reduce, 1]}, {:part=>[:state, 23], :function=>[:state, 6], :class=>[:state, 7], :typedef=>[:state, 8], :preprocessor=>[:state, 9], :FUNCTION=>[:state, 13], :CLASS=>[:state, 14], :"typedef.type"=>[:state, 15], :"typedef.func"=>[:state, 16], :HASH=>[:state, 17], :TYPEDEF=>[:state, 21], :$end=>[:reduce, 3]}, {:$end=>[:reduce, 6], :FUNCTION=>[:reduce, 6], :CLASS=>[:reduce, 6], :TYPEDEF=>[:reduce, 6], :HASH=>[:reduce, 6]}, {:CARET=>[:state, 24], :$end=>[:reduce, 7], :FUNCTION=>[:reduce, 7], :CLASS=>[:reduce, 7], :TYPEDEF=>[:reduce, 7], :HASH=>[:reduce, 7]}, {:$end=>[:reduce, 8], :FUNCTION=>[:reduce, 8], :CLASS=>[:reduce, 8], :TYPEDEF=>[:reduce, 8], :HASH=>[:reduce, 8]}, {:$end=>[:reduce, 9], :FUNCTION=>[:reduce, 9], :CLASS=>[:reduce, 9], :TYPEDEF=>[:reduce, 9], :HASH=>[:reduce, 9]}, {:$end=>[:reduce, 10], :FUNCTION=>[:reduce, 10], :CLASS=>[:reduce, 10], :TYPEDEF=>[:reduce, 10], :HASH=>[:reduce, 10]}, {:$end=>[:reduce, 11], :FUNCTION=>[:reduce, 11], :CLASS=>[:reduce, 11], :TYPEDEF=>[:reduce, 11], :HASH=>[:reduce, 11]}, {:DCOLON=>[:state, 25], :$end=>[:reduce, 48], :FUNCTION=>[:reduce, 48], :CLASS=>[:reduce, 48], :TYPEDEF=>[:reduce, 48], :HASH=>[:reduce, 48], :CARET=>[:reduce, 48], :SEMICOLON=>[:reduce, 48], :EQUALS=>[:reduce, 48], :RPAREN=>[:reduce, 48], :COMMA=>[:reduce, 48], :LBRACE=>[:reduce, 48]}, {:$end=>[:reduce, 49], :FUNCTION=>[:reduce, 49], :CLASS=>[:reduce, 49], :TYPEDEF=>[:reduce, 49], :HASH=>[:reduce, 49], :CARET=>[:reduce, 49], :SEMICOLON=>[:reduce, 49], :EQUALS=>[:reduce, 49], :RPAREN=>[:reduce, 49], :COMMA=>[:reduce, 49], :LBRACE=>[:reduce, 49]}, {:$end=>[:reduce, 50], :FUNCTION=>[:reduce, 50], :CLASS=>[:reduce, 50], :TYPEDEF=>[:reduce, 50], :HASH=>[:reduce, 50], :CARET=>[:reduce, 50], :SEMICOLON=>[:reduce, 50], :EQUALS=>[:reduce, 50], :RPAREN=>[:reduce, 50], :COMMA=>[:reduce, 50], :LBRACE=>[:reduce, 50]}, {:IDENTIFIER=>[:state, 26]}, {:"class.name"=>[:state, 27], :IDENTIFIER=>[:state, 18]}, {:$end=>[:reduce, 140], :FUNCTION=>[:reduce, 140], :CLASS=>[:reduce, 140], :TYPEDEF=>[:reduce, 140], :HASH=>[:reduce, 140]}, {:$end=>[:reduce, 141], :FUNCTION=>[:reduce, 141], :CLASS=>[:reduce, 141], :TYPEDEF=>[:reduce, 141], :HASH=>[:reduce, 141]}, {:IDENTIFIER=>[:state, 28]}, {:$end=>[:reduce, 20], :FUNCTION=>[:reduce, 20], :CLASS=>[:reduce, 20], :TYPEDEF=>[:reduce, 20], :HASH=>[:reduce, 20], :CARET=>[:reduce, 20], :DCOLON=>[:reduce, 20], :LBRACE=>[:reduce, 20], :COLON=>[:reduce, 20], :LPAREN=>[:reduce, 20], :SEMICOLON=>[:reduce, 20], :EQUALS=>[:reduce, 20], :RPAREN=>[:reduce, 20], :COMMA=>[:reduce, 20]}, {:"class.name"=>[:state, 29], :IDENTIFIER=>[:state, 18]}, {:"class.name"=>[:state, 30], :IDENTIFIER=>[:state, 18]}, {:"class.name"=>[:state, 31], :IDENTIFIER=>[:state, 18]}, {:$end=>[:accept, 0]}, {:$end=>[:reduce, 5], :FUNCTION=>[:reduce, 5], :CLASS=>[:reduce, 5], :TYPEDEF=>[:reduce, 5], :HASH=>[:reduce, 5]}, {:$end=>[:reduce, 47], :FUNCTION=>[:reduce, 47], :CLASS=>[:reduce, 47], :TYPEDEF=>[:reduce, 47], :HASH=>[:reduce, 47], :CARET=>[:reduce, 47], :SEMICOLON=>[:reduce, 47], :EQUALS=>[:reduce, 47], :RPAREN=>[:reduce, 47], :COMMA=>[:reduce, 47], :LBRACE=>[:reduce, 47]}, {:IDENTIFIER=>[:state, 32]}, {:LPAREN=>[:state, 33]}, {:LBRACE=>[:state, 34], :DCOLON=>[:state, 25]}, {:"function.body"=>[:state, 35], :"function.body.parts.maybe"=>[:state, 36], :"function.body.parts"=>[:state, 37], :"function.body.part"=>[:state, 38], :"function.body.declare"=>[:state, 39], :"function.body.expression"=>[:state, 40], :"function.body.control"=>[:state, 41], :preprocessor=>[:state, 42], :IDENTIFIER=>[:state, 43], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :"control.if"=>[:state, 51], :"control.while"=>[:state, 52], :"control.for"=>[:state, 53], :"control.goto"=>[:state, 54], :"control.label"=>[:state, 55], :"control.return"=>[:state, 56], :CONTINUE=>[:state, 57], :BREAK=>[:state, 58], :HASH=>[:state, 17], :CARET=>[:state, 59], :AMBER=>[:state, 60], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :IF=>[:state, 79], :WHILE=>[:state, 80], :DO=>[:state, 81], :FOR=>[:state, 82], :GOTO=>[:state, 83], :LABEL=>[:state, 84], :RETURN=>[:state, 85], :STRING=>[:state, 86], :SEMICOLON=>[:reduce, 53]}, {:LBRACE=>[:state, 87], :DCOLON=>[:state, 25]}, {:LBRACE=>[:state, 88], :DCOLON=>[:state, 25]}, {:COLON=>[:state, 89], :LPAREN=>[:state, 90], :CARET=>[:state, 91], :DCOLON=>[:state, 25]}, {:$end=>[:reduce, 19], :FUNCTION=>[:reduce, 19], :CLASS=>[:reduce, 19], :TYPEDEF=>[:reduce, 19], :HASH=>[:reduce, 19], :CARET=>[:reduce, 19], :DCOLON=>[:reduce, 19], :LBRACE=>[:reduce, 19], :COLON=>[:reduce, 19], :LPAREN=>[:reduce, 19], :SEMICOLON=>[:reduce, 19], :EQUALS=>[:reduce, 19], :RPAREN=>[:reduce, 19], :COMMA=>[:reduce, 19]}, {:"function.arguments.maybe"=>[:state, 92], :"function.arguments"=>[:state, 93], :"function.argument"=>[:state, 94], :IDENTIFIER=>[:state, 95], :RPAREN=>[:reduce, 14]}, {:"class.body"=>[:state, 96], :"class.parts.maybe"=>[:state, 97], :"class.parts"=>[:state, 98], :"class.part"=>[:state, 99], :"class.attribute"=>[:state, 100], :"class.function"=>[:state, 101], :preprocessor=>[:state, 102], :IDENTIFIER=>[:state, 103], :FUNC=>[:state, 104], :HASH=>[:state, 17], :RBRACE=>[:reduce, 23]}, {:SEMICOLON=>[:state, 105]}, {:SEMICOLON=>[:reduce, 51], :RBRACE=>[:reduce, 51]}, {:"function.body.part"=>[:state, 106], :"function.body.declare"=>[:state, 39], :"function.body.expression"=>[:state, 40], :"function.body.control"=>[:state, 41], :preprocessor=>[:state, 42], :IDENTIFIER=>[:state, 43], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :"control.if"=>[:state, 51], :"control.while"=>[:state, 52], :"control.for"=>[:state, 53], :"control.goto"=>[:state, 54], :"control.label"=>[:state, 55], :"control.return"=>[:state, 56], :CONTINUE=>[:state, 57], :BREAK=>[:state, 58], :HASH=>[:state, 17], :CARET=>[:state, 59], :AMBER=>[:state, 60], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :IF=>[:state, 79], :WHILE=>[:state, 80], :DO=>[:state, 81], :FOR=>[:state, 82], :GOTO=>[:state, 83], :LABEL=>[:state, 84], :RETURN=>[:state, 85], :STRING=>[:state, 86], :SEMICOLON=>[:reduce, 52], :RBRACE=>[:reduce, 52]}, {:$default=>[:reduce, 55]}, {:SEMICOLON=>[:state, 107]}, {:SEMICOLON=>[:state, 108], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:SEMICOLON=>[:state, 128]}, {:$default=>[:reduce, 59]}, {:COLON=>[:state, 129], :SEMICOLON=>[:reduce, 73], :LBRACK=>[:reduce, 73], :LPAREN=>[:reduce, 73], :PLUS=>[:reduce, 73], :MINUS=>[:reduce, 73], :STAR=>[:reduce, 73], :DIVIDE=>[:reduce, 73], :MOD=>[:reduce, 73], :LSHIFT=>[:reduce, 73], :RSHIFT=>[:reduce, 73], :DPLUS=>[:reduce, 73], :DMINUS=>[:reduce, 73], :LBRK=>[:reduce, 73], :RBRK=>[:reduce, 73], :COMP=>[:reduce, 73], :NCMP=>[:reduce, 73], :LAND=>[:reduce, 73], :AMBER=>[:reduce, 73], :LOR=>[:reduce, 73], :BOR=>[:reduce, 73], :EQUALS=>[:reduce, 73], :RPAREN=>[:reduce, 73], :WHILE=>[:reduce, 73], :RBRACK=>[:reduce, 73], :COMMA=>[:reduce, 73], :ELSE=>[:reduce, 73]}, {:SEMICOLON=>[:reduce, 60], :LBRACK=>[:reduce, 60], :LPAREN=>[:reduce, 60], :PLUS=>[:reduce, 60], :MINUS=>[:reduce, 60], :STAR=>[:reduce, 60], :DIVIDE=>[:reduce, 60], :MOD=>[:reduce, 60], :LSHIFT=>[:reduce, 60], :RSHIFT=>[:reduce, 60], :DPLUS=>[:reduce, 60], :DMINUS=>[:reduce, 60], :LBRK=>[:reduce, 60], :RBRK=>[:reduce, 60], :COMP=>[:reduce, 60], :NCMP=>[:reduce, 60], :LAND=>[:reduce, 60], :AMBER=>[:reduce, 60], :LOR=>[:reduce, 60], :BOR=>[:reduce, 60], :RPAREN=>[:reduce, 60], :EQUALS=>[:reduce, 60], :WHILE=>[:reduce, 60], :RBRACK=>[:reduce, 60], :COMMA=>[:reduce, 60], :ELSE=>[:reduce, 60]}, {:EQUALS=>[:state, 130], :SEMICOLON=>[:reduce, 61], :LBRACK=>[:reduce, 61], :LPAREN=>[:reduce, 61], :PLUS=>[:reduce, 61], :MINUS=>[:reduce, 61], :STAR=>[:reduce, 61], :DIVIDE=>[:reduce, 61], :MOD=>[:reduce, 61], :LSHIFT=>[:reduce, 61], :RSHIFT=>[:reduce, 61], :DPLUS=>[:reduce, 61], :DMINUS=>[:reduce, 61], :LBRK=>[:reduce, 61], :RBRK=>[:reduce, 61], :COMP=>[:reduce, 61], :NCMP=>[:reduce, 61], :LAND=>[:reduce, 61], :AMBER=>[:reduce, 61], :LOR=>[:reduce, 61], :BOR=>[:reduce, 61], :RPAREN=>[:reduce, 61], :WHILE=>[:reduce, 61], :RBRACK=>[:reduce, 61], :COMMA=>[:reduce, 61], :ELSE=>[:reduce, 61]}, {:SEMICOLON=>[:reduce, 62], :LBRACK=>[:reduce, 62], :LPAREN=>[:reduce, 62], :PLUS=>[:reduce, 62], :MINUS=>[:reduce, 62], :STAR=>[:reduce, 62], :DIVIDE=>[:reduce, 62], :MOD=>[:reduce, 62], :LSHIFT=>[:reduce, 62], :RSHIFT=>[:reduce, 62], :DPLUS=>[:reduce, 62], :DMINUS=>[:reduce, 62], :LBRK=>[:reduce, 62], :RBRK=>[:reduce, 62], :COMP=>[:reduce, 62], :NCMP=>[:reduce, 62], :LAND=>[:reduce, 62], :AMBER=>[:reduce, 62], :LOR=>[:reduce, 62], :BOR=>[:reduce, 62], :RPAREN=>[:reduce, 62], :EQUALS=>[:reduce, 62], :WHILE=>[:reduce, 62], :RBRACK=>[:reduce, 62], :COMMA=>[:reduce, 62], :ELSE=>[:reduce, 62]}, {:SEMICOLON=>[:reduce, 63], :LBRACK=>[:reduce, 63], :LPAREN=>[:reduce, 63], :PLUS=>[:reduce, 63], :MINUS=>[:reduce, 63], :STAR=>[:reduce, 63], :DIVIDE=>[:reduce, 63], :MOD=>[:reduce, 63], :LSHIFT=>[:reduce, 63], :RSHIFT=>[:reduce, 63], :DPLUS=>[:reduce, 63], :DMINUS=>[:reduce, 63], :LBRK=>[:reduce, 63], :RBRK=>[:reduce, 63], :COMP=>[:reduce, 63], :NCMP=>[:reduce, 63], :LAND=>[:reduce, 63], :AMBER=>[:reduce, 63], :LOR=>[:reduce, 63], :BOR=>[:reduce, 63], :RPAREN=>[:reduce, 63], :EQUALS=>[:reduce, 63], :WHILE=>[:reduce, 63], :RBRACK=>[:reduce, 63], :COMMA=>[:reduce, 63], :ELSE=>[:reduce, 63]}, {:SEMICOLON=>[:reduce, 64], :LBRACK=>[:reduce, 64], :LPAREN=>[:reduce, 64], :PLUS=>[:reduce, 64], :MINUS=>[:reduce, 64], :STAR=>[:reduce, 64], :DIVIDE=>[:reduce, 64], :MOD=>[:reduce, 64], :LSHIFT=>[:reduce, 64], :RSHIFT=>[:reduce, 64], :DPLUS=>[:reduce, 64], :DMINUS=>[:reduce, 64], :LBRK=>[:reduce, 64], :RBRK=>[:reduce, 64], :COMP=>[:reduce, 64], :NCMP=>[:reduce, 64], :LAND=>[:reduce, 64], :AMBER=>[:reduce, 64], :LOR=>[:reduce, 64], :BOR=>[:reduce, 64], :RPAREN=>[:reduce, 64], :EQUALS=>[:reduce, 64], :WHILE=>[:reduce, 64], :RBRACK=>[:reduce, 64], :COMMA=>[:reduce, 64], :ELSE=>[:reduce, 64]}, {:SEMICOLON=>[:reduce, 65], :LBRACK=>[:reduce, 65], :LPAREN=>[:reduce, 65], :PLUS=>[:reduce, 65], :MINUS=>[:reduce, 65], :STAR=>[:reduce, 65], :DIVIDE=>[:reduce, 65], :MOD=>[:reduce, 65], :LSHIFT=>[:reduce, 65], :RSHIFT=>[:reduce, 65], :DPLUS=>[:reduce, 65], :DMINUS=>[:reduce, 65], :LBRK=>[:reduce, 65], :RBRK=>[:reduce, 65], :COMP=>[:reduce, 65], :NCMP=>[:reduce, 65], :LAND=>[:reduce, 65], :AMBER=>[:reduce, 65], :LOR=>[:reduce, 65], :BOR=>[:reduce, 65], :RPAREN=>[:reduce, 65], :EQUALS=>[:reduce, 65], :WHILE=>[:reduce, 65], :RBRACK=>[:reduce, 65], :COMMA=>[:reduce, 65], :ELSE=>[:reduce, 65]}, {:"function.body.expression"=>[:state, 131], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:SEMICOLON=>[:reduce, 119]}, {:SEMICOLON=>[:reduce, 120]}, {:SEMICOLON=>[:reduce, 121]}, {:SEMICOLON=>[:reduce, 122]}, {:SEMICOLON=>[:reduce, 123]}, {:SEMICOLON=>[:reduce, 124]}, {:SEMICOLON=>[:reduce, 125]}, {:SEMICOLON=>[:reduce, 126]}, {:"function.body.expression"=>[:state, 132], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 133], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 134], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 135], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 136], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 137], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:SEMICOLON=>[:reduce, 88], :LBRACK=>[:reduce, 88], :LPAREN=>[:reduce, 88], :PLUS=>[:reduce, 88], :MINUS=>[:reduce, 88], :STAR=>[:reduce, 88], :DIVIDE=>[:reduce, 88], :MOD=>[:reduce, 88], :LSHIFT=>[:reduce, 88], :RSHIFT=>[:reduce, 88], :DPLUS=>[:reduce, 88], :DMINUS=>[:reduce, 88], :LBRK=>[:reduce, 88], :RBRK=>[:reduce, 88], :COMP=>[:reduce, 88], :NCMP=>[:reduce, 88], :LAND=>[:reduce, 88], :AMBER=>[:reduce, 88], :LOR=>[:reduce, 88], :BOR=>[:reduce, 88], :RPAREN=>[:reduce, 88], :EQUALS=>[:reduce, 88], :WHILE=>[:reduce, 88], :RBRACK=>[:reduce, 88], :COMMA=>[:reduce, 88], :ELSE=>[:reduce, 88]}, {:SEMICOLON=>[:reduce, 89], :LBRACK=>[:reduce, 89], :LPAREN=>[:reduce, 89], :PLUS=>[:reduce, 89], :MINUS=>[:reduce, 89], :STAR=>[:reduce, 89], :DIVIDE=>[:reduce, 89], :MOD=>[:reduce, 89], :LSHIFT=>[:reduce, 89], :RSHIFT=>[:reduce, 89], :DPLUS=>[:reduce, 89], :DMINUS=>[:reduce, 89], :LBRK=>[:reduce, 89], :RBRK=>[:reduce, 89], :COMP=>[:reduce, 89], :NCMP=>[:reduce, 89], :LAND=>[:reduce, 89], :AMBER=>[:reduce, 89], :LOR=>[:reduce, 89], :BOR=>[:reduce, 89], :RPAREN=>[:reduce, 89], :EQUALS=>[:reduce, 89], :WHILE=>[:reduce, 89], :RBRACK=>[:reduce, 89], :COMMA=>[:reduce, 89], :ELSE=>[:reduce, 89]}, {:SEMICOLON=>[:reduce, 90], :LBRACK=>[:reduce, 90], :LPAREN=>[:reduce, 90], :PLUS=>[:reduce, 90], :MINUS=>[:reduce, 90], :STAR=>[:reduce, 90], :DIVIDE=>[:reduce, 90], :MOD=>[:reduce, 90], :LSHIFT=>[:reduce, 90], :RSHIFT=>[:reduce, 90], :DPLUS=>[:reduce, 90], :DMINUS=>[:reduce, 90], :LBRK=>[:reduce, 90], :RBRK=>[:reduce, 90], :COMP=>[:reduce, 90], :NCMP=>[:reduce, 90], :LAND=>[:reduce, 90], :AMBER=>[:reduce, 90], :LOR=>[:reduce, 90], :BOR=>[:reduce, 90], :RPAREN=>[:reduce, 90], :EQUALS=>[:reduce, 90], :WHILE=>[:reduce, 90], :RBRACK=>[:reduce, 90], :COMMA=>[:reduce, 90], :ELSE=>[:reduce, 90]}, {:SEMICOLON=>[:reduce, 91], :LBRACK=>[:reduce, 91], :LPAREN=>[:reduce, 91], :PLUS=>[:reduce, 91], :MINUS=>[:reduce, 91], :STAR=>[:reduce, 91], :DIVIDE=>[:reduce, 91], :MOD=>[:reduce, 91], :LSHIFT=>[:reduce, 91], :RSHIFT=>[:reduce, 91], :DPLUS=>[:reduce, 91], :DMINUS=>[:reduce, 91], :LBRK=>[:reduce, 91], :RBRK=>[:reduce, 91], :COMP=>[:reduce, 91], :NCMP=>[:reduce, 91], :LAND=>[:reduce, 91], :AMBER=>[:reduce, 91], :LOR=>[:reduce, 91], :BOR=>[:reduce, 91], :RPAREN=>[:reduce, 91], :EQUALS=>[:reduce, 91], :WHILE=>[:reduce, 91], :RBRACK=>[:reduce, 91], :COMMA=>[:reduce, 91], :ELSE=>[:reduce, 91]}, {:SEMICOLON=>[:reduce, 92], :LBRACK=>[:reduce, 92], :LPAREN=>[:reduce, 92], :PLUS=>[:reduce, 92], :MINUS=>[:reduce, 92], :STAR=>[:reduce, 92], :DIVIDE=>[:reduce, 92], :MOD=>[:reduce, 92], :LSHIFT=>[:reduce, 92], :RSHIFT=>[:reduce, 92], :DPLUS=>[:reduce, 92], :DMINUS=>[:reduce, 92], :LBRK=>[:reduce, 92], :RBRK=>[:reduce, 92], :COMP=>[:reduce, 92], :NCMP=>[:reduce, 92], :LAND=>[:reduce, 92], :AMBER=>[:reduce, 92], :LOR=>[:reduce, 92], :BOR=>[:reduce, 92], :RPAREN=>[:reduce, 92], :EQUALS=>[:reduce, 92], :WHILE=>[:reduce, 92], :RBRACK=>[:reduce, 92], :COMMA=>[:reduce, 92], :ELSE=>[:reduce, 92]}, {:SEMICOLON=>[:reduce, 93], :LBRACK=>[:reduce, 93], :LPAREN=>[:reduce, 93], :PLUS=>[:reduce, 93], :MINUS=>[:reduce, 93], :STAR=>[:reduce, 93], :DIVIDE=>[:reduce, 93], :MOD=>[:reduce, 93], :LSHIFT=>[:reduce, 93], :RSHIFT=>[:reduce, 93], :DPLUS=>[:reduce, 93], :DMINUS=>[:reduce, 93], :LBRK=>[:reduce, 93], :RBRK=>[:reduce, 93], :COMP=>[:reduce, 93], :NCMP=>[:reduce, 93], :LAND=>[:reduce, 93], :AMBER=>[:reduce, 93], :LOR=>[:reduce, 93], :BOR=>[:reduce, 93], :RPAREN=>[:reduce, 93], :EQUALS=>[:reduce, 93], :WHILE=>[:reduce, 93], :RBRACK=>[:reduce, 93], :COMMA=>[:reduce, 93], :ELSE=>[:reduce, 93]}, {:SEMICOLON=>[:reduce, 94], :LBRACK=>[:reduce, 94], :LPAREN=>[:reduce, 94], :PLUS=>[:reduce, 94], :MINUS=>[:reduce, 94], :STAR=>[:reduce, 94], :DIVIDE=>[:reduce, 94], :MOD=>[:reduce, 94], :LSHIFT=>[:reduce, 94], :RSHIFT=>[:reduce, 94], :DPLUS=>[:reduce, 94], :DMINUS=>[:reduce, 94], :LBRK=>[:reduce, 94], :RBRK=>[:reduce, 94], :COMP=>[:reduce, 94], :NCMP=>[:reduce, 94], :LAND=>[:reduce, 94], :AMBER=>[:reduce, 94], :LOR=>[:reduce, 94], :BOR=>[:reduce, 94], :RPAREN=>[:reduce, 94], :EQUALS=>[:reduce, 94], :WHILE=>[:reduce, 94], :RBRACK=>[:reduce, 94], :COMMA=>[:reduce, 94], :ELSE=>[:reduce, 94]}, {:SEMICOLON=>[:reduce, 95], :LBRACK=>[:reduce, 95], :LPAREN=>[:reduce, 95], :PLUS=>[:reduce, 95], :MINUS=>[:reduce, 95], :STAR=>[:reduce, 95], :DIVIDE=>[:reduce, 95], :MOD=>[:reduce, 95], :LSHIFT=>[:reduce, 95], :RSHIFT=>[:reduce, 95], :DPLUS=>[:reduce, 95], :DMINUS=>[:reduce, 95], :LBRK=>[:reduce, 95], :RBRK=>[:reduce, 95], :COMP=>[:reduce, 95], :NCMP=>[:reduce, 95], :LAND=>[:reduce, 95], :AMBER=>[:reduce, 95], :LOR=>[:reduce, 95], :BOR=>[:reduce, 95], :RPAREN=>[:reduce, 95], :EQUALS=>[:reduce, 95], :WHILE=>[:reduce, 95], :RBRACK=>[:reduce, 95], :COMMA=>[:reduce, 95], :ELSE=>[:reduce, 95]}, {:SEMICOLON=>[:reduce, 96], :LBRACK=>[:reduce, 96], :LPAREN=>[:reduce, 96], :PLUS=>[:reduce, 96], :MINUS=>[:reduce, 96], :STAR=>[:reduce, 96], :DIVIDE=>[:reduce, 96], :MOD=>[:reduce, 96], :LSHIFT=>[:reduce, 96], :RSHIFT=>[:reduce, 96], :DPLUS=>[:reduce, 96], :DMINUS=>[:reduce, 96], :LBRK=>[:reduce, 96], :RBRK=>[:reduce, 96], :COMP=>[:reduce, 96], :NCMP=>[:reduce, 96], :LAND=>[:reduce, 96], :AMBER=>[:reduce, 96], :LOR=>[:reduce, 96], :BOR=>[:reduce, 96], :RPAREN=>[:reduce, 96], :EQUALS=>[:reduce, 96], :WHILE=>[:reduce, 96], :RBRACK=>[:reduce, 96], :COMMA=>[:reduce, 96], :ELSE=>[:reduce, 96]}, {:SEMICOLON=>[:reduce, 97], :LBRACK=>[:reduce, 97], :LPAREN=>[:reduce, 97], :PLUS=>[:reduce, 97], :MINUS=>[:reduce, 97], :STAR=>[:reduce, 97], :DIVIDE=>[:reduce, 97], :MOD=>[:reduce, 97], :LSHIFT=>[:reduce, 97], :RSHIFT=>[:reduce, 97], :DPLUS=>[:reduce, 97], :DMINUS=>[:reduce, 97], :LBRK=>[:reduce, 97], :RBRK=>[:reduce, 97], :COMP=>[:reduce, 97], :NCMP=>[:reduce, 97], :LAND=>[:reduce, 97], :AMBER=>[:reduce, 97], :LOR=>[:reduce, 97], :BOR=>[:reduce, 97], :RPAREN=>[:reduce, 97], :EQUALS=>[:reduce, 97], :WHILE=>[:reduce, 97], :RBRACK=>[:reduce, 97], :COMMA=>[:reduce, 97], :ELSE=>[:reduce, 97]}, {:SEMICOLON=>[:reduce, 98], :LBRACK=>[:reduce, 98], :LPAREN=>[:reduce, 98], :PLUS=>[:reduce, 98], :MINUS=>[:reduce, 98], :STAR=>[:reduce, 98], :DIVIDE=>[:reduce, 98], :MOD=>[:reduce, 98], :LSHIFT=>[:reduce, 98], :RSHIFT=>[:reduce, 98], :DPLUS=>[:reduce, 98], :DMINUS=>[:reduce, 98], :LBRK=>[:reduce, 98], :RBRK=>[:reduce, 98], :COMP=>[:reduce, 98], :NCMP=>[:reduce, 98], :LAND=>[:reduce, 98], :AMBER=>[:reduce, 98], :LOR=>[:reduce, 98], :BOR=>[:reduce, 98], :RPAREN=>[:reduce, 98], :EQUALS=>[:reduce, 98], :WHILE=>[:reduce, 98], :RBRACK=>[:reduce, 98], :COMMA=>[:reduce, 98], :ELSE=>[:reduce, 98]}, {:STRING=>[:state, 138], :SEMICOLON=>[:reduce, 99], :LBRACK=>[:reduce, 99], :LPAREN=>[:reduce, 99], :PLUS=>[:reduce, 99], :MINUS=>[:reduce, 99], :STAR=>[:reduce, 99], :DIVIDE=>[:reduce, 99], :MOD=>[:reduce, 99], :LSHIFT=>[:reduce, 99], :RSHIFT=>[:reduce, 99], :DPLUS=>[:reduce, 99], :DMINUS=>[:reduce, 99], :LBRK=>[:reduce, 99], :RBRK=>[:reduce, 99], :COMP=>[:reduce, 99], :NCMP=>[:reduce, 99], :LAND=>[:reduce, 99], :AMBER=>[:reduce, 99], :LOR=>[:reduce, 99], :BOR=>[:reduce, 99], :RPAREN=>[:reduce, 99], :EQUALS=>[:reduce, 99], :WHILE=>[:reduce, 99], :RBRACK=>[:reduce, 99], :COMMA=>[:reduce, 99], :ELSE=>[:reduce, 99]}, {:"function.body.expression"=>[:state, 139], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 140], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:LPAREN=>[:state, 141]}, {:LPAREN=>[:state, 142]}, {:"control.block"=>[:state, 143], :"function.body.expression"=>[:state, 144], :LBRACE=>[:state, 145], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:LPAREN=>[:state, 146]}, {:IDENTIFIER=>[:state, 147]}, {:IDENTIFIER=>[:state, 148]}, {:"function.body.expression"=>[:state, 149], :SEMICOLON=>[:state, 150], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:SEMICOLON=>[:reduce, 101], :LBRACK=>[:reduce, 101], :LPAREN=>[:reduce, 101], :PLUS=>[:reduce, 101], :MINUS=>[:reduce, 101], :STAR=>[:reduce, 101], :DIVIDE=>[:reduce, 101], :MOD=>[:reduce, 101], :LSHIFT=>[:reduce, 101], :RSHIFT=>[:reduce, 101], :DPLUS=>[:reduce, 101], :DMINUS=>[:reduce, 101], :LBRK=>[:reduce, 101], :RBRK=>[:reduce, 101], :COMP=>[:reduce, 101], :NCMP=>[:reduce, 101], :LAND=>[:reduce, 101], :AMBER=>[:reduce, 101], :LOR=>[:reduce, 101], :BOR=>[:reduce, 101], :STRING=>[:reduce, 101], :RPAREN=>[:reduce, 101], :EQUALS=>[:reduce, 101], :WHILE=>[:reduce, 101], :RBRACK=>[:reduce, 101], :COMMA=>[:reduce, 101], :ELSE=>[:reduce, 101]}, {:"struct.body"=>[:state, 151], :"struct.parts.maybe"=>[:state, 152], :"struct.parts"=>[:state, 153], :"struct.part"=>[:state, 154], :"class.attribute"=>[:state, 155], :preprocessor=>[:state, 156], :IDENTIFIER=>[:state, 103], :HASH=>[:state, 17], :RBRACE=>[:reduce, 34]}, {:"union.body"=>[:state, 157], :"union.parts.maybe"=>[:state, 158], :"union.parts"=>[:state, 159], :"union.part"=>[:state, 160], :"class.attribute"=>[:state, 161], :preprocessor=>[:state, 162], :IDENTIFIER=>[:state, 103], :HASH=>[:state, 17], :RBRACE=>[:reduce, 42]}, {:type=>[:state, 163], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:"function.arguments.maybe"=>[:state, 164], :"function.arguments"=>[:state, 93], :"function.argument"=>[:state, 94], :IDENTIFIER=>[:state, 95], :RPAREN=>[:reduce, 14]}, {:LPAREN=>[:state, 165]}, {:RPAREN=>[:state, 166]}, {:COMMA=>[:state, 167], :RPAREN=>[:reduce, 13]}, {:RPAREN=>[:reduce, 16], :COMMA=>[:reduce, 16]}, {:COLON=>[:state, 168]}, {:RBRACE=>[:state, 169]}, {:RBRACE=>[:reduce, 21]}, {:"class.part"=>[:state, 170], :"class.attribute"=>[:state, 100], :"class.function"=>[:state, 101], :preprocessor=>[:state, 102], :IDENTIFIER=>[:state, 103], :FUNC=>[:state, 104], :HASH=>[:state, 17], :RBRACE=>[:reduce, 22]}, {:RBRACE=>[:reduce, 25], :IDENTIFIER=>[:reduce, 25], :FUNC=>[:reduce, 25], :HASH=>[:reduce, 25]}, {:RBRACE=>[:reduce, 26], :IDENTIFIER=>[:reduce, 26], :FUNC=>[:reduce, 26], :HASH=>[:reduce, 26]}, {:RBRACE=>[:reduce, 27], :IDENTIFIER=>[:reduce, 27], :FUNC=>[:reduce, 27], :HASH=>[:reduce, 27]}, {:RBRACE=>[:reduce, 28], :IDENTIFIER=>[:reduce, 28], :FUNC=>[:reduce, 28], :HASH=>[:reduce, 28]}, {:COLON=>[:state, 171]}, {:IDENTIFIER=>[:state, 172]}, {:$default=>[:reduce, 2]}, {:$default=>[:reduce, 54]}, {:$default=>[:reduce, 56]}, {:$default=>[:reduce, 57]}, {:"function.body.expression"=>[:state, 173], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.call.arguments.maybe"=>[:state, 174], :"function.body.call.arguments"=>[:state, 175], :"function.body.call.argument"=>[:state, 176], :"function.body.expression"=>[:state, 177], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86], :RPAREN=>[:reduce, 115]}, {:"function.body.expression"=>[:state, 178], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 179], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 180], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 181], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 182], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 183], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 184], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:SEMICOLON=>[:reduce, 82], :LBRACK=>[:reduce, 82], :LPAREN=>[:reduce, 82], :PLUS=>[:reduce, 82], :MINUS=>[:reduce, 82], :STAR=>[:reduce, 82], :DIVIDE=>[:reduce, 82], :MOD=>[:reduce, 82], :LSHIFT=>[:reduce, 82], :RSHIFT=>[:reduce, 82], :DPLUS=>[:reduce, 82], :DMINUS=>[:reduce, 82], :LBRK=>[:reduce, 82], :RBRK=>[:reduce, 82], :COMP=>[:reduce, 82], :NCMP=>[:reduce, 82], :LAND=>[:reduce, 82], :AMBER=>[:reduce, 82], :LOR=>[:reduce, 82], :BOR=>[:reduce, 82], :RPAREN=>[:reduce, 82], :WHILE=>[:reduce, 82], :RBRACK=>[:reduce, 82], :COMMA=>[:reduce, 82], :ELSE=>[:reduce, 82]}, {:SEMICOLON=>[:reduce, 83], :LBRACK=>[:reduce, 83], :LPAREN=>[:reduce, 83], :PLUS=>[:reduce, 83], :MINUS=>[:reduce, 83], :STAR=>[:reduce, 83], :DIVIDE=>[:reduce, 83], :MOD=>[:reduce, 83], :LSHIFT=>[:reduce, 83], :RSHIFT=>[:reduce, 83], :DPLUS=>[:reduce, 83], :DMINUS=>[:reduce, 83], :LBRK=>[:reduce, 83], :RBRK=>[:reduce, 83], :COMP=>[:reduce, 83], :NCMP=>[:reduce, 83], :LAND=>[:reduce, 83], :AMBER=>[:reduce, 83], :LOR=>[:reduce, 83], :BOR=>[:reduce, 83], :RPAREN=>[:reduce, 83], :WHILE=>[:reduce, 83], :RBRACK=>[:reduce, 83], :COMMA=>[:reduce, 83], :ELSE=>[:reduce, 83]}, {:"function.body.expression"=>[:state, 185], :EQUALS=>[:state, 186], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 187], :EQUALS=>[:state, 188], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 189], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 190], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 191], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 192], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 193], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 194], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:$default=>[:reduce, 58]}, {:type=>[:state, 195], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:"function.body.expression"=>[:state, 196], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:RPAREN=>[:state, 197], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 70], :EQUALS=>[:reduce, 70], :RPAREN=>[:reduce, 70], :WHILE=>[:reduce, 70], :RBRACK=>[:reduce, 70], :COMMA=>[:reduce, 70], :ELSE=>[:reduce, 70]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 71], :MINUS=>[:reduce, 71], :STAR=>[:reduce, 71], :DIVIDE=>[:reduce, 71], :MOD=>[:reduce, 71], :LSHIFT=>[:reduce, 71], :RSHIFT=>[:reduce, 71], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 71], :RBRK=>[:reduce, 71], :COMP=>[:reduce, 71], :NCMP=>[:reduce, 71], :LAND=>[:reduce, 71], :AMBER=>[:reduce, 71], :LOR=>[:reduce, 71], :BOR=>[:reduce, 71], :SEMICOLON=>[:reduce, 71], :EQUALS=>[:reduce, 71], :RPAREN=>[:reduce, 71], :WHILE=>[:reduce, 71], :RBRACK=>[:reduce, 71], :COMMA=>[:reduce, 71], :ELSE=>[:reduce, 71]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 84], :MINUS=>[:reduce, 84], :STAR=>[:reduce, 84], :DIVIDE=>[:reduce, 84], :MOD=>[:reduce, 84], :LSHIFT=>[:reduce, 84], :RSHIFT=>[:reduce, 84], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 84], :RBRK=>[:reduce, 84], :COMP=>[:reduce, 84], :NCMP=>[:reduce, 84], :LAND=>[:reduce, 84], :AMBER=>[:reduce, 84], :LOR=>[:reduce, 84], :BOR=>[:reduce, 84], :SEMICOLON=>[:reduce, 84], :RPAREN=>[:reduce, 84], :WHILE=>[:reduce, 84], :RBRACK=>[:reduce, 84], :COMMA=>[:reduce, 84], :ELSE=>[:reduce, 84]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 85], :MINUS=>[:reduce, 85], :STAR=>[:reduce, 85], :DIVIDE=>[:reduce, 85], :MOD=>[:reduce, 85], :LSHIFT=>[:reduce, 85], :RSHIFT=>[:reduce, 85], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 85], :RBRK=>[:reduce, 85], :COMP=>[:reduce, 85], :NCMP=>[:reduce, 85], :LAND=>[:reduce, 85], :AMBER=>[:reduce, 85], :LOR=>[:reduce, 85], :BOR=>[:reduce, 85], :SEMICOLON=>[:reduce, 85], :RPAREN=>[:reduce, 85], :WHILE=>[:reduce, 85], :RBRACK=>[:reduce, 85], :COMMA=>[:reduce, 85], :ELSE=>[:reduce, 85]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 86], :MINUS=>[:reduce, 86], :STAR=>[:reduce, 86], :DIVIDE=>[:reduce, 86], :MOD=>[:reduce, 86], :LSHIFT=>[:reduce, 86], :RSHIFT=>[:reduce, 86], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 86], :RBRK=>[:reduce, 86], :COMP=>[:reduce, 86], :NCMP=>[:reduce, 86], :LAND=>[:reduce, 86], :AMBER=>[:reduce, 86], :LOR=>[:reduce, 86], :BOR=>[:reduce, 86], :SEMICOLON=>[:reduce, 86], :RPAREN=>[:reduce, 86], :WHILE=>[:reduce, 86], :RBRACK=>[:reduce, 86], :COMMA=>[:reduce, 86], :ELSE=>[:reduce, 86]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 87], :MINUS=>[:reduce, 87], :STAR=>[:reduce, 87], :DIVIDE=>[:reduce, 87], :MOD=>[:reduce, 87], :LSHIFT=>[:reduce, 87], :RSHIFT=>[:reduce, 87], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 87], :RBRK=>[:reduce, 87], :COMP=>[:reduce, 87], :NCMP=>[:reduce, 87], :LAND=>[:reduce, 87], :AMBER=>[:reduce, 87], :LOR=>[:reduce, 87], :BOR=>[:reduce, 87], :SEMICOLON=>[:reduce, 87], :RPAREN=>[:reduce, 87], :WHILE=>[:reduce, 87], :RBRACK=>[:reduce, 87], :COMMA=>[:reduce, 87], :ELSE=>[:reduce, 87]}, {:SEMICOLON=>[:reduce, 100], :LBRACK=>[:reduce, 100], :LPAREN=>[:reduce, 100], :PLUS=>[:reduce, 100], :MINUS=>[:reduce, 100], :STAR=>[:reduce, 100], :DIVIDE=>[:reduce, 100], :MOD=>[:reduce, 100], :LSHIFT=>[:reduce, 100], :RSHIFT=>[:reduce, 100], :DPLUS=>[:reduce, 100], :DMINUS=>[:reduce, 100], :LBRK=>[:reduce, 100], :RBRK=>[:reduce, 100], :COMP=>[:reduce, 100], :NCMP=>[:reduce, 100], :LAND=>[:reduce, 100], :AMBER=>[:reduce, 100], :LOR=>[:reduce, 100], :BOR=>[:reduce, 100], :STRING=>[:reduce, 100], :RPAREN=>[:reduce, 100], :EQUALS=>[:reduce, 100], :WHILE=>[:reduce, 100], :RBRACK=>[:reduce, 100], :COMMA=>[:reduce, 100], :ELSE=>[:reduce, 100]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 102], :MINUS=>[:reduce, 102], :STAR=>[:reduce, 102], :DIVIDE=>[:reduce, 102], :MOD=>[:reduce, 102], :LSHIFT=>[:reduce, 102], :RSHIFT=>[:reduce, 102], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 102], :RBRK=>[:reduce, 102], :COMP=>[:reduce, 102], :NCMP=>[:reduce, 102], :LAND=>[:reduce, 102], :AMBER=>[:reduce, 102], :LOR=>[:reduce, 102], :BOR=>[:reduce, 102], :SEMICOLON=>[:reduce, 102], :RPAREN=>[:reduce, 102], :WHILE=>[:reduce, 102], :RBRACK=>[:reduce, 102], :COMMA=>[:reduce, 102], :ELSE=>[:reduce, 102]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 103], :MINUS=>[:reduce, 103], :STAR=>[:reduce, 103], :DIVIDE=>[:reduce, 103], :MOD=>[:reduce, 103], :LSHIFT=>[:reduce, 103], :RSHIFT=>[:reduce, 103], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 103], :RBRK=>[:reduce, 103], :COMP=>[:reduce, 103], :NCMP=>[:reduce, 103], :LAND=>[:reduce, 103], :AMBER=>[:reduce, 103], :LOR=>[:reduce, 103], :BOR=>[:reduce, 103], :SEMICOLON=>[:reduce, 103], :RPAREN=>[:reduce, 103], :WHILE=>[:reduce, 103], :RBRACK=>[:reduce, 103], :COMMA=>[:reduce, 103], :ELSE=>[:reduce, 103]}, {:"function.body.expression"=>[:state, 198], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 199], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:WHILE=>[:state, 200]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :WHILE=>[:reduce, 138], :ELSE=>[:reduce, 138], :SEMICOLON=>[:reduce, 138]}, {:"function.body"=>[:state, 201], :"function.body.parts.maybe"=>[:state, 36], :"function.body.parts"=>[:state, 37], :"function.body.part"=>[:state, 38], :"function.body.declare"=>[:state, 39], :"function.body.expression"=>[:state, 40], :"function.body.control"=>[:state, 41], :preprocessor=>[:state, 42], :IDENTIFIER=>[:state, 43], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :"control.if"=>[:state, 51], :"control.while"=>[:state, 52], :"control.for"=>[:state, 53], :"control.goto"=>[:state, 54], :"control.label"=>[:state, 55], :"control.return"=>[:state, 56], :CONTINUE=>[:state, 57], :BREAK=>[:state, 58], :HASH=>[:state, 17], :CARET=>[:state, 59], :AMBER=>[:state, 60], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :IF=>[:state, 79], :WHILE=>[:state, 80], :DO=>[:state, 81], :FOR=>[:state, 82], :GOTO=>[:state, 83], :LABEL=>[:state, 84], :RETURN=>[:state, 85], :STRING=>[:state, 86], :RBRACE=>[:reduce, 53]}, {:"control.for.compound"=>[:state, 202], :"function.body.expression"=>[:state, 203], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:SEMICOLON=>[:reduce, 134]}, {:COLON=>[:state, 204]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 136]}, {:SEMICOLON=>[:reduce, 137]}, {:RBRACE=>[:state, 205]}, {:RBRACE=>[:reduce, 32]}, {:"struct.part"=>[:state, 206], :"class.attribute"=>[:state, 155], :preprocessor=>[:state, 156], :IDENTIFIER=>[:state, 103], :HASH=>[:state, 17], :RBRACE=>[:reduce, 33]}, {:RBRACE=>[:reduce, 36], :IDENTIFIER=>[:reduce, 36], :HASH=>[:reduce, 36]}, {:RBRACE=>[:reduce, 37], :IDENTIFIER=>[:reduce, 37], :HASH=>[:reduce, 37]}, {:RBRACE=>[:reduce, 38], :IDENTIFIER=>[:reduce, 38], :HASH=>[:reduce, 38]}, {:RBRACE=>[:state, 207]}, {:RBRACE=>[:reduce, 40]}, {:"union.part"=>[:state, 208], :"class.attribute"=>[:state, 161], :preprocessor=>[:state, 162], :IDENTIFIER=>[:state, 103], :HASH=>[:state, 17], :RBRACE=>[:reduce, 41]}, {:RBRACE=>[:reduce, 44], :IDENTIFIER=>[:reduce, 44], :HASH=>[:reduce, 44]}, {:RBRACE=>[:reduce, 45], :IDENTIFIER=>[:reduce, 45], :HASH=>[:reduce, 45]}, {:RBRACE=>[:reduce, 46], :IDENTIFIER=>[:reduce, 46], :HASH=>[:reduce, 46]}, {:SEMICOLON=>[:state, 209], :CARET=>[:state, 24]}, {:RPAREN=>[:state, 210]}, {:"function.arguments.maybe"=>[:state, 211], :"function.arguments"=>[:state, 93], :"function.argument"=>[:state, 94], :IDENTIFIER=>[:state, 95], :RPAREN=>[:reduce, 14]}, {:COLON=>[:state, 212]}, {:"function.argument"=>[:state, 213], :IDENTIFIER=>[:state, 95]}, {:type=>[:state, 214], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:$end=>[:reduce, 18], :FUNCTION=>[:reduce, 18], :CLASS=>[:reduce, 18], :TYPEDEF=>[:reduce, 18], :HASH=>[:reduce, 18]}, {:RBRACE=>[:reduce, 24], :IDENTIFIER=>[:reduce, 24], :FUNC=>[:reduce, 24], :HASH=>[:reduce, 24]}, {:type=>[:state, 215], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:LPAREN=>[:state, 216]}, {:RBRACK=>[:state, 217], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:RPAREN=>[:state, 218]}, {:COMMA=>[:state, 219], :RPAREN=>[:reduce, 114]}, {:RPAREN=>[:reduce, 117], :COMMA=>[:reduce, 117]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :RPAREN=>[:reduce, 118], :COMMA=>[:reduce, 118]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 75], :MINUS=>[:reduce, 75], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:reduce, 75], :RSHIFT=>[:reduce, 75], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 75], :RBRK=>[:reduce, 75], :COMP=>[:reduce, 75], :NCMP=>[:reduce, 75], :LAND=>[:reduce, 75], :AMBER=>[:reduce, 75], :LOR=>[:reduce, 75], :BOR=>[:reduce, 75], :SEMICOLON=>[:reduce, 75], :RPAREN=>[:reduce, 75], :WHILE=>[:reduce, 75], :RBRACK=>[:reduce, 75], :COMMA=>[:reduce, 75], :ELSE=>[:reduce, 75]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 76], :MINUS=>[:reduce, 76], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:reduce, 76], :RSHIFT=>[:reduce, 76], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 76], :RBRK=>[:reduce, 76], :COMP=>[:reduce, 76], :NCMP=>[:reduce, 76], :LAND=>[:reduce, 76], :AMBER=>[:reduce, 76], :LOR=>[:reduce, 76], :BOR=>[:reduce, 76], :SEMICOLON=>[:reduce, 76], :RPAREN=>[:reduce, 76], :WHILE=>[:reduce, 76], :RBRACK=>[:reduce, 76], :COMMA=>[:reduce, 76], :ELSE=>[:reduce, 76]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 77], :MINUS=>[:reduce, 77], :STAR=>[:reduce, 77], :DIVIDE=>[:reduce, 77], :MOD=>[:reduce, 77], :LSHIFT=>[:reduce, 77], :RSHIFT=>[:reduce, 77], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 77], :RBRK=>[:reduce, 77], :COMP=>[:reduce, 77], :NCMP=>[:reduce, 77], :LAND=>[:reduce, 77], :AMBER=>[:reduce, 77], :LOR=>[:reduce, 77], :BOR=>[:reduce, 77], :SEMICOLON=>[:reduce, 77], :RPAREN=>[:reduce, 77], :WHILE=>[:reduce, 77], :RBRACK=>[:reduce, 77], :COMMA=>[:reduce, 77], :ELSE=>[:reduce, 77]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 78], :MINUS=>[:reduce, 78], :STAR=>[:reduce, 78], :DIVIDE=>[:reduce, 78], :MOD=>[:reduce, 78], :LSHIFT=>[:reduce, 78], :RSHIFT=>[:reduce, 78], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 78], :RBRK=>[:reduce, 78], :COMP=>[:reduce, 78], :NCMP=>[:reduce, 78], :LAND=>[:reduce, 78], :AMBER=>[:reduce, 78], :LOR=>[:reduce, 78], :BOR=>[:reduce, 78], :SEMICOLON=>[:reduce, 78], :RPAREN=>[:reduce, 78], :WHILE=>[:reduce, 78], :RBRACK=>[:reduce, 78], :COMMA=>[:reduce, 78], :ELSE=>[:reduce, 78]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:reduce, 79], :MINUS=>[:reduce, 79], :STAR=>[:reduce, 79], :DIVIDE=>[:reduce, 79], :MOD=>[:reduce, 79], :LSHIFT=>[:reduce, 79], :RSHIFT=>[:reduce, 79], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 79], :RBRK=>[:reduce, 79], :COMP=>[:reduce, 79], :NCMP=>[:reduce, 79], :LAND=>[:reduce, 79], :AMBER=>[:reduce, 79], :LOR=>[:reduce, 79], :BOR=>[:reduce, 79], :SEMICOLON=>[:reduce, 79], :RPAREN=>[:reduce, 79], :WHILE=>[:reduce, 79], :RBRACK=>[:reduce, 79], :COMMA=>[:reduce, 79], :ELSE=>[:reduce, 79]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:reduce, 80], :RSHIFT=>[:reduce, 80], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 80], :RBRK=>[:reduce, 80], :COMP=>[:reduce, 80], :NCMP=>[:reduce, 80], :LAND=>[:reduce, 80], :AMBER=>[:reduce, 80], :LOR=>[:reduce, 80], :BOR=>[:reduce, 80], :SEMICOLON=>[:reduce, 80], :RPAREN=>[:reduce, 80], :WHILE=>[:reduce, 80], :RBRACK=>[:reduce, 80], :COMMA=>[:reduce, 80], :ELSE=>[:reduce, 80]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:reduce, 81], :RSHIFT=>[:reduce, 81], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 81], :RBRK=>[:reduce, 81], :COMP=>[:reduce, 81], :NCMP=>[:reduce, 81], :LAND=>[:reduce, 81], :AMBER=>[:reduce, 81], :LOR=>[:reduce, 81], :BOR=>[:reduce, 81], :SEMICOLON=>[:reduce, 81], :RPAREN=>[:reduce, 81], :WHILE=>[:reduce, 81], :RBRACK=>[:reduce, 81], :COMMA=>[:reduce, 81], :ELSE=>[:reduce, 81]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 104], :RBRK=>[:reduce, 104], :COMP=>[:reduce, 104], :NCMP=>[:reduce, 104], :LAND=>[:reduce, 104], :AMBER=>[:reduce, 104], :LOR=>[:reduce, 104], :BOR=>[:reduce, 104], :SEMICOLON=>[:reduce, 104], :RPAREN=>[:reduce, 104], :WHILE=>[:reduce, 104], :RBRACK=>[:reduce, 104], :COMMA=>[:reduce, 104], :ELSE=>[:reduce, 104]}, {:"function.body.expression"=>[:state, 220], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 105], :RBRK=>[:reduce, 105], :COMP=>[:reduce, 105], :NCMP=>[:reduce, 105], :LAND=>[:reduce, 105], :AMBER=>[:reduce, 105], :LOR=>[:reduce, 105], :BOR=>[:reduce, 105], :SEMICOLON=>[:reduce, 105], :RPAREN=>[:reduce, 105], :WHILE=>[:reduce, 105], :RBRACK=>[:reduce, 105], :COMMA=>[:reduce, 105], :ELSE=>[:reduce, 105]}, {:"function.body.expression"=>[:state, 221], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:reduce, 108], :NCMP=>[:reduce, 108], :LAND=>[:reduce, 108], :AMBER=>[:reduce, 108], :LOR=>[:reduce, 108], :BOR=>[:reduce, 108], :SEMICOLON=>[:reduce, 108], :RPAREN=>[:reduce, 108], :WHILE=>[:reduce, 108], :RBRACK=>[:reduce, 108], :COMMA=>[:reduce, 108], :ELSE=>[:reduce, 108]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:reduce, 109], :NCMP=>[:reduce, 109], :LAND=>[:reduce, 109], :AMBER=>[:reduce, 109], :LOR=>[:reduce, 109], :BOR=>[:reduce, 109], :SEMICOLON=>[:reduce, 109], :RPAREN=>[:reduce, 109], :WHILE=>[:reduce, 109], :RBRACK=>[:reduce, 109], :COMMA=>[:reduce, 109], :ELSE=>[:reduce, 109]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:reduce, 110], :AMBER=>[:state, 125], :LOR=>[:reduce, 110], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 110], :RPAREN=>[:reduce, 110], :WHILE=>[:reduce, 110], :RBRACK=>[:reduce, 110], :COMMA=>[:reduce, 110], :ELSE=>[:reduce, 110]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:reduce, 111], :AMBER=>[:reduce, 111], :LOR=>[:reduce, 111], :BOR=>[:reduce, 111], :SEMICOLON=>[:reduce, 111], :RPAREN=>[:reduce, 111], :WHILE=>[:reduce, 111], :RBRACK=>[:reduce, 111], :COMMA=>[:reduce, 111], :ELSE=>[:reduce, 111]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:reduce, 112], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 112], :RPAREN=>[:reduce, 112], :WHILE=>[:reduce, 112], :RBRACK=>[:reduce, 112], :COMMA=>[:reduce, 112], :ELSE=>[:reduce, 112]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:reduce, 113], :AMBER=>[:state, 125], :LOR=>[:reduce, 113], :BOR=>[:reduce, 113], :SEMICOLON=>[:reduce, 113], :RPAREN=>[:reduce, 113], :WHILE=>[:reduce, 113], :RBRACK=>[:reduce, 113], :COMMA=>[:reduce, 113], :ELSE=>[:reduce, 113]}, {:EQUALS=>[:state, 222], :CARET=>[:state, 24], :SEMICOLON=>[:reduce, 67]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 69], :RPAREN=>[:reduce, 69], :WHILE=>[:reduce, 69], :RBRACK=>[:reduce, 69], :COMMA=>[:reduce, 69], :ELSE=>[:reduce, 69]}, {:SEMICOLON=>[:reduce, 66], :LBRACK=>[:reduce, 66], :LPAREN=>[:reduce, 66], :PLUS=>[:reduce, 66], :MINUS=>[:reduce, 66], :STAR=>[:reduce, 66], :DIVIDE=>[:reduce, 66], :MOD=>[:reduce, 66], :LSHIFT=>[:reduce, 66], :RSHIFT=>[:reduce, 66], :DPLUS=>[:reduce, 66], :DMINUS=>[:reduce, 66], :LBRK=>[:reduce, 66], :RBRK=>[:reduce, 66], :COMP=>[:reduce, 66], :NCMP=>[:reduce, 66], :LAND=>[:reduce, 66], :AMBER=>[:reduce, 66], :LOR=>[:reduce, 66], :BOR=>[:reduce, 66], :RPAREN=>[:reduce, 66], :EQUALS=>[:reduce, 66], :WHILE=>[:reduce, 66], :RBRACK=>[:reduce, 66], :COMMA=>[:reduce, 66], :ELSE=>[:reduce, 66]}, {:RPAREN=>[:state, 223], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:RPAREN=>[:state, 224], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:LPAREN=>[:state, 225]}, {:RBRACE=>[:state, 226]}, {:SEMICOLON=>[:state, 227]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 133], :RPAREN=>[:reduce, 133]}, {:"function.body.expression"=>[:state, 228], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:$end=>[:reduce, 31], :FUNCTION=>[:reduce, 31], :CLASS=>[:reduce, 31], :TYPEDEF=>[:reduce, 31], :HASH=>[:reduce, 31], :CARET=>[:reduce, 31], :SEMICOLON=>[:reduce, 31], :EQUALS=>[:reduce, 31], :RPAREN=>[:reduce, 31], :COMMA=>[:reduce, 31], :LBRACE=>[:reduce, 31]}, {:RBRACE=>[:reduce, 35], :IDENTIFIER=>[:reduce, 35], :HASH=>[:reduce, 35]}, {:$end=>[:reduce, 39], :FUNCTION=>[:reduce, 39], :CLASS=>[:reduce, 39], :TYPEDEF=>[:reduce, 39], :HASH=>[:reduce, 39], :CARET=>[:reduce, 39], :SEMICOLON=>[:reduce, 39], :EQUALS=>[:reduce, 39], :RPAREN=>[:reduce, 39], :COMMA=>[:reduce, 39], :LBRACE=>[:reduce, 39]}, {:RBRACE=>[:reduce, 43], :IDENTIFIER=>[:reduce, 43], :HASH=>[:reduce, 43]}, {:$end=>[:reduce, 142], :FUNCTION=>[:reduce, 142], :CLASS=>[:reduce, 142], :TYPEDEF=>[:reduce, 142], :HASH=>[:reduce, 142]}, {:COLON=>[:state, 229]}, {:RPAREN=>[:state, 230]}, {:type=>[:state, 231], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:RPAREN=>[:reduce, 15], :COMMA=>[:reduce, 15]}, {:CARET=>[:state, 24], :RPAREN=>[:reduce, 17], :COMMA=>[:reduce, 17]}, {:SEMICOLON=>[:state, 232], :CARET=>[:state, 24]}, {:"function.arguments.maybe"=>[:state, 233], :"function.arguments"=>[:state, 93], :"function.argument"=>[:state, 94], :IDENTIFIER=>[:state, 95], :RPAREN=>[:reduce, 14]}, {:SEMICOLON=>[:reduce, 72], :LBRACK=>[:reduce, 72], :LPAREN=>[:reduce, 72], :PLUS=>[:reduce, 72], :MINUS=>[:reduce, 72], :STAR=>[:reduce, 72], :DIVIDE=>[:reduce, 72], :MOD=>[:reduce, 72], :LSHIFT=>[:reduce, 72], :RSHIFT=>[:reduce, 72], :DPLUS=>[:reduce, 72], :DMINUS=>[:reduce, 72], :LBRK=>[:reduce, 72], :RBRK=>[:reduce, 72], :COMP=>[:reduce, 72], :NCMP=>[:reduce, 72], :LAND=>[:reduce, 72], :AMBER=>[:reduce, 72], :LOR=>[:reduce, 72], :BOR=>[:reduce, 72], :EQUALS=>[:reduce, 72], :RPAREN=>[:reduce, 72], :WHILE=>[:reduce, 72], :RBRACK=>[:reduce, 72], :COMMA=>[:reduce, 72], :ELSE=>[:reduce, 72]}, {:SEMICOLON=>[:reduce, 74], :LBRACK=>[:reduce, 74], :LPAREN=>[:reduce, 74], :PLUS=>[:reduce, 74], :MINUS=>[:reduce, 74], :STAR=>[:reduce, 74], :DIVIDE=>[:reduce, 74], :MOD=>[:reduce, 74], :LSHIFT=>[:reduce, 74], :RSHIFT=>[:reduce, 74], :DPLUS=>[:reduce, 74], :DMINUS=>[:reduce, 74], :LBRK=>[:reduce, 74], :RBRK=>[:reduce, 74], :COMP=>[:reduce, 74], :NCMP=>[:reduce, 74], :LAND=>[:reduce, 74], :AMBER=>[:reduce, 74], :LOR=>[:reduce, 74], :BOR=>[:reduce, 74], :RPAREN=>[:reduce, 74], :EQUALS=>[:reduce, 74], :WHILE=>[:reduce, 74], :RBRACK=>[:reduce, 74], :COMMA=>[:reduce, 74], :ELSE=>[:reduce, 74]}, {:"function.body.call.argument"=>[:state, 234], :"function.body.expression"=>[:state, 177], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 106], :RBRK=>[:reduce, 106], :COMP=>[:reduce, 106], :NCMP=>[:reduce, 106], :LAND=>[:reduce, 106], :AMBER=>[:reduce, 106], :LOR=>[:reduce, 106], :BOR=>[:reduce, 106], :SEMICOLON=>[:reduce, 106], :RPAREN=>[:reduce, 106], :WHILE=>[:reduce, 106], :RBRACK=>[:reduce, 106], :COMMA=>[:reduce, 106], :ELSE=>[:reduce, 106]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:reduce, 107], :RBRK=>[:reduce, 107], :COMP=>[:reduce, 107], :NCMP=>[:reduce, 107], :LAND=>[:reduce, 107], :AMBER=>[:reduce, 107], :LOR=>[:reduce, 107], :BOR=>[:reduce, 107], :SEMICOLON=>[:reduce, 107], :RPAREN=>[:reduce, 107], :WHILE=>[:reduce, 107], :RBRACK=>[:reduce, 107], :COMMA=>[:reduce, 107], :ELSE=>[:reduce, 107]}, {:"function.body.expression"=>[:state, 235], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"control.block"=>[:state, 236], :"function.body.expression"=>[:state, 144], :LBRACE=>[:state, 145], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"control.block"=>[:state, 237], :"function.body.expression"=>[:state, 144], :LBRACE=>[:state, 145], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body.expression"=>[:state, 238], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:WHILE=>[:reduce, 139], :ELSE=>[:reduce, 139], :SEMICOLON=>[:reduce, 139]}, {:"function.body.expression"=>[:state, 239], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 135]}, {:type=>[:state, 240], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:COLON=>[:state, 241]}, {:LBRACE=>[:state, 242], :CARET=>[:state, 24]}, {:RBRACE=>[:reduce, 29], :IDENTIFIER=>[:reduce, 29], :FUNC=>[:reduce, 29], :HASH=>[:reduce, 29]}, {:RPAREN=>[:state, 243]}, {:RPAREN=>[:reduce, 116], :COMMA=>[:reduce, 116]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 68]}, {:"control.if.cont"=>[:state, 244], :ELSE=>[:state, 245]}, {:SEMICOLON=>[:reduce, 130]}, {:LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127], :SEMICOLON=>[:reduce, 131]}, {:SEMICOLON=>[:state, 246], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:SEMICOLON=>[:state, 247], :CARET=>[:state, 24]}, {:type=>[:state, 248], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:"function.body"=>[:state, 249], :"function.body.parts.maybe"=>[:state, 36], :"function.body.parts"=>[:state, 37], :"function.body.part"=>[:state, 38], :"function.body.declare"=>[:state, 39], :"function.body.expression"=>[:state, 40], :"function.body.control"=>[:state, 41], :preprocessor=>[:state, 42], :IDENTIFIER=>[:state, 43], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :"control.if"=>[:state, 51], :"control.while"=>[:state, 52], :"control.for"=>[:state, 53], :"control.goto"=>[:state, 54], :"control.label"=>[:state, 55], :"control.return"=>[:state, 56], :CONTINUE=>[:state, 57], :BREAK=>[:state, 58], :HASH=>[:state, 17], :CARET=>[:state, 59], :AMBER=>[:state, 60], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :IF=>[:state, 79], :WHILE=>[:state, 80], :DO=>[:state, 81], :FOR=>[:state, 82], :GOTO=>[:state, 83], :LABEL=>[:state, 84], :RETURN=>[:state, 85], :STRING=>[:state, 86], :RBRACE=>[:reduce, 53]}, {:COLON=>[:state, 250]}, {:SEMICOLON=>[:reduce, 127]}, {:IF=>[:state, 251], :"control.block"=>[:state, 252], :"function.body.expression"=>[:state, 144], :LBRACE=>[:state, 145], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"control.for.compound"=>[:state, 253], :"function.body.expression"=>[:state, 203], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:$end=>[:reduce, 143], :FUNCTION=>[:reduce, 143], :CLASS=>[:reduce, 143], :TYPEDEF=>[:reduce, 143], :HASH=>[:reduce, 143]}, {:SEMICOLON=>[:state, 254], :CARET=>[:state, 24]}, {:RBRACE=>[:state, 255]}, {:type=>[:state, 256], :"class.name"=>[:state, 10], :struct=>[:state, 11], :union=>[:state, 12], :IDENTIFIER=>[:state, 18], :STRUCT=>[:state, 19], :UNION=>[:state, 20]}, {:LPAREN=>[:state, 257]}, {:SEMICOLON=>[:reduce, 129]}, {:RPAREN=>[:state, 258]}, {:$end=>[:reduce, 144], :FUNCTION=>[:reduce, 144], :CLASS=>[:reduce, 144], :TYPEDEF=>[:reduce, 144], :HASH=>[:reduce, 144]}, {:$end=>[:reduce, 12], :FUNCTION=>[:reduce, 12], :CLASS=>[:reduce, 12], :TYPEDEF=>[:reduce, 12], :HASH=>[:reduce, 12]}, {:LBRACE=>[:state, 259], :CARET=>[:state, 24]}, {:"function.body.expression"=>[:state, 260], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"control.block"=>[:state, 261], :"function.body.expression"=>[:state, 144], :LBRACE=>[:state, 145], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:"function.body"=>[:state, 262], :"function.body.parts.maybe"=>[:state, 36], :"function.body.parts"=>[:state, 37], :"function.body.part"=>[:state, 38], :"function.body.declare"=>[:state, 39], :"function.body.expression"=>[:state, 40], :"function.body.control"=>[:state, 41], :preprocessor=>[:state, 42], :IDENTIFIER=>[:state, 43], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :"control.if"=>[:state, 51], :"control.while"=>[:state, 52], :"control.for"=>[:state, 53], :"control.goto"=>[:state, 54], :"control.label"=>[:state, 55], :"control.return"=>[:state, 56], :CONTINUE=>[:state, 57], :BREAK=>[:state, 58], :HASH=>[:state, 17], :CARET=>[:state, 59], :AMBER=>[:state, 60], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :IF=>[:state, 79], :WHILE=>[:state, 80], :DO=>[:state, 81], :FOR=>[:state, 82], :GOTO=>[:state, 83], :LABEL=>[:state, 84], :RETURN=>[:state, 85], :STRING=>[:state, 86], :RBRACE=>[:reduce, 53]}, {:RPAREN=>[:state, 263], :LBRACK=>[:state, 109], :LPAREN=>[:state, 110], :PLUS=>[:state, 111], :MINUS=>[:state, 112], :STAR=>[:state, 113], :DIVIDE=>[:state, 114], :MOD=>[:state, 115], :LSHIFT=>[:state, 116], :RSHIFT=>[:state, 117], :DPLUS=>[:state, 118], :DMINUS=>[:state, 119], :LBRK=>[:state, 120], :RBRK=>[:state, 121], :COMP=>[:state, 122], :NCMP=>[:state, 123], :LAND=>[:state, 124], :AMBER=>[:state, 125], :LOR=>[:state, 126], :BOR=>[:state, 127]}, {:SEMICOLON=>[:reduce, 132]}, {:RBRACE=>[:state, 264]}, {:"control.block"=>[:state, 265], :"function.body.expression"=>[:state, 144], :LBRACE=>[:state, 145], :"function.body.assignment"=>[:state, 44], :"function.body.reference"=>[:state, 45], :"function.body.call"=>[:state, 46], :"function.body.math"=>[:state, 47], :"function.body.literal"=>[:state, 48], :"function.body.logic"=>[:state, 49], :LPAREN=>[:state, 50], :CARET=>[:state, 59], :AMBER=>[:state, 60], :IDENTIFIER=>[:state, 43], :DMINUS=>[:state, 61], :DPLUS=>[:state, 62], :PLUS=>[:state, 63], :MINUS=>[:state, 64], :NUMBER=>[:state, 65], :FLOAT=>[:state, 66], :DOUBLE=>[:state, 67], :UNUMBER=>[:state, 68], :SNUMBER=>[:state, 69], :USNUMBER=>[:state, 70], :LNUMBER=>[:state, 71], :ULNUMBER=>[:state, 72], :LLNUMBER=>[:state, 73], :ULLNUMBER=>[:state, 74], :CHARACTER=>[:state, 75], :"function.body.string"=>[:state, 76], :LNOT=>[:state, 77], :BNOT=>[:state, 78], :STRING=>[:state, 86]}, {:RBRACE=>[:reduce, 30], :IDENTIFIER=>[:reduce, 30], :FUNC=>[:reduce, 30], :HASH=>[:reduce, 30]}, {:"control.if.cont"=>[:state, 266], :ELSE=>[:state, 245]}, {:SEMICOLON=>[:reduce, 128]}] .freeze # The default action that is taken for most reductions. # # @return [Proc] DEFAULT_PROC = proc { |_| _ } # A list of all of the productions. Only includes the left-hand side, # the number of tokens on the right-hand side, and the block to call # on reduction. # # @return [Array>] PRODUCTIONS = [[:$start, 2, DEFAULT_PROC], [:body, 1, proc { |a| [:root, a] }], [:preprocessor, 4, proc { |_, a, b, _| [:pre, a, b] }], [:"parts.maybe", 1, DEFAULT_PROC], [:"parts.maybe", 0, DEFAULT_PROC], [:parts, 2, proc { |a, b| a << b }], [:parts, 1, proc { |a| [a] }], [:parts, 1, proc { |a| [a] }], [:part, 1, DEFAULT_PROC], [:part, 1, DEFAULT_PROC], [:part, 1, DEFAULT_PROC], [:part, 1, DEFAULT_PROC], [:function, 10, proc { |_, a, _, b, _, _, c, _, d, _| [:func, a, b, c, d] }], [:"function.arguments.maybe", 1, DEFAULT_PROC], [:"function.arguments.maybe", 0, DEFAULT_PROC], [:"function.arguments", 3, proc { |a, _, b| a << b }], [:"function.arguments", 1, DEFAULT_PROC], [:"function.argument", 3, proc { |a, _, b| [:fnarg, a, b] }], [:class, 5, proc { |_, a, _, b, _| [:class, a, b] }], [:"class.name", 3, proc { |a, _, b| a << b }], [:"class.name", 1, proc { |a| [:clname, a] }], [:"class.body", 1, DEFAULT_PROC], [:"class.parts.maybe", 1, DEFAULT_PROC], [:"class.parts.maybe", 0, DEFAULT_PROC], [:"class.parts", 2, proc { |a, b| a << b }], [:"class.parts", 1, proc { |a| [a] }], [:"class.part", 1, DEFAULT_PROC], [:"class.part", 1, DEFAULT_PROC], [:"class.part", 1, DEFAULT_PROC], [:"class.attribute", 4, proc { |a, _, b| [:clattr, a, b] }], [:"class.function", 10, proc { |_, a, _, b, _, _, c, _, d, _| [:clfunc, a, b, c, d] }], [:struct, 5, proc { |_, a, _, b, _| [:struct, a, b] }], [:"struct.body", 1, DEFAULT_PROC], [:"struct.parts.maybe", 1, DEFAULT_PROC], [:"struct.parts.maybe", 0, DEFAULT_PROC], [:"struct.parts", 2, proc { |a, b| a << b }], [:"struct.parts", 1, proc { |a| [a] }], [:"struct.part", 1, DEFAULT_PROC], [:"struct.part", 1, DEFAULT_PROC], [:union, 5, proc { |_, a, _, b, _| [:union, a, b] }], [:"union.body", 1, DEFAULT_PROC], [:"union.parts.maybe", 1, DEFAULT_PROC], [:"union.parts.maybe", 0, DEFAULT_PROC], [:"union.parts", 2, proc { |a, b| a << b }], [:"union.parts", 1, proc { |a| [a] }], [:"union.part", 1, DEFAULT_PROC], [:"union.part", 1, DEFAULT_PROC], [:type, 2, proc { |a| [:pointer, a] }], [:type, 1, DEFAULT_PROC], [:type, 1, DEFAULT_PROC], [:type, 1, DEFAULT_PROC], [:"function.body", 1, DEFAULT_PROC], [:"function.body.parts.maybe", 1, DEFAULT_PROC], [:"function.body.parts.maybe", 0, DEFAULT_PROC], [:"function.body.parts", 2, proc { |a, b| a << b }], [:"function.body.parts", 1, proc { |a| [a] }], [:"function.body.part", 2, DEFAULT_PROC], [:"function.body.part", 2, DEFAULT_PROC], [:"function.body.part", 2, DEFAULT_PROC], [:"function.body.part", 1, DEFAULT_PROC], [:"function.body.expression", 1, DEFAULT_PROC], [:"function.body.expression", 1, DEFAULT_PROC], [:"function.body.expression", 1, DEFAULT_PROC], [:"function.body.expression", 1, DEFAULT_PROC], [:"function.body.expression", 1, DEFAULT_PROC], [:"function.body.expression", 1, DEFAULT_PROC], [:"function.body.expression", 3, proc { |_, a, _| a }], [:"function.body.declare", 3, proc { |a, _, b| [:variable, a, b] }], [:"function.body.declare", 5, proc { |a, _, b, _, c| [:variable, a, b, c] }], [:"function.body.assignment", 3, proc { |a, _, b| [:assign, a, b] }], [:"function.body.reference", 2, proc { |_, a| [:deref, a] }], [:"function.body.reference", 2, proc { |_, a| [:ref, a] }], [:"function.body.reference", 4, proc { |a, _, b, _| [:brack, a, b] }], [:"function.body.reference", 1, DEFAULT_PROC], [:"function.body.call", 4, proc { |a, _, b, _| [:call, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:add, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:sub, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:mult, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:div, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:mod, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:lshift, a, b] }], [:"function.body.math", 3, proc { |a, _, b| [:rshift, a, b] }], [:"function.body.math", 2, proc { |a, _| [:sinc, a] }], [:"function.body.math", 2, proc { |a, _| [:sdec, a] }], [:"function.body.math", 2, proc { |_, a| [:pinc, a] }], [:"function.body.math", 2, proc { |_, a| [:pdec, a] }], [:"function.body.math", 2, proc { |_, a| [:uplus, a] }], [:"function.body.math", 2, proc { |_, a| [:uminus, a] }], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.literal", 1, DEFAULT_PROC], [:"function.body.string", 2, proc { |a, b| a << b }], [:"function.body.string", 1, proc { |a| [:strlist, a] }], [:"function.body.logic", 2, proc { |_, a| [:lnot, a] }], [:"function.body.logic", 2, proc { |_, a| [:bnot, a] }], [:"function.body.logic", 3, proc { |a, _, b| [:lt, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:gt, a, b] }], [:"function.body.logic", 4, proc { |a, _, b| [:lte, a, b] }], [:"function.body.logic", 4, proc { |a, _, b| [:gte, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:comp, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:ncmp, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:land, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:band, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:lor, a, b] }], [:"function.body.logic", 3, proc { |a, _, b| [:bor, a, b] }], [:"function.body.call.arguments.maybe", 1, DEFAULT_PROC], [:"function.body.call.arguments.maybe", 0, DEFAULT_PROC], [:"function.body.call.arguments", 3, proc { |a, _, b| a << b }], [:"function.body.call.arguments", 1, proc { |a| [a] }], [:"function.body.call.argument", 1, DEFAULT_PROC], [:"function.body.control", 1, DEFAULT_PROC], [:"function.body.control", 1, DEFAULT_PROC], [:"function.body.control", 1, DEFAULT_PROC], [:"function.body.control", 1, DEFAULT_PROC], [:"function.body.control", 1, DEFAULT_PROC], [:"function.body.control", 1, DEFAULT_PROC], [:"function.body.control", 1, proc { [:continue] }], [:"function.body.control", 1, proc { [:break] }], [:"control.if", 6, proc { |_, _, a, _, b, c| [:if, a, b, c] }], [:"control.if.cont", 7, proc { |_, _, _, a, _, b, c| [:elif, a, b, c] }], [:"control.if.cont", 2, proc { |_, a| [:else, a] }], [:"control.while", 5, proc { |_, _, a, _, b| [:while, a, b] }], [:"control.while", 5, proc { |_, b, _, _, a| [:rwhile, a, b] }], [:"control.for", 9, proc { |_, _, a, _, b, _, c, _, d| [:for, a, b, c, d] }], [:"control.for.compound", 1, DEFAULT_PROC], [:"control.goto", 2, proc { |_, a| [:goto, a] }], [:"control.label", 4, proc { |_, a, _, b| [:label, a, b] }], [:"control.return", 2, proc { |_, a| [:return, a] }], [:"control.return", 2, proc { [:return] }], [:"control.block", 1, DEFAULT_PROC], [:"control.block", 3, DEFAULT_PROC], [:typedef, 1, DEFAULT_PROC], [:typedef, 1, DEFAULT_PROC], [:"typedef.type", 5, proc { |_, a, _, b, _| [:type, a, b] }], [:"typedef.func", 8, proc { |*a| [:typefn, a[1], a[3], a[6]] }], [:"typedef.func", 9, proc { |*a| [:typefnp, a[1], a[4], a[7]] }]].freeze # Runs the parser. # # @param input [Array] the input to run the parser over. # @return [Object] the result of the accept. def parse(input) stack = [] stack.push([nil, 0]) last = nil input = input.to_a.dup until stack.empty? do last = parse_action(stack, input) end last end # Actually performs the parsing action on the given stack on input. # If you want to implement a push parser, than messing with this # method is probably the way to go. # # @param stack [Array>] the stack of the # parser. The actual order of the stack is important. # @param input [Array] the input to run the parser over. # The elements of this may be passed to the `type` method. # @return [Object] the result of the last accepting reduction. def parse_action(stack, input) last = nil peek_token = if input.empty? :$end else type(input.first) end action = ACTION_TABLE[stack.last.last].fetch(peek_token) do ACTION_TABLE[stack.last.last].fetch(:$default) end case action.first when :accept production = PRODUCTIONS[action.last] last = stack.pop(production[1]).first.first stack.pop when :reduce production = PRODUCTIONS[action.last] removing = stack.pop(production[1]) value = instance_exec(*removing.map(&:first), &production[2]) goto = ACTION_TABLE[stack.last.last][production[0]] stack.push([value, goto.last]) when :state stack.push([input.shift, action.last]) else raise NotImplementedError, "Unknown action #{action.first}" end last rescue KeyError => e peek = input.first if handle_error({ :stack => stack, :peek => peek_token, :remaining => input, :error => e, :line => line_of(peek), :column => column_of(peek), :expected => ACTION_TABLE[stack.last.last].keys }) retry else raise end end private def line_of(peek) if peek.respond_to?(:line) peek.line else 0 end end def column_of(peek) if peek.respond_to?(:column) peek.column else 0 end end def handle_error(data, _ = false) raise SyntaxError, "Unexpected token #{data[:peek]} on line #{data[:line]}, " \ "column #{data[:column]}; expected one of " \ "#{data[:expected].join(', ')}", data[:error].backtrace end def self.parse(tokens) new.parse(tokens) end def type(token) token.type end end end