예제 #1
0
        private void analisaEscreva()
        {
            updateToken();

            if (!hasEndedTokens && isSimbol(ABRE_PARENTESES))
            {
                updateToken();

                if (!hasEndedTokens && isSimbol(IDENTIFICADOR))
                {
                    if (Semantico.pesquisaDeclVarFuncTabela(actualToken.lexem))
                    {
                        Struct identifierStruct = Semantico.pesquisaTabela(actualToken.lexem, 0);

                        if (identifierStruct.nome.Equals(NOME_FUNCAO))
                        {
                            CodeGenerator.gera(EMPTY_STRING, CALL, identifierStruct.rotulo.ToString(), EMPTY_STRING);
                            CodeGenerator.gera(EMPTY_STRING, LDV, FUNCTION_RETURN_LABEL, EMPTY_STRING);
                        }
                        else
                        {
                            CodeGenerator.gera(EMPTY_STRING, LDV, identifierStruct.rotulo.ToString(), EMPTY_STRING);
                        }

                        CodeGenerator.gera(EMPTY_STRING, PRN, EMPTY_STRING, EMPTY_STRING);

                        updateToken();

                        if (!hasEndedTokens && isSimbol(FECHA_PARENTESES))
                        {
                            updateToken();
                        }
                        else
                        {
                            throwError(new CompiladorException(ERRO_SINTATICO), ERRO_PARENTESIS);
                        }
                    }
                    else
                    {
                        throwError(new CompiladorException(ERRO_SEMANTICO), DECL_VAR_FUNC_ERROR);
                    }
                }
                else
                {
                    throwError(new CompiladorException(ERRO_SINTATICO), ERRO_NOME);
                }
            }
            else
            {
                throwError(new CompiladorException(ERRO_SINTATICO), ERRO_PARENTESIS);
            }
        }