/* FIRST(relational expression)={AVID_T, FPL_T,INL_T,SVID_T, STR_T} <relational expression> -> <primary a_relational expression> <p_operator> <primary a_relational expression> | <primary s_relational expression> <p_operator> <primary s_relational expression> Author: Kyle Hinskens */ void relational_expression(void){ switch(lookahead_token.code){ case AVID_T: case FPL_T: case INL_T: primary_a_relational_expression(); switch (lookahead_token.code){ case REL_OP_T: p_operator(); primary_a_relational_expression(); break; default : syn_printe(); } break; case SVID_T: case STR_T: primary_s_relational_expression(); switch (lookahead_token.code){ case REL_OP_T: p_operator(); primary_s_relational_expression(); break; default : syn_printe(); } break; default: syn_printe(); break; } gen_incode("Relational expression parsed"); }
/* * Production: Relational Expression - String - (P) * FIRST set: { ==, <>, >, < } */ void relational_expression_s_p(void) { /* If the current code is not REL_OP_T (relational operator), print an error and return. */ if (lookahead.code != REL_OP_T) { syn_printe(); return; } match(lookahead.code, lookahead.attribute.arr_op); primary_s_relational_expression(); }
/* * Production: Relational Expression * FIRST set: { AVID_T, FPL_T, INL_T, SVID_T, STR_T } */ void relational_expression(void) { switch (lookahead.code) { case AVID_T: case FPL_T: case INL_T: primary_a_relational_expression(); relational_expression_a_p(); break; case STR_T: case SVID_T: primary_s_relational_expression(); relational_expression_s_p(); break; /* If nothing matches, print an error. */ default: syn_printe(); break; } gen_incode("PLATY: Relational expression parsed"); }