示例#1
0
        private void analisaVariaveis()
        {
            int varsCreated = 0;

            do
            {
                if (!hasEndedTokens && isSimbol(IDENTIFICADOR))
                {
                    if (!Semantico.pesquisaDuplicVarTabela(actualToken.lexem))
                    {
                        Semantico.insereTabela(actualToken.lexem, NOME_VARIAVEL, totalVariables + varsCreated);
                        varsCreated++;

                        updateToken();

                        if (!hasEndedTokens && (isSimbol(VIRGULA) || isSimbol(DOIS_PONTOS)))
                        {
                            if (!hasEndedTokens && isSimbol(VIRGULA))
                            {
                                updateToken();

                                if (!hasEndedTokens && !isSimbol(IDENTIFICADOR))
                                {
                                    throwError(new CompiladorException(ERRO_SINTATICO), ERRO_VAR);
                                }
                            }
                        }
                        else
                        {
                            throwError(new CompiladorException(ERRO_SINTATICO), ERRO_DOIS_PONTOS);
                        }
                    }
                    else
                    {
                        throwError(new CompiladorException(ERRO_SEMANTICO), DUPLIC_VAR_ERROR);
                    }
                }
                else
                {
                    throwError(new CompiladorException(ERRO_SINTATICO), ERRO_NOME);
                }
            } while (!hasEndedTokens && !isSimbol(DOIS_PONTOS));

            updateToken();

            declaredVar++;
            totalVarsCreatedLocally.Push(varsCreated);
            CodeGenerator.gera(EMPTY_STRING, ALLOC, totalVariables.ToString(), varsCreated.ToString());
            totalVariables += varsCreated;

            analisaTipo();
        }