-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathparsetab.py
80 lines (73 loc) · 15.7 KB
/
parsetab.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# parsetab.py
# This file is automatically generated. Do not edit.
_tabversion = '3.10'
_lr_method = 'LALR'
_lr_signature = 'leftPLUSMINUSleftTIMESDIVIDEVARIABLE CHAR IDENTIFIER SEMICOLON DOLLAR AMPERSAND NEWLINE NUMBER STRING EQUALS ASSIGNMENT EQ NEQ LT GT LTE GTE TEST_EQ TEST_NEQ TEST_GT TEST_LT BOOLEAN LBRACE RBRACE LPAREN RPAREN LBRACKET RBRACKET DOUBLE_LPAREN DOUBLE_RPAREN DOUBLE_LBRACKET DOUBLE_RBRACKET INCREMENT DECREMENT PLUS MINUS TIMES DIVIDE FOR WHILE DO DONE BREAK IF FI THEN ECHO ELSE IN CONTINUE SHABANG LINE_COMMENTprogram : instructions instructions : instruction instructions\n | instruction instruction : identifier ASSIGNMENT expression\n | identifier ASSIGNMENT double_paren_dollar_prefix_expression\n instruction : IF condition SEMICOLON THEN instructions SEMICOLON FI\n | IF condition SEMICOLON THEN instructions SEMICOLON ELSE instructions SEMICOLON FI\n instruction : WHILE condition SEMICOLON DO instructions DONE\n instruction : ECHO expression\n instruction : BREAK instruction : CONTINUE double_paren_dollar_prefix_expression : DOLLAR DOUBLE_LPAREN expression DOUBLE_RPAREN\n instruction : DOUBLE_LPAREN expression DOUBLE_RPAREN\n identifier : IDENTIFIERcomparators : TEST_EQ\n | TEST_NEQ\n | TEST_LT\n | TEST_GT\n | EQUALS\n | GT\n | GTE\n | LT\n | LTE\n condition : expression\n | DOUBLE_LBRACKET expression DOUBLE_RBRACKET\n | LBRACKET expression RBRACKET\n expression : identifier\n | identifier DECREMENT\n | identifier INCREMENT\n | const\n | expression PLUS expression\n | expression MINUS expression\n | expression TIMES expression\n | expression DIVIDE expression\n | expression comparators expression\n | LPAREN expression RPARENconst : NUMBERconst : STRINGconst : VARIABLEconst : BOOLEAN instruction : command switch_list argument_list\n | command argument_list\n | command switch_list\n | command command : identifier switch : MINUS identifier switch_list : switch switch_list switch_list : switch argument : const argument_list : argument argument_list argument_list : argument '
_lr_action_items = {'DO':([38,],[67,]),'LTE':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,49,49,49,49,49,49,-28,-29,49,-36,-34,-33,-31,49,-32,49,]),'DOUBLE_LPAREN':([0,7,8,9,10,11,12,13,15,16,19,21,22,25,28,29,30,31,32,39,40,55,57,58,59,60,61,62,63,66,67,68,69,70,71,72,73,78,80,81,82,85,],[2,-14,2,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,74,-4,-36,2,-34,-33,-31,-35,-32,2,-8,-12,2,-6,-7,]),'ASSIGNMENT':([7,12,],[-14,34,]),'THEN':([56,],[73,]),'NUMBER':([1,2,5,6,7,11,12,13,14,15,17,18,19,21,28,29,30,32,34,41,42,43,44,45,46,47,48,49,50,51,52,53,54,58,60,74,],[13,13,13,13,-14,13,-45,-37,13,-38,13,13,-39,-40,-49,13,-48,13,13,-16,-20,13,-18,-19,13,-22,13,-23,-17,-15,13,13,-21,-47,-46,13,]),'ELSE':([79,],[81,]),'LBRACKET':([1,6,],[14,14,]),'WHILE':([0,7,8,9,10,11,12,13,15,16,19,21,22,25,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,67,68,69,70,71,72,73,78,80,81,82,85,],[1,-14,1,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,1,-34,-33,-31,-35,-32,1,-8,-12,1,-6,-7,]),'DONE':([7,8,9,10,11,12,13,15,16,19,21,22,25,27,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,68,69,70,71,72,75,78,80,82,85,],[-14,-3,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-2,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,-34,-33,-31,-35,-32,78,-8,-12,-6,-7,]),'FI':([79,84,],[82,85,]),'MINUS':([7,11,12,13,15,16,19,21,22,23,24,25,30,35,36,37,39,40,60,63,66,68,69,70,71,72,77,],[-14,33,-45,-37,-38,-30,-39,-40,-27,53,53,53,33,53,53,53,-28,-29,-46,53,-36,-34,-33,-31,53,-32,53,]),'DIVIDE':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,43,43,43,43,43,43,-28,-29,43,-36,-34,-33,43,43,43,43,]),'TEST_NEQ':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,41,41,41,41,41,41,-28,-29,41,-36,-34,-33,-31,41,-32,41,]),'RPAREN':([7,13,15,16,19,21,22,37,39,40,66,68,69,70,71,72,],[-14,-37,-38,-30,-39,-40,-27,66,-28,-29,-36,-34,-33,-31,-35,-32,]),'SEMICOLON':([7,8,9,10,11,12,13,15,16,19,20,21,22,23,25,26,27,28,29,30,31,32,39,40,55,57,58,59,60,61,63,64,65,66,68,69,70,71,72,76,78,80,82,83,85,],[-14,-3,-10,-11,-44,-45,-37,-38,-30,-39,38,-40,-27,-24,-9,56,-2,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-26,-25,-36,-34,-33,-31,-35,-32,79,-8,-12,-6,84,-7,]),'LT':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,47,47,47,47,47,47,-28,-29,47,-36,-34,-33,-31,47,-32,47,]),'CONTINUE':([0,7,8,9,10,11,12,13,15,16,19,21,22,25,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,67,68,69,70,71,72,73,78,80,81,82,85,],[10,-14,10,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,10,-34,-33,-31,-35,-32,10,-8,-12,10,-6,-7,]),'PLUS':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,48,48,48,48,48,48,-28,-29,48,-36,-34,-33,-31,48,-32,48,]),'DOUBLE_LBRACKET':([1,6,],[17,17,]),'INCREMENT':([7,22,],[-14,40,]),'TEST_LT':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,50,50,50,50,50,50,-28,-29,50,-36,-34,-33,-31,50,-32,50,]),'IDENTIFIER':([0,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,25,28,29,30,31,32,33,34,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,63,66,67,68,69,70,71,72,73,74,78,80,81,82,85,],[7,7,7,7,7,-14,7,-10,-11,-44,-45,-37,7,-38,-30,7,7,-39,-40,-27,-9,-49,-51,-48,-42,-43,7,7,-28,-29,-16,-20,7,-18,-19,7,-22,7,-23,-17,-15,7,7,-21,-13,-50,-47,-41,-46,-5,-4,-36,7,-34,-33,-31,-35,-32,7,7,-8,-12,7,-6,-7,]),'$end':([3,4,7,8,9,10,11,12,13,15,16,19,21,22,25,27,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,68,69,70,71,72,78,80,82,85,],[0,-1,-14,-3,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-2,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,-34,-33,-31,-35,-32,-8,-12,-6,-7,]),'TEST_GT':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,44,44,44,44,44,44,-28,-29,44,-36,-34,-33,-31,44,-32,44,]),'GT':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,42,42,42,42,42,42,-28,-29,42,-36,-34,-33,-31,42,-32,42,]),'STRING':([1,2,5,6,7,11,12,13,14,15,17,18,19,21,28,29,30,32,34,41,42,43,44,45,46,47,48,49,50,51,52,53,54,58,60,74,],[15,15,15,15,-14,15,-45,-37,15,-38,15,15,-39,-40,-49,15,-48,15,15,-16,-20,15,-18,-19,15,-22,15,-23,-17,-15,15,15,-21,-47,-46,15,]),'DOLLAR':([34,],[62,]),'EQUALS':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,45,45,45,45,45,45,-28,-29,45,-36,-34,-33,-31,45,-32,45,]),'ECHO':([0,7,8,9,10,11,12,13,15,16,19,21,22,25,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,67,68,69,70,71,72,73,78,80,81,82,85,],[5,-14,5,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,5,-34,-33,-31,-35,-32,5,-8,-12,5,-6,-7,]),'LPAREN':([1,2,5,6,14,17,18,34,41,42,43,44,45,46,47,48,49,50,51,52,53,54,74,],[18,18,18,18,18,18,18,18,-16,-20,18,-18,-19,18,-22,18,-23,-17,-15,18,18,-21,18,]),'VARIABLE':([1,2,5,6,7,11,12,13,14,15,17,18,19,21,28,29,30,32,34,41,42,43,44,45,46,47,48,49,50,51,52,53,54,58,60,74,],[19,19,19,19,-14,19,-45,-37,19,-38,19,19,-39,-40,-49,19,-48,19,19,-16,-20,19,-18,-19,19,-22,19,-23,-17,-15,19,19,-21,-47,-46,19,]),'TEST_EQ':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,51,51,51,51,51,51,-28,-29,51,-36,-34,-33,-31,51,-32,51,]),'TIMES':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,46,46,46,46,46,46,-28,-29,46,-36,-34,-33,46,46,46,46,]),'DECREMENT':([7,22,],[-14,39,]),'IF':([0,7,8,9,10,11,12,13,15,16,19,21,22,25,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,67,68,69,70,71,72,73,78,80,81,82,85,],[6,-14,6,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,6,-34,-33,-31,-35,-32,6,-8,-12,6,-6,-7,]),'DOUBLE_RPAREN':([7,13,15,16,19,21,22,24,39,40,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,55,-28,-29,-36,-34,-33,-31,-35,-32,80,]),'GTE':([7,13,15,16,19,21,22,23,24,25,35,36,37,39,40,63,66,68,69,70,71,72,77,],[-14,-37,-38,-30,-39,-40,-27,54,54,54,54,54,54,-28,-29,54,-36,-34,-33,-31,54,-32,54,]),'BREAK':([0,7,8,9,10,11,12,13,15,16,19,21,22,25,28,29,30,31,32,39,40,55,57,58,59,60,61,63,66,67,68,69,70,71,72,73,78,80,81,82,85,],[9,-14,9,-10,-11,-44,-45,-37,-38,-30,-39,-40,-27,-9,-49,-51,-48,-42,-43,-28,-29,-13,-50,-47,-41,-46,-5,-4,-36,9,-34,-33,-31,-35,-32,9,-8,-12,9,-6,-7,]),'BOOLEAN':([1,2,5,6,7,11,12,13,14,15,17,18,19,21,28,29,30,32,34,41,42,43,44,45,46,47,48,49,50,51,52,53,54,58,60,74,],[21,21,21,21,-14,21,-45,-37,21,-38,21,21,-39,-40,-49,21,-48,21,21,-16,-20,21,-18,-19,21,-22,21,-23,-17,-15,21,21,-21,-47,-46,21,]),'RBRACKET':([7,13,15,16,19,21,22,35,39,40,66,68,69,70,71,72,],[-14,-37,-38,-30,-39,-40,-27,64,-28,-29,-36,-34,-33,-31,-35,-32,]),'DOUBLE_RBRACKET':([7,13,15,16,19,21,22,36,39,40,66,68,69,70,71,72,],[-14,-37,-38,-30,-39,-40,-27,65,-28,-29,-36,-34,-33,-31,-35,-32,]),}
_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 = {'const':([1,2,5,6,11,14,17,18,29,32,34,43,46,48,52,53,74,],[16,16,16,16,28,16,16,16,28,28,16,16,16,16,16,16,16,]),'comparators':([23,24,25,35,36,37,63,68,69,70,71,72,77,],[52,52,52,52,52,52,52,52,52,52,52,52,52,]),'switch_list':([11,30,],[32,58,]),'instruction':([0,8,67,73,81,],[8,8,8,8,8,]),'argument':([11,29,32,],[29,29,29,]),'switch':([11,30,],[30,30,]),'program':([0,],[3,]),'command':([0,8,67,73,81,],[11,11,11,11,11,]),'argument_list':([11,29,32,],[31,57,59,]),'double_paren_dollar_prefix_expression':([34,],[61,]),'identifier':([0,1,2,5,6,8,14,17,18,33,34,43,46,48,52,53,67,73,74,81,],[12,22,22,22,22,12,22,22,22,60,22,22,22,22,22,22,12,12,22,12,]),'expression':([1,2,5,6,14,17,18,34,43,46,48,52,53,74,],[23,24,25,23,35,36,37,63,68,69,70,71,72,77,]),'condition':([1,6,],[20,26,]),'instructions':([0,8,67,73,81,],[4,27,75,76,83,]),}
_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' -> program","S'",1,None,None,None),
('program -> instructions','program',1,'p_program','BashParser.py',22),
('instructions -> instruction instructions','instructions',2,'p_instructions','BashParser.py',28),
('instructions -> instruction','instructions',1,'p_instructions','BashParser.py',29),
('instruction -> identifier ASSIGNMENT expression','instruction',3,'p_instruction_assignment','BashParser.py',37),
('instruction -> identifier ASSIGNMENT double_paren_dollar_prefix_expression','instruction',3,'p_instruction_assignment','BashParser.py',38),
('instruction -> IF condition SEMICOLON THEN instructions SEMICOLON FI','instruction',7,'p_instruction_if','BashParser.py',43),
('instruction -> IF condition SEMICOLON THEN instructions SEMICOLON ELSE instructions SEMICOLON FI','instruction',10,'p_instruction_if','BashParser.py',44),
('instruction -> WHILE condition SEMICOLON DO instructions DONE','instruction',6,'p_instruction_while','BashParser.py',52),
('instruction -> ECHO expression','instruction',2,'p_instruction_echo','BashParser.py',57),
('instruction -> BREAK','instruction',1,'p_instruction_break','BashParser.py',62),
('instruction -> CONTINUE','instruction',1,'p_instruction_continue','BashParser.py',66),
('double_paren_dollar_prefix_expression -> DOLLAR DOUBLE_LPAREN expression DOUBLE_RPAREN','double_paren_dollar_prefix_expression',4,'p_double_paren_dollar_prefix_expression','BashParser.py',70),
('instruction -> DOUBLE_LPAREN expression DOUBLE_RPAREN','instruction',3,'p_double_paren_expression','BashParser.py',76),
('identifier -> IDENTIFIER','identifier',1,'p_identifier','BashParser.py',83),
('comparators -> TEST_EQ','comparators',1,'p_comparators','BashParser.py',87),
('comparators -> TEST_NEQ','comparators',1,'p_comparators','BashParser.py',88),
('comparators -> TEST_LT','comparators',1,'p_comparators','BashParser.py',89),
('comparators -> TEST_GT','comparators',1,'p_comparators','BashParser.py',90),
('comparators -> EQUALS','comparators',1,'p_comparators','BashParser.py',91),
('comparators -> GT','comparators',1,'p_comparators','BashParser.py',92),
('comparators -> GTE','comparators',1,'p_comparators','BashParser.py',93),
('comparators -> LT','comparators',1,'p_comparators','BashParser.py',94),
('comparators -> LTE','comparators',1,'p_comparators','BashParser.py',95),
('condition -> expression','condition',1,'p_condition','BashParser.py',100),
('condition -> DOUBLE_LBRACKET expression DOUBLE_RBRACKET','condition',3,'p_condition','BashParser.py',101),
('condition -> LBRACKET expression RBRACKET','condition',3,'p_condition','BashParser.py',102),
('expression -> identifier','expression',1,'p_expression','BashParser.py',111),
('expression -> identifier DECREMENT','expression',2,'p_expression','BashParser.py',112),
('expression -> identifier INCREMENT','expression',2,'p_expression','BashParser.py',113),
('expression -> const','expression',1,'p_expression','BashParser.py',114),
('expression -> expression PLUS expression','expression',3,'p_expression','BashParser.py',115),
('expression -> expression MINUS expression','expression',3,'p_expression','BashParser.py',116),
('expression -> expression TIMES expression','expression',3,'p_expression','BashParser.py',117),
('expression -> expression DIVIDE expression','expression',3,'p_expression','BashParser.py',118),
('expression -> expression comparators expression','expression',3,'p_expression','BashParser.py',119),
('expression -> LPAREN expression RPAREN','expression',3,'p_expression','BashParser.py',120),
('const -> NUMBER','const',1,'p_const_number','BashParser.py',137),
('const -> STRING','const',1,'p_const_string','BashParser.py',141),
('const -> VARIABLE','const',1,'p_variable','BashParser.py',145),
('const -> BOOLEAN','const',1,'p_const_boolean','BashParser.py',149),
('instruction -> command switch_list argument_list','instruction',3,'p_instruction_command_call','BashParser.py',156),
('instruction -> command argument_list','instruction',2,'p_instruction_command_call','BashParser.py',157),
('instruction -> command switch_list','instruction',2,'p_instruction_command_call','BashParser.py',158),
('instruction -> command','instruction',1,'p_instruction_command_call','BashParser.py',159),
('command -> identifier','command',1,'p_command','BashParser.py',175),
('switch -> MINUS identifier','switch',2,'p_command_switch','BashParser.py',179),
('switch_list -> switch switch_list','switch_list',2,'p_command_switch_list','BashParser.py',183),
('switch_list -> switch','switch_list',1,'p_command_switch_list_first','BashParser.py',187),
('argument -> const','argument',1,'p_command_argument','BashParser.py',191),
('argument_list -> argument argument_list','argument_list',2,'p_command_argument_list','BashParser.py',195),
('argument_list -> argument','argument_list',1,'p_command_argument_list_first','BashParser.py',199),
]