def p_sql_name(p): '''SQLNAME : STRINGCONT | CHARCONT | ID''' nodo = Node('SQLNAME') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_type_combine_query(p): '''TYPECOMBINEQUERY : UNION | INTERSECT | EXCEPT''' nodo = Node('TYPECOMBINEQUERY') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_type_select(p): '''TYPESELECT : ALL | DISTINCT | UNIQUE''' nodo = Node('TYPESELECT') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_dml(p): '''DML : QUERYSTATEMENT | INSERTSTATEMENT | DELETESTATEMENT | UPDATESTATEMENT''' nodo = Node('DML') nodo.add_childrens(p[1]) p[0] = nodo
def p_select_set(p): '''SELECTSET : SELECTQ | LEFT_PARENTHESIS SUBQUERY RIGHT_PARENTHESIS''' nodo = Node('SELECTSET') if (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_aggregate_types(p): '''AGGREGATETYPES : AVG | SUM | COUNT | MAX | MIN''' nodo = Node('AGGREGATETYPES') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_date_types(p): '''DATETYPES : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND''' nodo = Node('DATETYPES') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_column_values(p): '''COLUMNVALUES : OBJECTREFERENCE EQUALS SQLEXPRESSION2''' nodo = Node('COLUMNVALUES') nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) p[0] = nodo
def p_dml(p): '''DML : QUERYSTATEMENT | INSERTSTATEMENT | DELETESTATEMENT | UPDATESTATEMENT''' if (len(p) == 2): nodo = Node('DML') nodo.add_childrens(p[1]) p[0] = nodo else: p[0] = 'error'
def p_relop(p): '''RELOP : EQUALS | NOT_EQUAL | GREATE_EQUAL | GREATE_THAN | LESS_THAN | LESS_EQUAL | NOT_EQUAL_LR''' nodo = Node('RELOP') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_sql_alias(p): '''SQLALIAS : AS SQLNAME | SQLNAME''' nodo = Node('SQLALIAS') if (len(p) == 3): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_sql_unary_logical_expression(p): '''SQLUNARYLOGICALEXPRESSION : NOT EXISTSORSQLRELATIONALCLAUSE | EXISTSORSQLRELATIONALCLAUSE''' nodo = Node('SQLUNARYLOGICALEXPRESSION') if (p[1] == 'NOT'): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_group_by_clause(p): '''GROUPBYCLAUSE : GROUP BY SQLEXPRESSIONLIST''' nodo = Node('GROUPCLAUSE') nodo.add_childrens(Node(p[1])) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) p[0] = nodo
def p_order_by_clause(p): '''ORDERBYCLAUSE : ORDER BY ORDERBYCLAUSELIST''' nodo = Node('ORDERBYCLAUSE') nodo.add_childrens(Node(p[1])) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) p[0] = nodo
def p_order_by_expression(p): '''ORDERBYEXPRESSION : SQLSIMPLEEXPRESSION ASC | SQLSIMPLEEXPRESSION DESC | SQLSIMPLEEXPRESSION''' nodo = Node('ORDERBYEXPRESSION') if (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_join_type(p): '''JOINTYPE : INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER''' nodo = Node('JOINTYPE') if (len(p) == 2): nodo.add_childrens(Node(p[1])) elif (len(p) == 3): nodo.add_childrens(Node(p[1])) nodo.add_childrens(Node(p[2])) p[0] = nodo
def p_table_reference(p): '''TABLEREFERENCE : OBJECTREFERENCE SQLALIAS | OBJECTREFERENCE SQLALIAS JOINLIST | OBJECTREFERENCE JOINLIST | OBJECTREFERENCE''' nodo = Node('TABLEREFERENCE') if (len(p) == 2): nodo.add_childrens(p[1]) elif (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) elif (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) nodo.add_childrens(p[3]) p[0] = nodo
def p_cont_of_aggregate(p): '''CONTOFAGGREGATE : ASTERISK | SQLSIMPLEEXPRESSION''' nodo = Node('CONTOFAGGREGATE') if (p[1] == '*'): nodo.add_childrens(Node(p[1])) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_limit_types(p): '''LIMITTYPES : LISTLIMITNUMBER | ALL''' nodo = Node('LIMITTYPES') if (p[1] == "ALL"): nodo.add_childrens(Node(p[1])) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_returning_list(p): '''RETURNINGLIST : ASTERISK | EXPRESSIONRETURNING''' nodo = Node('RETURNINGLIST') if (p[1] == '*'): nodo.add_childrens(Node(p[1])) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_query_statement(p): # ELEMENTO 0 ELEMENTO 1 ELEMENTO 2 ELEMENTO 3 '''QUERYSTATEMENT : SELECTSTATEMENT SEMICOLON''' nodo = Node('QUERYSTATEMENT') # Uso len para verificar si la produccion consta de 2 elementos, pero pongo que sea igual a 3 # porque PLY incluye el indice 0 como parte de la gramatica if (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) p[0] = nodo
def p_select_list(p): '''SELECTLIST : ASTERISK | LISTITEM''' nodo = Node('SELECTLIST') if p[1] == '*': nodo.add_childrens(Node(p[1])) elif (p[1] != '*'): nodo.add_childrens(p[1]) p[0] = nodo
def p_limit_options(p): '''LIMITOPTIONS : LIMITTYPES OFFSETOPTION | LIMITTYPES''' nodo = Node('LIMITOPTIONS') if (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_select_item(p): '''SELECTITEM : SQLSIMPLEEXPRESSION SQLALIAS | SQLSIMPLEEXPRESSION''' nodo = Node('SELECTITEM') if (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_select_statement(p): '''SELECTSTATEMENT : SELECTWITHOUTORDER OPTIONSSELECT | SELECTWITHOUTORDER''' nodo = Node('SELECTSTATEMENT') if (len(p) == 2): nodo.add_childrens(p[1]) elif (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) p[0] = nodo
def p_dml_list(p): '''DMLLIST : DMLLIST DML | DML''' nodo = Node('DMLLIST') if (len(p) == 2): nodo.add_childrens(p[1]) elif (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) p[0] = nodo
def p_join_list(p): '''JOINLIST : JOINLIST JOINP | JOINP''' nodo = Node('JOINLIST') if (len(p) == 2): nodo.add_childrens(p[1]) elif (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) p[0] = nodo
def p_options_select(p): '''OPTIONSSELECT : ORDERBYCLAUSE LIMITCLAUSE | LIMITCLAUSE | ORDERBYCLAUSE''' nodo = Node('OPTIONSSELECT') if (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_where_aggregate(p): '''SELECTWHEREAGGREGATE : WHERECLAUSE SELECTGROUPHAVING | SELECTGROUPHAVING | WHERECLAUSE''' nodo = Node('SELECTWHEREAGGREGATE') if (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_select_group_having(p): '''SELECTGROUPHAVING : GROUPBYCLAUSE | HAVINGCLAUSE GROUPBYCLAUSE | GROUPBYCLAUSE HAVINGCLAUSE''' nodo = Node('SELECTGROUPHAVING') if (len(p) == 2): nodo.add_childrens(p[1]) elif (len(p) == 3): nodo.add_childrens(p[1]) nodo.add_childrens(p[2]) p[0] = nodo