Beispiel #1
0
/* 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 - Arithmetic - (P)
 * FIRST set: { ==, <>, >, < }
 */
void relational_expression_a_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_a_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");
}