/*****************************************************************************************************
 *  syntacticList -> faz analise de uma lista
 *  TIL     => token com o '~'
 *  Retorna => tipo especializado
 *
 ****************************************************************************************************/
TList* Syntactic::syntacticList(TokenType *til){
    TokenType *buffer, *token;
    TList *list = new TList();
    list->setList(til);  //seta token lista ~

    buffer = lex->getToken(); //pega o '('

    if(buffer->getToken() == "("){
        buffer = lex->getToken(); //pega o primeiro elemento da lista

        if(buffer->getToken() == ",") //se for ',' erro
            erro->showError(" digito, string, variavel esperado mas: ", buffer->getLine(), buffer->getColumn(), buffer->getToken());

        while(buffer->getToken() != ")"){ //enquanto nao for ')'

            list->insere(buffer); //coloca o valor na lista

            token = lex->getToken(); //pega as virgulas

            if(token->getToken() != "," && token->getToken() != ")")
                erro->showError(" , esperado mas: ", token->getLine(), token->getColumn(), token->getToken());
            else if(token->getToken() != "," && token->getToken() == ")") break;
            else buffer = lex->getToken(); //pega os valores
        }

        buffer = lex->getToken(); //proximo token tem que ser '!'
        if(buffer->getClasse() != END_CMD) erro->showError(" ! esperado mas: ", buffer->getLine(), buffer->getColumn(), buffer->getToken());
    }
    else erro->showError(" ( esperado mas: ", buffer->getLine(), buffer->getColumn(), buffer->getToken());

    return list;
}