Exemplo n.º 1
0
Arquivo: parse.c Projeto: pexcn/Lily
static void statement()
{
	int second_token;
	
	if(token == TOK_IF){
		selection_stmt();
	}else if(token == TOK_LBRACKET){
		compound_stmt();
	}else if(token == TOK_ID||token == TOK_AND){
		second_token = virtual_get_token(true);
		if(second_token == TOK_ASSIGN){
			assign_stmt();
		}else if(second_token == TOK_LSQUARE){
			
			while(second_token!=TOK_RSQUARE){
				second_token = virtual_get_token(false);
				if(second_token == TOK_ASSIGN 
				   ||second_token == TOK_SEMI
				   ||second_token == TOK_EOF)
				{
					fprintf( stderr, "line %d: error array var", save_line );
					break;
				}
			}
			second_token = virtual_get_token(false);
			
			if(second_token == TOK_ASSIGN){
				assign_stmt();
			}else{
				expression_stmt();
			}
			
		}else{
			expression_stmt();
		}
		
	}else if(token == TOK_WHILE||token == TOK_FOR){
		iteration_stmt();
	}else if(token == TOK_RETURN){
		return_stmt();
	}else if(token == TOK_SEMI){
		match(TOK_SEMI); 
	}else
		fprintf( stderr, "line %d: error statements", save_line );
		
}
Exemplo n.º 2
0
/* EBNF: statment -> expression-stmt | compound-stmt | 
 * selection-stmt | iteration-stmt | return-stmt */
static TreeNode * statement (void)
{ TreeNode * t = NULL;

  while (token == COMMENT) unexpectedTokenHandling();
  switch (token)
  { 
    /* First(expression-stmt)={ID,LPAREN,NUM} */
    case ID: case LPAREN: case NUM: 
                  t = expression_stmt(); break;
    case CLPAREN: t = compound_stmt();   break;
    case IF:      t = selection_stmt();  break;
    case WHILE:   t = iteration_stmt();  break;
    case RETURN:  t = return_stmt();     break;
    default:
      unexpectedTokenHandling();
      break;
  }
  return t;
}