/* FIRST(statement)={AVID,SVID,IF,USING,INPUT,OUTPUT} <statement> -> <assignment statement> | <selection statement> | <iteration statement> | <input statement> | <output statement> Author: Kwok Hong Kelvin Chan */ void statement(void){ switch(lookahead_token.code){ case AVID_T: case SVID_T: assignment_statement(); break; case KW_T: switch(lookahead_token.attribute.get_int) { case IF: selection_statement(); break; case USING: iteration_statement(); break; case INPUT: input_statement(); break; case OUTPUT: output_statement(); break; default: syn_printe(); break; } break; default: syn_printe(); break; } }
int statement(void) { if( labeled_statement() ) { } else if( compound_statement() ) { } else if( expression_statement() ) { } else if( selection_statement() ) { } else if( iteration_statement() ) { } else if( jump_statement() ) { } else { abort(); } }
/* * Production: Statement * FIRST set: { AVID_T, SVID_T, KW_T (only IF, USING, INPUT, OUTPUT) } */ void statement(void) { switch (lookahead.code) { case AVID_T: case SVID_T: assignment_statement(); return; case KW_T: /* The token attribute must be IF, INPut, OUTPUT or USING */ switch (lookahead.attribute.kwt_idx) { case IF: selection_statement(); return; case INPUT: input_statement(); return; case OUTPUT: output_statement(); return; case USING: iteration_statement(); return; /* If the keyword token does not match the above, print an error and return. */ default: syn_printe(); return; } /* If nothing matches, print an error. */ default: syn_printe(); return; } }