
# parsetab.py
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_tabversion = '3.10'

_lr_method = 'LALR'

_lr_signature = 'startleftANDORleftGREATERSMALLERGEQUALSEQUALleftADDSUBTRACTleftMULTIPLYDIVIDEMODULUSADD AND BOOL CHAR COMMA DECLARE DECREMENT DIVIDE DO DOT EEQUALS ELSE EQUALS FLOAT GEQUAL GREATER ID IF INCREMENT INDEX INT LCURLY LIST LPARENTHESIS MODULUS MULTIPLY NOTEQUALS OR POP PRINT PUSH RCURLY RPARENTHESIS SEMIC SEQUAL SLICE SMALLER STRING SUBTRACT WHILE\n    start  : statements\n           | empty\n    \n    statements  : statements SEMIC statements\n                | statements\n    \n    statements  : statement SEMIC statement\n                | statement\n    \n    empty :\n    \n    statement : ID EQUALS expr\n    \n    statement : ID EQUALS ID\n    \n    statement : DECLARE ID EQUALS expr\n    \n    statement : DECLARE ID EQUALS ID\n    \n    statement : DECLARE ID\n    \n    statement : PRINT LPARENTHESIS ID RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr COMMA expr RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr COMMA expr COMMA expr RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr COMMA expr COMMA expr COMMA expr RPARENTHESIS\n    \n    statement : expr\n    expr : expr DIVIDE exprexpr : expr MULTIPLY exprexpr : expr ADD exprexpr : expr SUBTRACT expr\n    expr : expr MODULUS expr\n         | expr EEQUALS expr\n         | expr GREATER expr\n         | expr SMALLER expr\n         | expr AND expr\n         | expr OR expr\n         | expr NOTEQUALS expr\n         | expr GEQUAL expr\n         | expr SEQUAL expr\n    \n    expr : expr INCREMENT\n         | expr DECREMENT\n\n    \n    expr : ID\n    \n    expr : INT\n           | FLOAT\n           | STRING\n           | CHAR\n           | BOOL\n    \n    statement : IF expr LCURLY statement RCURLY\n              | IF expr LCURLY statement RCURLY ELSE LCURLY statement RCURLY\n    \n    statement : DO LCURLY statements RCURLY WHILE LPARENTHESIS expr RPARENTHESIS\n    \n    statement : LIST ID\n    \n    statement : ID DOT PUSH LPARENTHESIS expr RPARENTHESIS\n    \n    statement : ID DOT PUSH LPARENTHESIS ID RPARENTHESIS\n    \n    statement : ID DOT POP LPARENTHESIS RPARENTHESIS\n    \n    statement : ID DOT POP LPARENTHESIS expr RPARENTHESIS\n    \n    statement : ID DOT SLICE LPARENTHESIS expr COMMA expr RPARENTHESIS\n    \n    statement : ID DOT INDEX LPARENTHESIS expr RPARENTHESIS\n    '
    
_lr_action_items = {'$end':([0,1,2,3,4,5,6,12,13,14,15,16,34,35,36,39,41,42,43,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,72,73,74,75,81,86,88,89,90,92,94,101,103,105,107,108,],[-7,0,-1,-2,-6,-34,-18,-35,-36,-37,-38,-39,-32,-33,-12,-34,-43,-3,-5,-9,-8,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-11,-10,-13,-14,-46,-40,-45,-44,-47,-49,-15,-48,-16,-42,-41,-17,]),'ID':([0,7,9,11,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[5,36,39,41,5,5,44,39,39,39,39,39,39,39,39,39,39,39,39,39,64,5,72,5,79,39,39,39,39,39,39,39,5,39,]),'DECLARE':([0,17,18,40,66,99,],[7,7,7,7,7,7,]),'PRINT':([0,17,18,40,66,99,],[8,8,8,8,8,8,]),'IF':([0,17,18,40,66,99,],[9,9,9,9,9,9,]),'DO':([0,17,18,40,66,99,],[10,10,10,10,10,10,]),'LIST':([0,17,18,40,66,99,],[11,11,11,11,11,11,]),'INT':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,]),'FLOAT':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,]),'STRING':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,]),'CHAR':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,]),'BOOL':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,]),'SEMIC':([2,4,5,6,12,13,14,15,16,34,35,36,39,41,42,43,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,67,72,73,74,75,81,86,88,89,90,92,94,101,103,105,107,108,],[17,18,-34,-18,-35,-36,-37,-38,-39,-32,-33,-12,-34,-43,17,-5,-9,-8,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,17,-11,-10,-13,-14,-46,-40,-45,-44,-47,-49,-15,-48,-16,-42,-41,-17,]),'RCURLY':([4,5,6,12,13,14,15,16,34,35,36,39,41,42,43,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,67,72,73,74,75,77,81,86,88,89,90,92,94,101,103,104,105,107,108,],[-6,-34,-18,-35,-36,-37,-38,-39,-32,-33,-12,-34,-43,-3,-5,-9,-8,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,78,-11,-10,-13,-14,86,-46,-40,-45,-44,-47,-49,-15,-48,-16,107,-42,-41,-17,]),'EQUALS':([5,36,],[19,63,]),'DOT':([5,],[20,]),'DIVIDE':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,21,-35,-36,-37,-38,-39,-32,-33,21,-34,-34,21,-19,-20,21,21,-23,21,21,21,21,21,21,21,21,-34,21,-34,21,-34,21,21,21,21,21,21,21,21,21,]),'MULTIPLY':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,22,-35,-36,-37,-38,-39,-32,-33,22,-34,-34,22,-19,-20,22,22,-23,22,22,22,22,22,22,22,22,-34,22,-34,22,-34,22,22,22,22,22,22,22,22,22,]),'ADD':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,23,-35,-36,-37,-38,-39,-32,-33,23,-34,-34,23,-19,-20,-21,-22,-23,23,23,23,23,23,23,23,23,-34,23,-34,23,-34,23,23,23,23,23,23,23,23,23,]),'SUBTRACT':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,24,-35,-36,-37,-38,-39,-32,-33,24,-34,-34,24,-19,-20,-21,-22,-23,24,24,24,24,24,24,24,24,-34,24,-34,24,-34,24,24,24,24,24,24,24,24,24,]),'MODULUS':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,25,-35,-36,-37,-38,-39,-32,-33,25,-34,-34,25,-19,-20,25,25,-23,25,25,25,25,25,25,25,25,-34,25,-34,25,-34,25,25,25,25,25,25,25,25,25,]),'EEQUALS':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,26,-35,-36,-37,-38,-39,-32,-33,26,-34,-34,26,-19,-20,-21,-22,-23,26,-25,-26,-27,-28,26,-30,-31,-34,26,-34,26,-34,26,26,26,26,26,26,26,26,26,]),'GREATER':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,27,-35,-36,-37,-38,-39,-32,-33,27,-34,-34,27,-19,-20,-21,-22,-23,27,-25,-26,27,27,27,-30,-31,-34,27,-34,27,-34,27,27,27,27,27,27,27,27,27,]),'SMALLER':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,28,-35,-36,-37,-38,-39,-32,-33,28,-34,-34,28,-19,-20,-21,-22,-23,28,-25,-26,28,28,28,-30,-31,-34,28,-34,28,-34,28,28,28,28,28,28,28,28,28,]),'AND':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,29,-35,-36,-37,-38,-39,-32,-33,29,-34,-34,29,-19,-20,-21,-22,-23,29,-25,-26,-27,-28,29,-30,-31,-34,29,-34,29,-34,29,29,29,29,29,29,29,29,29,]),'OR':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,30,-35,-36,-37,-38,-39,-32,-33,30,-34,-34,30,-19,-20,-21,-22,-23,30,-25,-26,-27,-28,30,-30,-31,-34,30,-34,30,-34,30,30,30,30,30,30,30,30,30,]),'NOTEQUALS':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,31,-35,-36,-37,-38,-39,-32,-33,31,-34,-34,31,-19,-20,-21,-22,-23,31,-25,-26,-27,-28,31,-30,-31,-34,31,-34,31,-34,31,31,31,31,31,31,31,31,31,]),'GEQUAL':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,32,-35,-36,-37,-38,-39,-32,-33,32,-34,-34,32,-19,-20,-21,-22,-23,32,-25,-26,32,32,32,-30,-31,-34,32,-34,32,-34,32,32,32,32,32,32,32,32,32,]),'SEQUAL':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,33,-35,-36,-37,-38,-39,-32,-33,33,-34,-34,33,-19,-20,-21,-22,-23,33,-25,-26,33,33,33,-30,-31,-34,33,-34,33,-34,33,33,33,33,33,33,33,33,33,]),'INCREMENT':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,34,-35,-36,-37,-38,-39,-32,-33,34,-34,-34,34,-19,-20,-21,-22,-23,34,-25,-26,-27,-28,34,-30,-31,-34,34,-34,34,-34,34,34,34,34,34,34,34,34,34,]),'DECREMENT':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,35,-35,-36,-37,-38,-39,-32,-33,35,-34,-34,35,-19,-20,-21,-22,-23,35,-25,-26,-27,-28,35,-30,-31,-34,35,-34,35,-34,35,35,35,35,35,35,35,35,35,]),'LPARENTHESIS':([8,46,47,48,49,87,],[37,68,69,70,71,96,]),'LCURLY':([10,12,13,14,15,16,34,35,38,39,50,51,52,53,54,55,56,57,58,59,60,61,62,95,],[40,-35,-36,-37,-38,-39,-32,-33,66,-34,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,99,]),'RPARENTHESIS':([12,13,14,15,16,34,35,39,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,69,79,80,82,84,85,97,98,100,106,],[-35,-36,-37,-38,-39,-32,-33,-34,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,74,75,81,88,89,90,92,94,101,103,105,108,]),'COMMA':([12,13,14,15,16,34,35,39,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,83,85,98,],[-35,-36,-37,-38,-39,-32,-33,-34,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-34,76,91,93,102,]),'PUSH':([20,],[46,]),'POP':([20,],[47,]),'SLICE':([20,],[48,]),'INDEX':([20,],[49,]),'WHILE':([78,],[87,]),'ELSE':([86,],[95,]),}

_lr_action = {}
for _k, _v in _lr_action_items.items():
   for _x,_y in zip(_v[0],_v[1]):
      if not _x in _lr_action:  _lr_action[_x] = {}
      _lr_action[_x][_k] = _y
del _lr_action_items

_lr_goto_items = {'start':([0,],[1,]),'statements':([0,17,40,],[2,42,67,]),'empty':([0,],[3,]),'statement':([0,17,18,40,66,99,],[4,4,43,4,77,104,]),'expr':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[6,38,6,6,45,50,51,52,53,54,55,56,57,58,59,60,61,62,65,6,73,6,80,82,83,84,85,97,98,100,6,106,]),}

_lr_goto = {}
for _k, _v in _lr_goto_items.items():
   for _x, _y in zip(_v[0], _v[1]):
       if not _x in _lr_goto: _lr_goto[_x] = {}
       _lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [
  ("S' -> start","S'",1,None,None,None),
  ('start -> statements','start',1,'p_start','parser.py',20),
  ('start -> empty','start',1,'p_start','parser.py',21),
  ('statements -> statements SEMIC statements','statements',3,'p_statements_mul','parser.py',32),
  ('statements -> statements','statements',1,'p_statements_mul','parser.py',33),
  ('statements -> statement SEMIC statement','statements',3,'p_statements','parser.py',42),
  ('statements -> statement','statements',1,'p_statements','parser.py',43),
  ('empty -> <empty>','empty',0,'p_empty','parser.py',51),
  ('statement -> ID EQUALS expr','statement',3,'p_statement_equal','parser.py',57),
  ('statement -> ID EQUALS ID','statement',3,'p_statement_equal_ass','parser.py',63),
  ('statement -> DECLARE ID EQUALS expr','statement',4,'p_statement_declare','parser.py',69),
  ('statement -> DECLARE ID EQUALS ID','statement',4,'p_statement_declare_id','parser.py',75),
  ('statement -> DECLARE ID','statement',2,'p_statement_declare_only','parser.py',81),
  ('statement -> PRINT LPARENTHESIS ID RPARENTHESIS','statement',4,'p_statement_print','parser.py',87),
  ('statement -> PRINT LPARENTHESIS expr RPARENTHESIS','statement',4,'p_statement_print_expr','parser.py',93),
  ('statement -> PRINT LPARENTHESIS expr COMMA expr RPARENTHESIS','statement',6,'p_statement_print_2','parser.py',99),
  ('statement -> PRINT LPARENTHESIS expr COMMA expr COMMA expr RPARENTHESIS','statement',8,'p_statement_print_3','parser.py',105),
  ('statement -> PRINT LPARENTHESIS expr COMMA expr COMMA expr COMMA expr RPARENTHESIS','statement',10,'p_statement_print_4','parser.py',111),
  ('statement -> expr','statement',1,'p_statement','parser.py',117),
  ('expr -> expr DIVIDE expr','expr',3,'p_expr_divide','parser.py',123),
  ('expr -> expr MULTIPLY expr','expr',3,'p_expr_multiply','parser.py',127),
  ('expr -> expr ADD expr','expr',3,'p_expr_add','parser.py',131),
  ('expr -> expr SUBTRACT expr','expr',3,'p_expr_subtract','parser.py',135),
  ('expr -> expr MODULUS expr','expr',3,'p_binary_opr','parser.py',141),
  ('expr -> expr EEQUALS expr','expr',3,'p_binary_opr','parser.py',142),
  ('expr -> expr GREATER expr','expr',3,'p_binary_opr','parser.py',143),
  ('expr -> expr SMALLER expr','expr',3,'p_binary_opr','parser.py',144),
  ('expr -> expr AND expr','expr',3,'p_binary_opr','parser.py',145),
  ('expr -> expr OR expr','expr',3,'p_binary_opr','parser.py',146),
  ('expr -> expr NOTEQUALS expr','expr',3,'p_binary_opr','parser.py',147),
  ('expr -> expr GEQUAL expr','expr',3,'p_binary_opr','parser.py',148),
  ('expr -> expr SEQUAL expr','expr',3,'p_binary_opr','parser.py',149),
  ('expr -> expr INCREMENT','expr',2,'p_unary_opr','parser.py',155),
  ('expr -> expr DECREMENT','expr',2,'p_unary_opr','parser.py',156),
  ('expr -> ID','expr',1,'p_expr_ID','parser.py',164),
  ('expr -> INT','expr',1,'p_num','parser.py',170),
  ('expr -> FLOAT','expr',1,'p_num','parser.py',171),
  ('expr -> STRING','expr',1,'p_num','parser.py',172),
  ('expr -> CHAR','expr',1,'p_num','parser.py',173),
  ('expr -> BOOL','expr',1,'p_num','parser.py',174),
  ('statement -> IF expr LCURLY statement RCURLY','statement',5,'p_conditionals','parser.py',181),
  ('statement -> IF expr LCURLY statement RCURLY ELSE LCURLY statement RCURLY','statement',9,'p_conditionals','parser.py',182),
  ('statement -> DO LCURLY statements RCURLY WHILE LPARENTHESIS expr RPARENTHESIS','statement',8,'p_loop','parser.py',192),
  ('statement -> LIST ID','statement',2,'p_list','parser.py',199),
  ('statement -> ID DOT PUSH LPARENTHESIS expr RPARENTHESIS','statement',6,'p_push','parser.py',206),
  ('statement -> ID DOT PUSH LPARENTHESIS ID RPARENTHESIS','statement',6,'p_push_var','parser.py',212),
  ('statement -> ID DOT POP LPARENTHESIS RPARENTHESIS','statement',5,'p_pop','parser.py',218),
  ('statement -> ID DOT POP LPARENTHESIS expr RPARENTHESIS','statement',6,'p_pop_var','parser.py',224),
  ('statement -> ID DOT SLICE LPARENTHESIS expr COMMA expr RPARENTHESIS','statement',8,'p_slice','parser.py',230),
  ('statement -> ID DOT INDEX LPARENTHESIS expr RPARENTHESIS','statement',6,'p_index','parser.py',236),
]

d0c44bbd73e57f2d22d8957db281c4e88e8c82e3
<mask token>

<mask token>
for _k, _v in _lr_action_items.items():
    for _x, _y in zip(_v[0], _v[1]):
        if not _x in _lr_action:
            _lr_action[_x] = {}
        _lr_action[_x][_k] = _y
del _lr_action_items
<mask token>
for _k, _v in _lr_goto_items.items():
    for _x, _y in zip(_v[0], _v[1]):
        if not _x in _lr_goto:
            _lr_goto[_x] = {}
        _lr_goto[_x][_k] = _y
del _lr_goto_items
<mask token>

_tabversion = '3.10'
_lr_method = 'LALR'
_lr_signature = """startleftANDORleftGREATERSMALLERGEQUALSEQUALleftADDSUBTRACTleftMULTIPLYDIVIDEMODULUSADD AND BOOL CHAR COMMA DECLARE DECREMENT DIVIDE DO DOT EEQUALS ELSE EQUALS FLOAT GEQUAL GREATER ID IF INCREMENT INDEX INT LCURLY LIST LPARENTHESIS MODULUS MULTIPLY NOTEQUALS OR POP PRINT PUSH RCURLY RPARENTHESIS SEMIC SEQUAL SLICE SMALLER STRING SUBTRACT WHILE
    start  : statements
           | empty
    
    statements  : statements SEMIC statements
                | statements
    
    statements  : statement SEMIC statement
                | statement
    
    empty :
    
    statement : ID EQUALS expr
    
    statement : ID EQUALS ID
    
    statement : DECLARE ID EQUALS expr
    
    statement : DECLARE ID EQUALS ID
    
    statement : DECLARE ID
    
    statement : PRINT LPARENTHESIS ID RPARENTHESIS
    
    statement : PRINT LPARENTHESIS expr RPARENTHESIS
    
    statement : PRINT LPARENTHESIS expr COMMA expr RPARENTHESIS
    
    statement : PRINT LPARENTHESIS expr COMMA expr COMMA expr RPARENTHESIS
    
    statement : PRINT LPARENTHESIS expr COMMA expr COMMA expr COMMA expr RPARENTHESIS
    
    statement : expr
    expr : expr DIVIDE exprexpr : expr MULTIPLY exprexpr : expr ADD exprexpr : expr SUBTRACT expr
    expr : expr MODULUS expr
         | expr EEQUALS expr
         | expr GREATER expr
         | expr SMALLER expr
         | expr AND expr
         | expr OR expr
         | expr NOTEQUALS expr
         | expr GEQUAL expr
         | expr SEQUAL expr
    
    expr : expr INCREMENT
         | expr DECREMENT

    
    expr : ID
    
    expr : INT
           | FLOAT
           | STRING
           | CHAR
           | BOOL
    
    statement : IF expr LCURLY statement RCURLY
              | IF expr LCURLY statement RCURLY ELSE LCURLY statement RCURLY
    
    statement : DO LCURLY statements RCURLY WHILE LPARENTHESIS expr RPARENTHESIS
    
    statement : LIST ID
    
    statement : ID DOT PUSH LPARENTHESIS expr RPARENTHESIS
    
    statement : ID DOT PUSH LPARENTHESIS ID RPARENTHESIS
    
    statement : ID DOT POP LPARENTHESIS RPARENTHESIS
    
    statement : ID DOT POP LPARENTHESIS expr RPARENTHESIS
    
    statement : ID DOT SLICE LPARENTHESIS expr COMMA expr RPARENTHESIS
    
    statement : ID DOT INDEX LPARENTHESIS expr RPARENTHESIS
    """
_lr_action_items = {'$end': ([0, 1, 2, 3, 4, 5, 6, 12, 13, 14, 15, 16, 34, 
    35, 36, 39, 41, 42, 43, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
    60, 61, 62, 72, 73, 74, 75, 81, 86, 88, 89, 90, 92, 94, 101, 103, 105, 
    107, 108], [-7, 0, -1, -2, -6, -34, -18, -35, -36, -37, -38, -39, -32, 
    -33, -12, -34, -43, -3, -5, -9, -8, -19, -20, -21, -22, -23, -24, -25, 
    -26, -27, -28, -29, -30, -31, -11, -10, -13, -14, -46, -40, -45, -44, -
    47, -49, -15, -48, -16, -42, -41, -17]), 'ID': ([0, 7, 9, 11, 17, 18, 
    19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 37, 40, 63, 66,
    68, 69, 70, 71, 76, 91, 93, 96, 99, 102], [5, 36, 39, 41, 5, 5, 44, 39,
    39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 64, 5, 72, 5, 79, 39, 
    39, 39, 39, 39, 39, 39, 5, 39]), 'DECLARE': ([0, 17, 18, 40, 66, 99], [
    7, 7, 7, 7, 7, 7]), 'PRINT': ([0, 17, 18, 40, 66, 99], [8, 8, 8, 8, 8, 
    8]), 'IF': ([0, 17, 18, 40, 66, 99], [9, 9, 9, 9, 9, 9]), 'DO': ([0, 17,
    18, 40, 66, 99], [10, 10, 10, 10, 10, 10]), 'LIST': ([0, 17, 18, 40, 66,
    99], [11, 11, 11, 11, 11, 11]), 'INT': ([0, 9, 17, 18, 19, 21, 22, 23, 
    24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 37, 40, 63, 66, 68, 69, 70, 71,
    76, 91, 93, 96, 99, 102], [12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
    12, 12, 12]), 'FLOAT': ([0, 9, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 
    28, 29, 30, 31, 32, 33, 37, 40, 63, 66, 68, 69, 70, 71, 76, 91, 93, 96,
    99, 102], [13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 
    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13]),
    'STRING': ([0, 9, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 
    31, 32, 33, 37, 40, 63, 66, 68, 69, 70, 71, 76, 91, 93, 96, 99, 102], [
    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14]), 'CHAR': ([0, 
    9, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 37, 
    40, 63, 66, 68, 69, 70, 71, 76, 91, 93, 96, 99, 102], [15, 15, 15, 15, 
    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15, 15, 15]), 'BOOL': ([0, 9, 17, 18, 19, 
    21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 37, 40, 63, 66, 68,
    69, 70, 71, 76, 91, 93, 96, 99, 102], [16, 16, 16, 16, 16, 16, 16, 16, 
    16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
    16, 16, 16, 16, 16, 16]), 'SEMIC': ([2, 4, 5, 6, 12, 13, 14, 15, 16, 34,
    35, 36, 39, 41, 42, 43, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
    60, 61, 62, 67, 72, 73, 74, 75, 81, 86, 88, 89, 90, 92, 94, 101, 103, 
    105, 107, 108], [17, 18, -34, -18, -35, -36, -37, -38, -39, -32, -33, -
    12, -34, -43, 17, -5, -9, -8, -19, -20, -21, -22, -23, -24, -25, -26, -
    27, -28, -29, -30, -31, 17, -11, -10, -13, -14, -46, -40, -45, -44, -47,
    -49, -15, -48, -16, -42, -41, -17]), 'RCURLY': ([4, 5, 6, 12, 13, 14, 
    15, 16, 34, 35, 36, 39, 41, 42, 43, 44, 45, 50, 51, 52, 53, 54, 55, 56,
    57, 58, 59, 60, 61, 62, 67, 72, 73, 74, 75, 77, 81, 86, 88, 89, 90, 92,
    94, 101, 103, 104, 105, 107, 108], [-6, -34, -18, -35, -36, -37, -38, -
    39, -32, -33, -12, -34, -43, -3, -5, -9, -8, -19, -20, -21, -22, -23, -
    24, -25, -26, -27, -28, -29, -30, -31, 78, -11, -10, -13, -14, 86, -46,
    -40, -45, -44, -47, -49, -15, -48, -16, 107, -42, -41, -17]), 'EQUALS':
    ([5, 36], [19, 63]), 'DOT': ([5], [20]), 'DIVIDE': ([5, 6, 12, 13, 14, 
    15, 16, 34, 35, 38, 39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
    60, 61, 62, 64, 65, 72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106],
    [-34, 21, -35, -36, -37, -38, -39, -32, -33, 21, -34, -34, 21, -19, -20,
    21, 21, -23, 21, 21, 21, 21, 21, 21, 21, 21, -34, 21, -34, 21, -34, 21,
    21, 21, 21, 21, 21, 21, 21, 21]), 'MULTIPLY': ([5, 6, 12, 13, 14, 15, 
    16, 34, 35, 38, 39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
    61, 62, 64, 65, 72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34,
    22, -35, -36, -37, -38, -39, -32, -33, 22, -34, -34, 22, -19, -20, 22, 
    22, -23, 22, 22, 22, 22, 22, 22, 22, 22, -34, 22, -34, 22, -34, 22, 22,
    22, 22, 22, 22, 22, 22, 22]), 'ADD': ([5, 6, 12, 13, 14, 15, 16, 34, 35,
    38, 39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64,
    65, 72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 23, -35, -
    36, -37, -38, -39, -32, -33, 23, -34, -34, 23, -19, -20, -21, -22, -23,
    23, 23, 23, 23, 23, 23, 23, 23, -34, 23, -34, 23, -34, 23, 23, 23, 23, 
    23, 23, 23, 23, 23]), 'SUBTRACT': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 
    38, 39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64,
    65, 72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 24, -35, -
    36, -37, -38, -39, -32, -33, 24, -34, -34, 24, -19, -20, -21, -22, -23,
    24, 24, 24, 24, 24, 24, 24, 24, -34, 24, -34, 24, -34, 24, 24, 24, 24, 
    24, 24, 24, 24, 24]), 'MODULUS': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38,
    39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65,
    72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 25, -35, -36, 
    -37, -38, -39, -32, -33, 25, -34, -34, 25, -19, -20, 25, 25, -23, 25, 
    25, 25, 25, 25, 25, 25, 25, -34, 25, -34, 25, -34, 25, 25, 25, 25, 25, 
    25, 25, 25, 25]), 'EEQUALS': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39,
    44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72,
    73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 26, -35, -36, -37,
    -38, -39, -32, -33, 26, -34, -34, 26, -19, -20, -21, -22, -23, 26, -25,
    -26, -27, -28, 26, -30, -31, -34, 26, -34, 26, -34, 26, 26, 26, 26, 26,
    26, 26, 26, 26]), 'GREATER': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39,
    44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72,
    73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 27, -35, -36, -37,
    -38, -39, -32, -33, 27, -34, -34, 27, -19, -20, -21, -22, -23, 27, -25,
    -26, 27, 27, 27, -30, -31, -34, 27, -34, 27, -34, 27, 27, 27, 27, 27, 
    27, 27, 27, 27]), 'SMALLER': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39,
    44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72,
    73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 28, -35, -36, -37,
    -38, -39, -32, -33, 28, -34, -34, 28, -19, -20, -21, -22, -23, 28, -25,
    -26, 28, 28, 28, -30, -31, -34, 28, -34, 28, -34, 28, 28, 28, 28, 28, 
    28, 28, 28, 28]), 'AND': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39, 44,
    45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72, 73,
    79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 29, -35, -36, -37, -38,
    -39, -32, -33, 29, -34, -34, 29, -19, -20, -21, -22, -23, 29, -25, -26,
    -27, -28, 29, -30, -31, -34, 29, -34, 29, -34, 29, 29, 29, 29, 29, 29, 
    29, 29, 29]), 'OR': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39, 44, 45,
    50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72, 73, 79,
    80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 30, -35, -36, -37, -38, -
    39, -32, -33, 30, -34, -34, 30, -19, -20, -21, -22, -23, 30, -25, -26, 
    -27, -28, 30, -30, -31, -34, 30, -34, 30, -34, 30, 30, 30, 30, 30, 30, 
    30, 30, 30]), 'NOTEQUALS': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39, 
    44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72,
    73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 31, -35, -36, -37,
    -38, -39, -32, -33, 31, -34, -34, 31, -19, -20, -21, -22, -23, 31, -25,
    -26, -27, -28, 31, -30, -31, -34, 31, -34, 31, -34, 31, 31, 31, 31, 31,
    31, 31, 31, 31]), 'GEQUAL': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39,
    44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72,
    73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 32, -35, -36, -37,
    -38, -39, -32, -33, 32, -34, -34, 32, -19, -20, -21, -22, -23, 32, -25,
    -26, 32, 32, 32, -30, -31, -34, 32, -34, 32, -34, 32, 32, 32, 32, 32, 
    32, 32, 32, 32]), 'SEQUAL': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 39,
    44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 72,
    73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 33, -35, -36, -37,
    -38, -39, -32, -33, 33, -34, -34, 33, -19, -20, -21, -22, -23, 33, -25,
    -26, 33, 33, 33, -30, -31, -34, 33, -34, 33, -34, 33, 33, 33, 33, 33, 
    33, 33, 33, 33]), 'INCREMENT': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 38, 
    39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65,
    72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 34, -35, -36, 
    -37, -38, -39, -32, -33, 34, -34, -34, 34, -19, -20, -21, -22, -23, 34,
    -25, -26, -27, -28, 34, -30, -31, -34, 34, -34, 34, -34, 34, 34, 34, 34,
    34, 34, 34, 34, 34]), 'DECREMENT': ([5, 6, 12, 13, 14, 15, 16, 34, 35, 
    38, 39, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64,
    65, 72, 73, 79, 80, 82, 83, 84, 85, 97, 98, 100, 106], [-34, 35, -35, -
    36, -37, -38, -39, -32, -33, 35, -34, -34, 35, -19, -20, -21, -22, -23,
    35, -25, -26, -27, -28, 35, -30, -31, -34, 35, -34, 35, -34, 35, 35, 35,
    35, 35, 35, 35, 35, 35]), 'LPARENTHESIS': ([8, 46, 47, 48, 49, 87], [37,
    68, 69, 70, 71, 96]), 'LCURLY': ([10, 12, 13, 14, 15, 16, 34, 35, 38, 
    39, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 95], [40, -35, 
    -36, -37, -38, -39, -32, -33, 66, -34, -19, -20, -21, -22, -23, -24, -
    25, -26, -27, -28, -29, -30, -31, 99]), 'RPARENTHESIS': ([12, 13, 14, 
    15, 16, 34, 35, 39, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
    64, 65, 69, 79, 80, 82, 84, 85, 97, 98, 100, 106], [-35, -36, -37, -38,
    -39, -32, -33, -34, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -
    29, -30, -31, 74, 75, 81, 88, 89, 90, 92, 94, 101, 103, 105, 108]),
    'COMMA': ([12, 13, 14, 15, 16, 34, 35, 39, 50, 51, 52, 53, 54, 55, 56, 
    57, 58, 59, 60, 61, 62, 64, 65, 83, 85, 98], [-35, -36, -37, -38, -39, 
    -32, -33, -34, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -
    30, -31, -34, 76, 91, 93, 102]), 'PUSH': ([20], [46]), 'POP': ([20], [
    47]), 'SLICE': ([20], [48]), 'INDEX': ([20], [49]), 'WHILE': ([78], [87
    ]), 'ELSE': ([86], [95])}
_lr_action = {}
for _k, _v in _lr_action_items.items():
    for _x, _y in zip(_v[0], _v[1]):
        if not _x in _lr_action:
            _lr_action[_x] = {}
        _lr_action[_x][_k] = _y
del _lr_action_items
_lr_goto_items = {'start': ([0], [1]), 'statements': ([0, 17, 40], [2, 42, 
    67]), 'empty': ([0], [3]), 'statement': ([0, 17, 18, 40, 66, 99], [4, 4,
    43, 4, 77, 104]), 'expr': ([0, 9, 17, 18, 19, 21, 22, 23, 24, 25, 26, 
    27, 28, 29, 30, 31, 32, 33, 37, 40, 63, 66, 68, 69, 70, 71, 76, 91, 93,
    96, 99, 102], [6, 38, 6, 6, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
    60, 61, 62, 65, 6, 73, 6, 80, 82, 83, 84, 85, 97, 98, 100, 6, 106])}
_lr_goto = {}
for _k, _v in _lr_goto_items.items():
    for _x, _y in zip(_v[0], _v[1]):
        if not _x in _lr_goto:
            _lr_goto[_x] = {}
        _lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [("S' -> start", "S'", 1, None, None, None), (
    'start -> statements', 'start', 1, 'p_start', 'parser.py', 20), (
    'start -> empty', 'start', 1, 'p_start', 'parser.py', 21), (
    'statements -> statements SEMIC statements', 'statements', 3,
    'p_statements_mul', 'parser.py', 32), ('statements -> statements',
    'statements', 1, 'p_statements_mul', 'parser.py', 33), (
    'statements -> statement SEMIC statement', 'statements', 3,
    'p_statements', 'parser.py', 42), ('statements -> statement',
    'statements', 1, 'p_statements', 'parser.py', 43), ('empty -> <empty>',
    'empty', 0, 'p_empty', 'parser.py', 51), ('statement -> ID EQUALS expr',
    'statement', 3, 'p_statement_equal', 'parser.py', 57), (
    'statement -> ID EQUALS ID', 'statement', 3, 'p_statement_equal_ass',
    'parser.py', 63), ('statement -> DECLARE ID EQUALS expr', 'statement', 
    4, 'p_statement_declare', 'parser.py', 69), (
    'statement -> DECLARE ID EQUALS ID', 'statement', 4,
    'p_statement_declare_id', 'parser.py', 75), ('statement -> DECLARE ID',
    'statement', 2, 'p_statement_declare_only', 'parser.py', 81), (
    'statement -> PRINT LPARENTHESIS ID RPARENTHESIS', 'statement', 4,
    'p_statement_print', 'parser.py', 87), (
    'statement -> PRINT LPARENTHESIS expr RPARENTHESIS', 'statement', 4,
    'p_statement_print_expr', 'parser.py', 93), (
    'statement -> PRINT LPARENTHESIS expr COMMA expr RPARENTHESIS',
    'statement', 6, 'p_statement_print_2', 'parser.py', 99), (
    'statement -> PRINT LPARENTHESIS expr COMMA expr COMMA expr RPARENTHESIS',
    'statement', 8, 'p_statement_print_3', 'parser.py', 105), (
    'statement -> PRINT LPARENTHESIS expr COMMA expr COMMA expr COMMA expr RPARENTHESIS'
    , 'statement', 10, 'p_statement_print_4', 'parser.py', 111), (
    'statement -> expr', 'statement', 1, 'p_statement', 'parser.py', 117),
    ('expr -> expr DIVIDE expr', 'expr', 3, 'p_expr_divide', 'parser.py', 
    123), ('expr -> expr MULTIPLY expr', 'expr', 3, 'p_expr_multiply',
    'parser.py', 127), ('expr -> expr ADD expr', 'expr', 3, 'p_expr_add',
    'parser.py', 131), ('expr -> expr SUBTRACT expr', 'expr', 3,
    'p_expr_subtract', 'parser.py', 135), ('expr -> expr MODULUS expr',
    'expr', 3, 'p_binary_opr', 'parser.py', 141), (
    'expr -> expr EEQUALS expr', 'expr', 3, 'p_binary_opr', 'parser.py', 
    142), ('expr -> expr GREATER expr', 'expr', 3, 'p_binary_opr',
    'parser.py', 143), ('expr -> expr SMALLER expr', 'expr', 3,
    'p_binary_opr', 'parser.py', 144), ('expr -> expr AND expr', 'expr', 3,
    'p_binary_opr', 'parser.py', 145), ('expr -> expr OR expr', 'expr', 3,
    'p_binary_opr', 'parser.py', 146), ('expr -> expr NOTEQUALS expr',
    'expr', 3, 'p_binary_opr', 'parser.py', 147), (
    'expr -> expr GEQUAL expr', 'expr', 3, 'p_binary_opr', 'parser.py', 148
    ), ('expr -> expr SEQUAL expr', 'expr', 3, 'p_binary_opr', 'parser.py',
    149), ('expr -> expr INCREMENT', 'expr', 2, 'p_unary_opr', 'parser.py',
    155), ('expr -> expr DECREMENT', 'expr', 2, 'p_unary_opr', 'parser.py',
    156), ('expr -> ID', 'expr', 1, 'p_expr_ID', 'parser.py', 164), (
    'expr -> INT', 'expr', 1, 'p_num', 'parser.py', 170), ('expr -> FLOAT',
    'expr', 1, 'p_num', 'parser.py', 171), ('expr -> STRING', 'expr', 1,
    'p_num', 'parser.py', 172), ('expr -> CHAR', 'expr', 1, 'p_num',
    'parser.py', 173), ('expr -> BOOL', 'expr', 1, 'p_num', 'parser.py', 
    174), ('statement -> IF expr LCURLY statement RCURLY', 'statement', 5,
    'p_conditionals', 'parser.py', 181), (
    'statement -> IF expr LCURLY statement RCURLY ELSE LCURLY statement RCURLY'
    , 'statement', 9, 'p_conditionals', 'parser.py', 182), (
    'statement -> DO LCURLY statements RCURLY WHILE LPARENTHESIS expr RPARENTHESIS'
    , 'statement', 8, 'p_loop', 'parser.py', 192), ('statement -> LIST ID',
    'statement', 2, 'p_list', 'parser.py', 199), (
    'statement -> ID DOT PUSH LPARENTHESIS expr RPARENTHESIS', 'statement',
    6, 'p_push', 'parser.py', 206), (
    'statement -> ID DOT PUSH LPARENTHESIS ID RPARENTHESIS', 'statement', 6,
    'p_push_var', 'parser.py', 212), (
    'statement -> ID DOT POP LPARENTHESIS RPARENTHESIS', 'statement', 5,
    'p_pop', 'parser.py', 218), (
    'statement -> ID DOT POP LPARENTHESIS expr RPARENTHESIS', 'statement', 
    6, 'p_pop_var', 'parser.py', 224), (
    'statement -> ID DOT SLICE LPARENTHESIS expr COMMA expr RPARENTHESIS',
    'statement', 8, 'p_slice', 'parser.py', 230), (
    'statement -> ID DOT INDEX LPARENTHESIS expr RPARENTHESIS', 'statement',
    6, 'p_index', 'parser.py', 236)]


# parsetab.py
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_tabversion = '3.10'

_lr_method = 'LALR'

_lr_signature = 'startleftANDORleftGREATERSMALLERGEQUALSEQUALleftADDSUBTRACTleftMULTIPLYDIVIDEMODULUSADD AND BOOL CHAR COMMA DECLARE DECREMENT DIVIDE DO DOT EEQUALS ELSE EQUALS FLOAT GEQUAL GREATER ID IF INCREMENT INDEX INT LCURLY LIST LPARENTHESIS MODULUS MULTIPLY NOTEQUALS OR POP PRINT PUSH RCURLY RPARENTHESIS SEMIC SEQUAL SLICE SMALLER STRING SUBTRACT WHILE\n    start  : statements\n           | empty\n    \n    statements  : statements SEMIC statements\n                | statements\n    \n    statements  : statement SEMIC statement\n                | statement\n    \n    empty :\n    \n    statement : ID EQUALS expr\n    \n    statement : ID EQUALS ID\n    \n    statement : DECLARE ID EQUALS expr\n    \n    statement : DECLARE ID EQUALS ID\n    \n    statement : DECLARE ID\n    \n    statement : PRINT LPARENTHESIS ID RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr COMMA expr RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr COMMA expr COMMA expr RPARENTHESIS\n    \n    statement : PRINT LPARENTHESIS expr COMMA expr COMMA expr COMMA expr RPARENTHESIS\n    \n    statement : expr\n    expr : expr DIVIDE exprexpr : expr MULTIPLY exprexpr : expr ADD exprexpr : expr SUBTRACT expr\n    expr : expr MODULUS expr\n         | expr EEQUALS expr\n         | expr GREATER expr\n         | expr SMALLER expr\n         | expr AND expr\n         | expr OR expr\n         | expr NOTEQUALS expr\n         | expr GEQUAL expr\n         | expr SEQUAL expr\n    \n    expr : expr INCREMENT\n         | expr DECREMENT\n\n    \n    expr : ID\n    \n    expr : INT\n           | FLOAT\n           | STRING\n           | CHAR\n           | BOOL\n    \n    statement : IF expr LCURLY statement RCURLY\n              | IF expr LCURLY statement RCURLY ELSE LCURLY statement RCURLY\n    \n    statement : DO LCURLY statements RCURLY WHILE LPARENTHESIS expr RPARENTHESIS\n    \n    statement : LIST ID\n    \n    statement : ID DOT PUSH LPARENTHESIS expr RPARENTHESIS\n    \n    statement : ID DOT PUSH LPARENTHESIS ID RPARENTHESIS\n    \n    statement : ID DOT POP LPARENTHESIS RPARENTHESIS\n    \n    statement : ID DOT POP LPARENTHESIS expr RPARENTHESIS\n    \n    statement : ID DOT SLICE LPARENTHESIS expr COMMA expr RPARENTHESIS\n    \n    statement : ID DOT INDEX LPARENTHESIS expr RPARENTHESIS\n    '
    
_lr_action_items = {'$end':([0,1,2,3,4,5,6,12,13,14,15,16,34,35,36,39,41,42,43,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,72,73,74,75,81,86,88,89,90,92,94,101,103,105,107,108,],[-7,0,-1,-2,-6,-34,-18,-35,-36,-37,-38,-39,-32,-33,-12,-34,-43,-3,-5,-9,-8,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-11,-10,-13,-14,-46,-40,-45,-44,-47,-49,-15,-48,-16,-42,-41,-17,]),'ID':([0,7,9,11,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[5,36,39,41,5,5,44,39,39,39,39,39,39,39,39,39,39,39,39,39,64,5,72,5,79,39,39,39,39,39,39,39,5,39,]),'DECLARE':([0,17,18,40,66,99,],[7,7,7,7,7,7,]),'PRINT':([0,17,18,40,66,99,],[8,8,8,8,8,8,]),'IF':([0,17,18,40,66,99,],[9,9,9,9,9,9,]),'DO':([0,17,18,40,66,99,],[10,10,10,10,10,10,]),'LIST':([0,17,18,40,66,99,],[11,11,11,11,11,11,]),'INT':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,]),'FLOAT':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,]),'STRING':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,]),'CHAR':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,]),'BOOL':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,]),'SEMIC':([2,4,5,6,12,13,14,15,16,34,35,36,39,41,42,43,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,67,72,73,74,75,81,86,88,89,90,92,94,101,103,105,107,108,],[17,18,-34,-18,-35,-36,-37,-38,-39,-32,-33,-12,-34,-43,17,-5,-9,-8,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,17,-11,-10,-13,-14,-46,-40,-45,-44,-47,-49,-15,-48,-16,-42,-41,-17,]),'RCURLY':([4,5,6,12,13,14,15,16,34,35,36,39,41,42,43,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,67,72,73,74,75,77,81,86,88,89,90,92,94,101,103,104,105,107,108,],[-6,-34,-18,-35,-36,-37,-38,-39,-32,-33,-12,-34,-43,-3,-5,-9,-8,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,78,-11,-10,-13,-14,86,-46,-40,-45,-44,-47,-49,-15,-48,-16,107,-42,-41,-17,]),'EQUALS':([5,36,],[19,63,]),'DOT':([5,],[20,]),'DIVIDE':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,21,-35,-36,-37,-38,-39,-32,-33,21,-34,-34,21,-19,-20,21,21,-23,21,21,21,21,21,21,21,21,-34,21,-34,21,-34,21,21,21,21,21,21,21,21,21,]),'MULTIPLY':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,22,-35,-36,-37,-38,-39,-32,-33,22,-34,-34,22,-19,-20,22,22,-23,22,22,22,22,22,22,22,22,-34,22,-34,22,-34,22,22,22,22,22,22,22,22,22,]),'ADD':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,23,-35,-36,-37,-38,-39,-32,-33,23,-34,-34,23,-19,-20,-21,-22,-23,23,23,23,23,23,23,23,23,-34,23,-34,23,-34,23,23,23,23,23,23,23,23,23,]),'SUBTRACT':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,24,-35,-36,-37,-38,-39,-32,-33,24,-34,-34,24,-19,-20,-21,-22,-23,24,24,24,24,24,24,24,24,-34,24,-34,24,-34,24,24,24,24,24,24,24,24,24,]),'MODULUS':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,25,-35,-36,-37,-38,-39,-32,-33,25,-34,-34,25,-19,-20,25,25,-23,25,25,25,25,25,25,25,25,-34,25,-34,25,-34,25,25,25,25,25,25,25,25,25,]),'EEQUALS':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,26,-35,-36,-37,-38,-39,-32,-33,26,-34,-34,26,-19,-20,-21,-22,-23,26,-25,-26,-27,-28,26,-30,-31,-34,26,-34,26,-34,26,26,26,26,26,26,26,26,26,]),'GREATER':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,27,-35,-36,-37,-38,-39,-32,-33,27,-34,-34,27,-19,-20,-21,-22,-23,27,-25,-26,27,27,27,-30,-31,-34,27,-34,27,-34,27,27,27,27,27,27,27,27,27,]),'SMALLER':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,28,-35,-36,-37,-38,-39,-32,-33,28,-34,-34,28,-19,-20,-21,-22,-23,28,-25,-26,28,28,28,-30,-31,-34,28,-34,28,-34,28,28,28,28,28,28,28,28,28,]),'AND':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,29,-35,-36,-37,-38,-39,-32,-33,29,-34,-34,29,-19,-20,-21,-22,-23,29,-25,-26,-27,-28,29,-30,-31,-34,29,-34,29,-34,29,29,29,29,29,29,29,29,29,]),'OR':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,30,-35,-36,-37,-38,-39,-32,-33,30,-34,-34,30,-19,-20,-21,-22,-23,30,-25,-26,-27,-28,30,-30,-31,-34,30,-34,30,-34,30,30,30,30,30,30,30,30,30,]),'NOTEQUALS':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,31,-35,-36,-37,-38,-39,-32,-33,31,-34,-34,31,-19,-20,-21,-22,-23,31,-25,-26,-27,-28,31,-30,-31,-34,31,-34,31,-34,31,31,31,31,31,31,31,31,31,]),'GEQUAL':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,32,-35,-36,-37,-38,-39,-32,-33,32,-34,-34,32,-19,-20,-21,-22,-23,32,-25,-26,32,32,32,-30,-31,-34,32,-34,32,-34,32,32,32,32,32,32,32,32,32,]),'SEQUAL':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,33,-35,-36,-37,-38,-39,-32,-33,33,-34,-34,33,-19,-20,-21,-22,-23,33,-25,-26,33,33,33,-30,-31,-34,33,-34,33,-34,33,33,33,33,33,33,33,33,33,]),'INCREMENT':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,34,-35,-36,-37,-38,-39,-32,-33,34,-34,-34,34,-19,-20,-21,-22,-23,34,-25,-26,-27,-28,34,-30,-31,-34,34,-34,34,-34,34,34,34,34,34,34,34,34,34,]),'DECREMENT':([5,6,12,13,14,15,16,34,35,38,39,44,45,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,72,73,79,80,82,83,84,85,97,98,100,106,],[-34,35,-35,-36,-37,-38,-39,-32,-33,35,-34,-34,35,-19,-20,-21,-22,-23,35,-25,-26,-27,-28,35,-30,-31,-34,35,-34,35,-34,35,35,35,35,35,35,35,35,35,]),'LPARENTHESIS':([8,46,47,48,49,87,],[37,68,69,70,71,96,]),'LCURLY':([10,12,13,14,15,16,34,35,38,39,50,51,52,53,54,55,56,57,58,59,60,61,62,95,],[40,-35,-36,-37,-38,-39,-32,-33,66,-34,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,99,]),'RPARENTHESIS':([12,13,14,15,16,34,35,39,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,69,79,80,82,84,85,97,98,100,106,],[-35,-36,-37,-38,-39,-32,-33,-34,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,74,75,81,88,89,90,92,94,101,103,105,108,]),'COMMA':([12,13,14,15,16,34,35,39,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,83,85,98,],[-35,-36,-37,-38,-39,-32,-33,-34,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-34,76,91,93,102,]),'PUSH':([20,],[46,]),'POP':([20,],[47,]),'SLICE':([20,],[48,]),'INDEX':([20,],[49,]),'WHILE':([78,],[87,]),'ELSE':([86,],[95,]),}

_lr_action = {}
for _k, _v in _lr_action_items.items():
   for _x,_y in zip(_v[0],_v[1]):
      if not _x in _lr_action:  _lr_action[_x] = {}
      _lr_action[_x][_k] = _y
del _lr_action_items

_lr_goto_items = {'start':([0,],[1,]),'statements':([0,17,40,],[2,42,67,]),'empty':([0,],[3,]),'statement':([0,17,18,40,66,99,],[4,4,43,4,77,104,]),'expr':([0,9,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,40,63,66,68,69,70,71,76,91,93,96,99,102,],[6,38,6,6,45,50,51,52,53,54,55,56,57,58,59,60,61,62,65,6,73,6,80,82,83,84,85,97,98,100,6,106,]),}

_lr_goto = {}
for _k, _v in _lr_goto_items.items():
   for _x, _y in zip(_v[0], _v[1]):
       if not _x in _lr_goto: _lr_goto[_x] = {}
       _lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [
  ("S' -> start","S'",1,None,None,None),
  ('start -> statements','start',1,'p_start','parser.py',20),
  ('start -> empty','start',1,'p_start','parser.py',21),
  ('statements -> statements SEMIC statements','statements',3,'p_statements_mul','parser.py',32),
  ('statements -> statements','statements',1,'p_statements_mul','parser.py',33),
  ('statements -> statement SEMIC statement','statements',3,'p_statements','parser.py',42),
  ('statements -> statement','statements',1,'p_statements','parser.py',43),
  ('empty -> <empty>','empty',0,'p_empty','parser.py',51),
  ('statement -> ID EQUALS expr','statement',3,'p_statement_equal','parser.py',57),
  ('statement -> ID EQUALS ID','statement',3,'p_statement_equal_ass','parser.py',63),
  ('statement -> DECLARE ID EQUALS expr','statement',4,'p_statement_declare','parser.py',69),
  ('statement -> DECLARE ID EQUALS ID','statement',4,'p_statement_declare_id','parser.py',75),
  ('statement -> DECLARE ID','statement',2,'p_statement_declare_only','parser.py',81),
  ('statement -> PRINT LPARENTHESIS ID RPARENTHESIS','statement',4,'p_statement_print','parser.py',87),
  ('statement -> PRINT LPARENTHESIS expr RPARENTHESIS','statement',4,'p_statement_print_expr','parser.py',93),
  ('statement -> PRINT LPARENTHESIS expr COMMA expr RPARENTHESIS','statement',6,'p_statement_print_2','parser.py',99),
  ('statement -> PRINT LPARENTHESIS expr COMMA expr COMMA expr RPARENTHESIS','statement',8,'p_statement_print_3','parser.py',105),
  ('statement -> PRINT LPARENTHESIS expr COMMA expr COMMA expr COMMA expr RPARENTHESIS','statement',10,'p_statement_print_4','parser.py',111),
  ('statement -> expr','statement',1,'p_statement','parser.py',117),
  ('expr -> expr DIVIDE expr','expr',3,'p_expr_divide','parser.py',123),
  ('expr -> expr MULTIPLY expr','expr',3,'p_expr_multiply','parser.py',127),
  ('expr -> expr ADD expr','expr',3,'p_expr_add','parser.py',131),
  ('expr -> expr SUBTRACT expr','expr',3,'p_expr_subtract','parser.py',135),
  ('expr -> expr MODULUS expr','expr',3,'p_binary_opr','parser.py',141),
  ('expr -> expr EEQUALS expr','expr',3,'p_binary_opr','parser.py',142),
  ('expr -> expr GREATER expr','expr',3,'p_binary_opr','parser.py',143),
  ('expr -> expr SMALLER expr','expr',3,'p_binary_opr','parser.py',144),
  ('expr -> expr AND expr','expr',3,'p_binary_opr','parser.py',145),
  ('expr -> expr OR expr','expr',3,'p_binary_opr','parser.py',146),
  ('expr -> expr NOTEQUALS expr','expr',3,'p_binary_opr','parser.py',147),
  ('expr -> expr GEQUAL expr','expr',3,'p_binary_opr','parser.py',148),
  ('expr -> expr SEQUAL expr','expr',3,'p_binary_opr','parser.py',149),
  ('expr -> expr INCREMENT','expr',2,'p_unary_opr','parser.py',155),
  ('expr -> expr DECREMENT','expr',2,'p_unary_opr','parser.py',156),
  ('expr -> ID','expr',1,'p_expr_ID','parser.py',164),
  ('expr -> INT','expr',1,'p_num','parser.py',170),
  ('expr -> FLOAT','expr',1,'p_num','parser.py',171),
  ('expr -> STRING','expr',1,'p_num','parser.py',172),
  ('expr -> CHAR','expr',1,'p_num','parser.py',173),
  ('expr -> BOOL','expr',1,'p_num','parser.py',174),
  ('statement -> IF expr LCURLY statement RCURLY','statement',5,'p_conditionals','parser.py',181),
  ('statement -> IF expr LCURLY statement RCURLY ELSE LCURLY statement RCURLY','statement',9,'p_conditionals','parser.py',182),
  ('statement -> DO LCURLY statements RCURLY WHILE LPARENTHESIS expr RPARENTHESIS','statement',8,'p_loop','parser.py',192),
  ('statement -> LIST ID','statement',2,'p_list','parser.py',199),
  ('statement -> ID DOT PUSH LPARENTHESIS expr RPARENTHESIS','statement',6,'p_push','parser.py',206),
  ('statement -> ID DOT PUSH LPARENTHESIS ID RPARENTHESIS','statement',6,'p_push_var','parser.py',212),
  ('statement -> ID DOT POP LPARENTHESIS RPARENTHESIS','statement',5,'p_pop','parser.py',218),
  ('statement -> ID DOT POP LPARENTHESIS expr RPARENTHESIS','statement',6,'p_pop_var','parser.py',224),
  ('statement -> ID DOT SLICE LPARENTHESIS expr COMMA expr RPARENTHESIS','statement',8,'p_slice','parser.py',230),
  ('statement -> ID DOT INDEX LPARENTHESIS expr RPARENTHESIS','statement',6,'p_index','parser.py',236),
]
