def p_selectq(p): '''SELECTQ : SELECT SELECTLIST FROMCLAUSE | SELECT SELECTLIST FROMCLAUSE SELECTWHEREAGGREGATE | SELECT TYPESELECT SELECTLIST FROMCLAUSE | SELECT TYPESELECT SELECTLIST FROMCLAUSE SELECTWHEREAGGREGATE | SELECT SELECTLIST''' nodo = Node('SELECTQ') if (len(p) == 4): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) nodo.add_childrens(p[3]) elif (len(p) == 5): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) nodo.add_childrens(p[3]) nodo.add_childrens(p[4]) elif (len(p) == 6): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) nodo.add_childrens(p[3]) nodo.add_childrens(p[4]) nodo.add_childrens(p[5]) elif (len(p) == 3): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) p[0] = nodo
def p_sql_expression2(p): '''SQLEXPRESSION2 : SQLEXPRESSION2 PLUS SQLEXPRESSION2 | SQLEXPRESSION2 REST SQLEXPRESSION2 | SQLEXPRESSION2 DIVISION SQLEXPRESSION2 | SQLEXPRESSION2 ASTERISK SQLEXPRESSION2 | SQLEXPRESSION2 MODULAR SQLEXPRESSION2 | SQLEXPRESSION2 EXPONENT SQLEXPRESSION2 | REST SQLEXPRESSION2 %prec UREST | PLUS SQLEXPRESSION2 %prec UPLUS | LEFT_PARENTHESIS SQLEXPRESSION2 RIGHT_PARENTHESIS | SQLNAME | SQLINTEGER''' nodo = Node('SQLEXPRESSION2') if (len(p) == 4): if (p[1] == "(" and p[3] == ")"): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) nodo.add_childrens(Node(p[3])) else: nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) elif (len(p) == 3): nodo.add_childrens(Node(p[1])) nodo.add_childrens(p[2]) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_sql_name(p): '''SQLNAME : STRINGCONT | CHARCONT | ID''' nodo = Node('SQLNAME') nodo.add_childrens(Node(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_type_combine_query(p): '''TYPECOMBINEQUERY : UNION | INTERSECT | EXCEPT''' nodo = Node('TYPECOMBINEQUERY') 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_type_select(p): '''TYPESELECT : ALL | DISTINCT | UNIQUE''' nodo = Node('TYPESELECT') nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_exists_clause(p): '''EXISTSCLAUSE : EXISTS LEFT_PARENTHESIS SUBQUERY RIGHT_PARENTHESIS''' nodo = Node('EXISTSCLAUSE') nodo.add_childrens(Node(p[1])) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) nodo.add_childrens(Node(p[3])) 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_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_aggregate_functions(p): '''AGGREGATEFUNCTIONS : AGGREGATETYPES LEFT_PARENTHESIS CONTOFAGGREGATE RIGHT_PARENTHESIS''' nodo = Node('AGGREGATEFUNCTIONS') nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) nodo.add_childrens(Node(p[4])) p[0] = nodo
def p_joinp(p): '''JOINP : JOINTYPE JOIN TABLEREFERENCE ON SQLEXPRESSION''' nodo = Node('JOINP') nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) nodo.add_childrens(Node(p[4])) nodo.add_childrens(p[5]) 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_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_date_types(p): '''DATETYPES : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND''' nodo = Node('DATETYPES') nodo.add_childrens(Node(p[1])) 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_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_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_sql_unary_logical_expression_list(p): '''SQLUNARYLOGICALEXPRESSIONLIST : SQLUNARYLOGICALEXPRESSIONLIST AND SQLUNARYLOGICALEXPRESSION | SQLUNARYLOGICALEXPRESSION''' nodo = Node('SQLUNARYLOGICALEXPRESSIONLIST') if (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_sql_and_expression_list(p): '''SQLANDEXPRESSIONLIST : SQLANDEXPRESSIONLIST OR SQLANDEXPRESSION | SQLANDEXPRESSION''' nodo = Node('SQLANDEXPRESSIONLIST') if (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
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_list_limit_number(p): '''LISTLIMITNUMBER : LISTLIMITNUMBER COMMA INT_NUMBER | INT_NUMBER''' nodo = Node('LISTLIMITNUMBER') if (len(p) == 2): nodo.add_childrens(Node(p[1])) else: nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(Node(p[3])) p[0] = nodo
def p_using_list(p): '''USINGLIST : USINGLIST COMMA SQLNAME | SQLNAME''' nodo = Node('USINGLIST') if (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) else: nodo.add_childrens(p[1]) p[0] = nodo
def p_order_by_clause_list(p): '''ORDERBYCLAUSELIST : ORDERBYCLAUSELIST COMMA ORDERBYEXPRESSION | ORDERBYEXPRESSION''' nodo = Node('ORDERBYCLAUSELIST') if (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) elif (len(p) == 2): nodo.add_childrens(p[1]) p[0] = nodo
def p_list_item(p): '''LISTITEM : LISTITEM COMMA SELECTITEM | SELECTITEM''' nodo = Node('LISTITEM') if (len(p) == 2): nodo.add_childrens(p[1]) elif (len(p) == 4): nodo.add_childrens(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_list_params_insert(p): '''LISTPARAMSINSERT : LISTPARAMSINSERT COMMA ID | ID''' nodo = Node('LISTPARAMSINSERT') if (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(Node(p[3])) elif (len(p) == 2): nodo.add_childrens(Node(p[1])) p[0] = nodo
def p_set_list(p): '''SETLIST : SETLIST COMMA COLUMNVALUES | COLUMNVALUES''' nodo = Node('SETLIST') if (len(p) == 4): nodo.add_childrens(p[1]) nodo.add_childrens(Node(p[2])) nodo.add_childrens(p[3]) else: nodo.add_childrens(p[1]) p[0] = nodo