Referência de pseudolinguagem · Portugol Studio 2.0

Portugol Studio 2.0

Esta página documenta a pseudolinguagem Portugol Studio 2.0 a partir da gramática, do léxico e das referências públicas usados para descrevê-la.

Pseudolinguagem Portugol Studio 2.0

01 · Escopo

Sobre Portugol Studio 2.0

Portugol é um nome usado por diferentes pseudolinguagens. Esta documentação descreve especificamente Portugol Studio 2.0; suas regras não definem um padrão universal para todas as pseudolinguagens chamadas Portugol.

As regras apresentadas correspondem à pseudolinguagem Portugol Studio 2.0 e às fontes listadas ao final desta referência.

02 · Organização

Estrutura de um programa

Um arquivo começa com programa e um bloco delimitado por chaves. As inclusões de bibliotecas aparecem no início do bloco; depois podem vir declarações globais e funções. A forma usual de ponto de entrada é a função chamada inicio.

programa {
    inclua biblioteca Matematica --> mat

    const inteiro tentativas = 3
    inteiro acertos = 0

    funcao inicio() {
        escreva("Bem-vindo ao exercício")
    }
}

Blocos de funções, condições e laços usam { e }. O ponto e vírgula é usado nos três campos do cabeçalho de para; os exemplos tradicionais escrevem um comando por linha e não terminam cada comando com ponto e vírgula.

03 · Escrita

Nomes, comentários e literais

  • Identificadores começam com uma letra ASCII ou sublinhado; depois podem conter letras ASCII, dígitos e sublinhados. A gramática publicada não admite letras acentuadas em identificadores.
  • As palavras-chave são escritas sem acentos e a gramática as reconhece na forma minúscula, por exemplo programa, funcao e enquanto.
  • Comentários de linha começam com //; comentários de bloco ficam entre /* e */.
  • Números reais usam ponto como separador decimal. Textos usam aspas duplas e caracteres individuais usam aspas simples; o léxico também define escapes e literais hexadecimais.
  • Valores lógicos são verdadeiro e falso.
// comentário de linha
/* comentário
   em bloco */
cadeia mensagem = "Olá"
caracter inicial = 'A'
real media = 7.5
logico aprovado = verdadeiro

04 · Dados

Tipos, variáveis e constantes

TipoUso
inteiroNúmeros inteiros.
realNúmeros com parte fracionária.
logicoValores verdadeiro ou falso.
caracterUm caractere.
cadeiaSequência de caracteres.
vazioIndica função sem valor de retorno.

Declare o tipo antes do nome. Uma declaração pode agrupar nomes do mesmo tipo e pode incluir uma expressão inicial. A palavra-chave const marca declarações constantes. Valores e tipos precisam ser compatíveis.

inteiro idade = 18, ano
real altura = 1.72
const real pi_aproximado = 3.14
cadeia nome = "Lia"
logico concluiu = falso

Uma variável declarada dentro de uma função ou bloco tem escopo local; declarações no corpo principal, fora das funções, são globais. A forma de uma lista de declarações também permite inicializadores de vetores e matrizes, detalhados na seção Vetores e matrizes.

05 · Expressões

Operadores e precedência

GrupoOperadoresSignificado
Aritméticos+ - * / %Soma, subtração, multiplicação, divisão e resto.
Unários+ - nao ~ ++ --Sinal, negação lógica, negação bit a bit, incremento e decremento. ++ e -- podem aparecer antes ou depois do identificador.
Atribuição= += -= *= /=Atribuição simples e atribuições compostas. = não é o operador de igualdade.
Comparação== != > < <= >=Igualdade, diferença e comparações relacionais.
Lógicose ouConjunção e disjunção lógica.
Bit a bit^ << >> & |XOR, deslocamento à esquerda e à direita, AND e OR bit a bit.
Agrupamento( )Controla explicitamente a ordem de avaliação.

A gramática oficial define os operadores em alternativas recursivas, mas não publica uma tabela de precedência clara para todas as combinações. Use parênteses para explicitar a ordem, especialmente ao misturar comparações, lógica e operações bit a bit.

Prática recomendada: a própria regra gramatical traz uma observação de que igualdade tem prioridade baixa, então não dependa de uma ordem presumida para expressões compostas.

06 · Interação

Entrada e saída

escreva apresenta uma ou mais expressões. Para quebrar a linha, inclua a sequência de escape \n numa cadeia passada à função. leia recebe dados para variáveis. A função predefinida limpa() limpa a área de saída.

programa {
    funcao inicio() {
        cadeia nome
        escreva("Qual é o seu nome? ")
        leia(nome)
        escreva("Olá, ", nome, "!\n")
    }
}

A forma de exibir e ler dados depende das funções e bibliotecas disponíveis no ambiente de execução descrito pelas referências.

07 · Decisões

Condições e seleção

se executa um ramo quando a expressão lógica é verdadeira; senao define o ramo alternativo. Os blocos podem conter vários comandos. A seleção múltipla usa escolha, rótulos caso e o caso alternativo contrario.

se (nota >= 7) {
    escreva("Aprovado\n")
} senao {
    escreva("Continue praticando\n")
}

escolha (opcao) {
    caso 1:
        escreva("Iniciar\n")
        pare
    caso contrario:
        escreva("Opção desconhecida\n")
}

pare encerra o caso atual de escolha ou interrompe um laço. Use uma expressão do tipo lógico como condição.

08 · Laços

Repetição

Portugol Studio 2.0 define laços condicionais e um laço com inicialização, condição e incremento:

inteiro contador = 1
enquanto (contador <= 3) {
    escreva(contador, "\n")
    contador++
}

faca {
    contador--
} enquanto (contador > 0)

para (inteiro i = 0; i < 3; i++) {
    escreva(i, "\n")
}

enquanto testa antes de cada repetição; faca ... enquanto testa depois do bloco. Em para, os campos são separados por ponto e vírgula e podem inicializar uma variável, testar uma condição e atualizar o contador. pare encerra o laço atual.

09 · Coleções

Vetores e matrizes

Vetores usam um índice entre colchetes; matrizes usam dois índices. Quando o tamanho é informado, deve ser uma expressão inteira constante e positiva; em declarações com inicializador, ele pode ser inferido. A gramática também permite matrizes inicializadas por linhas.

programa {
    funcao inicio() {
        inteiro notas[3] = {8, 9, 10}
        inteiro quadro[2][2] = {{1, 2}, {3, 4}}
        escreva(notas[0], "\n")
        escreva(quadro[1][0], "\n")
    }
}

Os índices são expressões inteiras. Parâmetros de função podem declarar dimensões sem fixar os tamanhos, por exemplo inteiro valores[] ou inteiro tabela[][].

10 · Reuso

Funções e parâmetros

Uma função pode declarar um tipo de retorno antes do nome; omitir o tipo equivale ao uso sem valor de retorno, que também pode ser escrito com vazio. Parâmetros têm tipo e nome, podem ser separados por vírgulas e podem receber vetores ou matrizes. Um & antes do nome indica passagem por referência.

funcao inteiro dobrar(inteiro valor) {
    retorne valor * 2
}

funcao atualizar(inteiro &total, inteiro acrescimo) {
    total += acrescimo
}

funcao inicio() {
    inteiro resultado = dobrar(4)
    atualizar(resultado, 1)
    escreva(resultado, "\n")
}

retorne encerra a função e pode devolver uma expressão. A referência oficial descreve chamadas de função em expressões, funções com retorno e funções sem retorno.

11 · Recursos padrão

Bibliotecas de Portugol Studio 2.0

Uma biblioteca é incluída com inclua biblioteca Nome e pode receber um apelido após -->. As chamadas usam o nome ou o apelido seguido de ponto. A tabela resume os módulos da pseudolinguagem documentados nas fontes desta referência; a documentação de cada classe lista assinaturas, parâmetros e constantes.

BibliotecaRecursos de referência
ArquivosAbrir, fechar, ler e escrever arquivos; consultar fim de arquivo, selecionar arquivos, listar arquivos e pastas, criar pasta, substituir texto e verificar ou apagar arquivos.
CalendarioDia, mês, ano, hora, minuto, segundo, milissegundo e nomes de dias da semana.
GraficosJanela gráfica, desenhos geométricos, imagens, animações GIF, texto, fontes, cores, gradientes, dimensões, tela cheia e transformações visuais.
InternetTempo limite, leitura de conteúdo de endereço, download de imagem e verificação de disponibilidade.
MatematicaPI, potencia, raiz, arredondar, logaritmo, seno, cosseno, tangente, valor absoluto, maior e menor número.
MouseConsultar botões e posição do ponteiro; ocultar ou exibir o cursor.
ObjetosCriar objetos a partir de JSON/XML ou propriedades, consultar e atribuir propriedades tipadas, trabalhar com vetores de propriedades e liberar ou exportar objetos.
ServicosWebConexões e requisições web, cabeçalhos e parâmetros; operações de obter, publicar, atualizar e excluir dados.
SonsCarregar, reproduzir, pausar, interromper e liberar sons; consultar posição, duração e volume.
TecladoConsultar e ler teclas e caracteres, com constantes para teclas comuns, letras, números e funções.
Textonumero_caracteres, caixa_alta, caixa_baixa, substituir, preencher_a_esquerda, obter_caracter, posicao_texto e extrair_subtexto.
TiposVerificar se textos representam números, lógicos ou caracteres e converter entre cadeia, inteiro, real, lógico e caracter.
UtilDiretório do usuário, tamanhos de vetores e matrizes, sorteio, espera e tempo decorrido.
inclua biblioteca Matematica --> mat

funcao inicio() {
    escreva(mat.potencia(2, 3), "\n")
}

O conjunto de bibliotecas pertence ao ambiente de referência de Portugol Studio 2.0; nem toda biblioteca é apropriada para qualquer interpretador ou contexto de execução.

Assinaturas e resultados

As chamadas abaixo usam o apelido mat do exemplo anterior. As funções devolvem valores que podem ser atribuídos a variáveis ou combinados em expressões.

BibliotecaAssinatura ou chamadaComportamento
Matematicapotencia(base, expoente)Devolve um real com a base elevada ao expoente. Exemplo: potencia(2, 3) resulta em 8.
Matematicaraiz(radicando, indice)Devolve um real com a raiz indicada pelo índice. raiz(27, 3) resulta em 3.
Matematicaarredondar(numero, casas), logaritmo(numero, base)Devolvem reais: arredondamento para a quantidade de casas informada e logaritmo na base indicada.
Matematicaseno(angulo), cosseno(angulo), tangente(angulo)Devolvem reais com o resultado trigonométrico; os ângulos são expressos em radianos.
Matematicavalor_absoluto(numero), maior_numero(a, b), menor_numero(a, b), PIDevolvem reais: valor absoluto, maior ou menor valor entre dois números e a constante π.
Textonumero_caracteres(cadeia), caixa_alta(cad), caixa_baixa(cad)A primeira devolve um inteiro; as outras devolvem a cadeia em maiúsculas ou minúsculas.
Textosubstituir(cad, pesquisa, substituto)Devolve uma cadeia com todas as ocorrências do trecho pesquisado substituídas.
Textopreencher_a_esquerda(car, tamanho, cad)Devolve uma cadeia preenchida à esquerda até o tamanho indicado; cadeias que já têm esse tamanho não mudam.
Textoobter_caracter(cad, indice), posicao_texto(texto, cadeia, posicao_inicial)A primeira devolve um caracter; a segunda, um inteiro com a posição. Os índices começam em zero; a busca devolve -1 quando não encontra o texto.
Textoextrair_subtexto(cadeia, posicao_inicial, posicao_final)Devolve uma cadeia do índice inicial até o final, sem incluir o índice final. Exemplo: extrair_subtexto("salgado", 0, 3) resulta em "sal".
Tiposcadeia_e_inteiro(cad, base), cadeia_e_real(cad), cadeia_e_logico(cad), cadeia_e_caracter(cad)Devolvem valores lógicos para indicar se a cadeia representa o tipo indicado. Para inteiros, as bases documentadas são 2, 10 e 16.
Tiposinteiro_e_caracter(valor), caracter_e_inteiro(car), caracter_e_logico(car)Devolvem valores lógicos para testar se os valores podem ser convertidos nos tipos indicados.
Tiposcadeia_para_inteiro(valor, base), cadeia_para_real(valor), cadeia_para_logico(valor), cadeia_para_caracter(valor)Devolvem inteiro, real, lógico ou caracter, conforme a função. A conversão lógica reconhece verdadeiro ou falso; a conversão para caracter exige exatamente um caracter.
Tiposinteiro_para_cadeia(valor, base), inteiro_para_caracter(valor), inteiro_para_logico(valor), inteiro_para_real(valor)Devolvem cadeia, caracter, lógico ou real; para cadeia, use base 2, 10 ou 16.
Tiposcaracter_para_cadeia(valor), caracter_para_inteiro(valor), caracter_para_logico(valor), logico_para_cadeia(valor), logico_para_inteiro(valor), logico_para_caracter(valor), real_para_cadeia(valor), real_para_inteiro(valor)Devolvem cadeia, inteiro, lógico ou caracter conforme o tipo de origem e a função usada; consulte a referência da biblioteca para cada conversão.
Utilobter_diretorio_usuario(), numero_elementos(vetor), numero_linhas(matriz), numero_colunas(matriz)A primeira devolve uma cadeia; as demais, inteiros com as dimensões. A matriz precisa ter ao menos uma linha para consultar colunas.
Utilsorteia(minimo, maximo), aguarde(intervalo), tempo_decorrido()sorteia devolve um inteiro no intervalo inclusivo se minimo for menor que maximo; aguarde não devolve valor e pausa em milissegundos; tempo_decorrido devolve um inteiro em milissegundos desde o primeiro uso da biblioteca.
inclua biblioteca Texto --> txt

funcao inicio() {
    cadeia palavra = "logica"
    escreva(txt.numero_caracteres(palavra), "\n")
    escreva(txt.caixa_alta(palavra), "\n")
    escreva(txt.extrair_subtexto(palavra, 0, 3), "\n")
}

Saída: 6, LOGICA e log, cada valor em uma linha.

inclua biblioteca Tipos --> tipos

funcao inicio() {
    escreva(tipos.cadeia_e_inteiro("101", 2), "\n")
    escreva(tipos.cadeia_para_inteiro("101", 2), "\n")
}

Saída: verdadeiro e 5. A primeira chamada valida a escrita binária; a segunda converte o mesmo valor para inteiro.

12 · Exemplo

Programa completo

Este exemplo junta declaração, entrada e saída, condição, função e expressão lógica:

programa {
    funcao logico eh_par(inteiro numero) {
        retorne numero % 2 == 0
    }

    funcao inicio() {
        inteiro valor
        escreva("Digite um número inteiro: ")
        leia(valor)

        se (eh_par(valor)) {
            escreva("O número é par\n")
        } senao {
            escreva("O número é ímpar\n")
        }
    }
}

13 · Dicas de leitura

Erros frequentes e como evitá-los

  • Trocar atribuição por igualdade: use = para atribuir e == para comparar valores.
  • Esquecer as separações do laço para: os campos de inicialização, condição e atualização são separados por ponto e vírgula.
  • Usar índices fora do vetor: os índices começam em zero; um vetor de tamanho 3 tem posições de 0 a 2.
  • Esperar um comando de outra biblioteca: inclua o módulo com inclua biblioteca Nome e use o mesmo nome ou apelido antes do ponto.
  • Confundir o tamanho com o último índice: uma cadeia de seis caracteres tem último índice 5; em extrair_subtexto, o índice final marca o limite e não entra no resultado.
  • Usar pare em qualquer lugar: esse comando encerra o laço ou caso de seleção atual; fora desses contextos, não substitui retorne.
Ao investigar um erro: confira primeiro os tipos declarados, os delimitadores do bloco, o nome da biblioteca e os limites dos índices. Em expressões com operadores diferentes, use parênteses para deixar a ordem explícita.

14 · Leitura adicional

Referências da pseudolinguagem Portugol Studio 2.0

Portugol Studio 2.0 tem origem no Portugol Studio. Esse projeto aparece nesta seção somente como fonte das referências usadas para documentar a pseudolinguagem.

As referências são mantidas por projetos distintos. Consulte-as para conferir detalhes de comportamento e compatibilidade antes de usar uma função específica.

Volte ao Manual do Potoo IDE

Consulte outras seções do Manual.

Abrir o Manual