def p_param_list2(self, p): '''param_list : param_pair''' p[0] = ASTNode('param_list', p[1])
def p_value_pair(self, p): '''value_pair : id_or_str ASSIGN id_or_str''' p[0] = ASTNode('value_pair', p[1], p[3])
def p_command_def1(self, p): '''command_def : CMD ID param_list NEWLINE''' p[0] = ASTNode('cmd', p[2], p[3])
def p_pure_val_list2(self, p): '''pure_val_list : id_or_str''' p[0] = ASTNode('pure_val_list', p[1])
def p_subst_val_list2(self, p): '''subst_val_list : value_pair''' p[0] = ASTNode('subst_val_list', p[1])
def p_launcher1(self, p): '''launcher : label_def body_def''' p[0] = ASTNode('launcher', p[1], p[2])
def p_control_def6(self, p): '''control_def : param LIST val_list NEWLINE''' p[0] = ASTNode('list', p[1], p[3], '')
def p_control_def3(self, p): '''control_def : param SELECT val_list ctrl_label NEWLINE''' p[0] = ASTNode('select', p[1], p[3], p[4])
def p_control_def4(self, p): '''control_def : param SELECT val_list NEWLINE''' p[0] = ASTNode('select', p[1], p[3], '')
def p_control_def1(self, p): '''control_def : param INPUT width def_val ctrl_label NEWLINE''' p[0] = ASTNode('input', p[1], p[3], p[4], p[5])
def p_control_def2(self, p): '''control_def : param INPUT width def_val NEWLINE''' p[0] = ASTNode('input', p[1], p[3], p[4], '')
def p_body_def2(self, p): '''body_def : line_def''' p[0] = ASTNode('body', p[1])
def p_label_def1(self, p): '''label_def : LABEL id_or_str NEWLINE''' p[0] = ASTNode('label', p[2])
def p_launcher2(self, p): '''launcher : SEPARATOR''' p[0] = ASTNode('sep', p[1])
def p_param_pair(self, p): '''param_pair : id_or_str ASSIGN rhs''' p[0] = ASTNode('param_pair', p[1], p[3])
def p_control_def5(self, p): '''control_def : param LIST val_list ctrl_label NEWLINE''' p[0] = ASTNode('list', p[1], p[3], p[4])
def p_break(self, p): '''break : BREAK NEWLINE''' p[0] = ASTNode('break')
def p_launchers_def1(self, p): '''launchers : launcher''' p[0] = ASTNode('launchers', p[1])