Example #1
0
TreeNode* statement(void)
{
    TreeNode* t = NULL;

    switch(s_token) {
        case IF:
            t = if_stmt();
            break;
        case REPEAT:
            t = repeat_stmt();
            break;
        case ID:
            t = assign_stmt();
            break;
        case READ:
            t = read_stmt();
            break;
        case WRITE:
            t = write_stmt();
            break;
        default:
            syntaxError("unexpected token -> ");
            printToken(s_token, g_tokenString);
            s_token = getToken();
            break;
    }
    return t;
}
Example #2
0
File: parse.c Project: 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 );
		
}
Example #3
0
TreeNode * for_stmt(void)
{
    TreeNode * t = newStmtNode(ForK);
    TreeNode * temp ;
    TreeNode * ultimoIrmao ;
    match(FOR);
    switch(token){
      case LPAREN:
        match(LPAREN);
        if (t!= NULL) t->child[0] = assign_stmt();
        match(COMMA);
        if (t!= NULL) t->child[1] = expres();
        match(COMMA);
        if (temp!= NULL) temp = assign_stmt();
        match(RPAREN);
        if (t!= NULL) t->child[2] = stmt_sequence();

        if (t->child[2] != NULL){ //Se o terceiro filho tiver algo,
          if(t->child[2]->sibling != NULL){ //Se o nó tem irmão, vamos fazer um loop para chegar até o ultimo irmão.
            ultimoIrmao = t->child[2]->sibling;
            while ( ultimoIrmao->sibling != NULL){ //Loop para chegar em ultimo irmão
              ultimoIrmao = ultimoIrmao->sibling;
           }
           ultimoIrmao->sibling = temp;
          }
          else {
            t->child[2]->sibling = temp;
          }
        }
        else{ //Se o que tem dentro do FOR for nada, então vamos só fazer as iterações
          t->child[2] = temp;
        }
        
        match(ENDFOR);
      break;
    default:
      syntaxError("unexpected token -> ");
      printToken(token,tokenString);
      token = getToken();
      break;
    }
    return t;

}
Example #4
0
TreeNode * statement(void)
{ TreeNode * t = NULL;
  switch (token) {
    case IF : t = if_stmt(); break;
    case REPEAT : t = repeat_stmt(); break;
    case FOR : t = for_stmt(); break; //ADICIONADO O FOR COMO UMA DECLARAÇÃO
    case ID : t = assign_stmt(); break;
    case READ : t = read_stmt(); break;
    case WRITE : t = write_stmt(); break;
    default : syntaxError("unexpected token -> ");
              printToken(token,tokenString);
              token = getToken();
              break;
  } /* end case */
  return t;
}
Example #5
0
TreeNode * statement(void) //statement  -> expression| if_stmt| while_stmt|for_stmt|var_stmt|assign_stmt
{ TreeNode * t = NULL;
  switch (token) {
    case IF : t = if_stmt(); break;
    case FOR : t = for_stmt(); break;
    case ID : t = assign_stmt(); break;
    case WHILE : t = while_stmt(); break;
    case INT :
	case CHAR :
		t = var_stmt(); break;
	case RBRACE : match(RBRACE); break;
    default : syntaxError("unexpected token -> ");
              printToken(token,tokenString);
              token = getToken();
              break;
  } /* end case */
  return t;
}