Referência · G-Portugol

G-Portugol

Esta referência organiza as regras da pseudolinguagem G-Portugol a partir do manual oficial: estrutura de algoritmos, variáveis, matrizes, expressões, controle de fluxo, funções e comandos de entrada e saída. Os exemplos preservam as palavras reservadas em português.

Referência G-PortugolSintaxe Palavras reservadas em português

01 · Visão geral

Sobre G-Portugol

G-Portugol organiza algoritmos em português com declarações explícitas, comandos imperativos e blocos delimitados. Sua sintaxe reúne formas comuns em materiais de lógica, como algoritmo, variáveis, início, se e para.

Esta página documenta a pseudolinguagem conforme o manual mantido pelo projeto G-Portugol. Ela separa as regras de escrita dos comandos e opções da ferramenta GPT, que são descritos em uma seção própria. A referência oficial também apresenta como objetivo adaptar o vocabulário a práticas de ensino; o GPT não documenta um mecanismo para configurar essas formas, então esta página registra a sintaxe padrão publicada pelo projeto.

Escopo: a referência descreve a sintaxe documentada pelo projeto. Ela não significa que a execução de G-Portugol já esteja integrada ao Potoo IDE.

02 · Organização

Estrutura do algoritmo

Um arquivo começa com a declaração do algoritmo, pode declarar variáveis globais, contém o bloco principal e termina com as declarações de funções. A declaração de variáveis é opcional; quando usada, fica antes de início e contém ao menos uma declaração. Os exemplos oficiais usam a extensão .gpt.

algoritmo exemplo;

variáveis
    nome : literal;
    idade : inteiro;
fim-variáveis

início
    nome := "Ana";
    idade := 16;
    imprima(nome, " tem ", idade, " anos.");
fim

função dobro(valor:inteiro) : inteiro
    retorne valor * 2;
fim

algoritmo exige um identificador e ponto e vírgula; esse nome identifica o algoritmo no arquivo, mas não altera sua execução. O bloco principal começa em início e termina em fim; as funções são declaradas depois dele. Comandos simples terminam em ponto e vírgula; os blocos encerram com seu delimitador, sem exigir ponto e vírgula depois dele. A indentação não é obrigatória, mas ajuda a visualizar a estrutura. O bloco principal também pode ser encerrado antecipadamente com retorne seguido de um inteiro, que funciona como código de saída.

03 · Escrita

Identificadores, comentários e literais

A pseudolinguagem diferencia maiúsculas de minúsculas. Palavras reservadas precisam manter a grafia e os acentos definidos, como variáveis, início, então, faça e função. Identificadores — nomes de variáveis, algoritmos e funções — começam com uma letra ASCII (A–Z ou a–z) ou sublinhado e podem continuar com letras ASCII, números e sublinhados.

// Comentário de uma linha.
/* Comentário
   de várias linhas. */

algoritmo dados;
variáveis
    nome_completo : literal;
    inicial : caractere;
    codigo : inteiro;
fim-variáveis
início
    nome_completo := "João";
    inicial := 'J';
    codigo := 0x2A;
fim

O conjunto padrão de palavras reservadas é algoritmo, variáveis, fim-variáveis, início, fim, inteiro, real, caractere, literal, lógico, verdadeiro, falso, matriz, inteiros, reais, caracteres, literais, lógicos, se, então, senão, fim-se, enquanto, faça, fim-enquanto, repita, até, para, de, passo, fim-para, função, retorne, ou, e e não.

Inteiros aceitam bases decimal, hexadecimal (0x/0X), octal (0c/0C) e binária (0b/0B). Reais usam ponto decimal, com algarismos antes e depois dele. Caracteres ficam entre aspas simples; '' representa o caractere nulo. Os escapes documentados para caracteres incluem \n, \r e \\. Textos ficam entre aspas duplas, podem usar escapes e ocupam uma linha física do código.

04 · Dados

Tipos e variáveis

O manual oficial documenta cinco tipos primitivos. A declaração informa um ou mais nomes, dois-pontos, o tipo e ponto e vírgula.

TipoExemploUso
inteiro42Números inteiros.
real3.5Números com parte fracionária.
caractere'A'Um caractere.
literal"Olá"Uma sequência de caracteres.
lógicoverdadeiroUm valor lógico, verdadeiro ou falso.
variáveis
    quantidade, tentativas : inteiro;
    preco : real;
    disponivel : lógico;
fim-variáveis

Variáveis declaradas começam com valor zero ou nulo, de acordo com o tipo. A sintaxe não declara constantes. Tipos compostos definidos pelo usuário, como registros, não fazem parte dos tipos documentados.

05 · Coleções

Vetores e matrizes

Conjuntos homogêneos usam a palavra matriz, seguida por uma dimensão entre colchetes para cada eixo, de e o nome plural do tipo primitivo. Cada dimensão é um literal inteiro positivo; uma única dimensão forma um vetor.

variáveis
    notas : matriz[5] de reais;
    tabuleiro : matriz[3][3] de caracteres;
fim-variáveis

início
    notas[0] := 8.5;
    tabuleiro[1][2] := 'X';
    imprima(notas[0]);
fim

Os índices começam em zero. Assim, o vetor valores declarado com tamanho 5 tem posições de 0 a 4; tentar acessar valores[5] ultrapassa seus limites. Cada elemento recebe a inicialização padrão do tipo. Matrizes passadas a funções são copiadas por valor, conforme a referência.

06 · Expressões

Atribuição e operadores

A atribuição usa :=. À esquerda pode aparecer uma variável primitiva ou uma posição indexada de matriz; à direita, uma expressão compatível com o tipo do destino. A matriz inteira não pode ser atribuída nem passada a imprima como um único valor.

OrdemOperadoresOperação
1 · menorou, ||Disjunção lógica.
2e, &&Conjunção lógica.
3|OU bit a bit.
4^OU exclusivo bit a bit.
5&E bit a bit.
6=, <>Igualdade e desigualdade.
7>, >=, <, <=Comparações relacionais.
8+, -Adição e subtração.
9*, /, %Multiplicação, divisão e resto.
10 · maior+, -, ~, não, ()Sinais unários, negação bit a bit, negação lógica e agrupamento.
resultado := (a + b) * 2;
se ativo e tentativas < 3 então
    imprima("Pode continuar.");
fim-se

A tabela segue a ordem documentada, da menor para a maior precedência. Parênteses tornam explícita a ordem desejada.

07 · Interação

Entrada e saída

leia() não recebe argumentos: lê uma linha da entrada padrão, até a quebra de linha, e converte o conteúdo para o tipo primitivo esperado pelo contexto. Pode aparecer sozinha no lado direito de uma atribuição, em uma condição ou em um índice de matriz; a referência não permite combiná-la com outros operandos, como em total := base + leia();. imprima() recebe pelo menos um valor primitivo, converte os valores para texto, concatena-os na ordem informada sem inserir separadores e acrescenta uma quebra de linha ao final.

algoritmo saudacao;
variáveis
    nome : literal;
    idade : inteiro;
fim-variáveis
início
    imprima("Qual é o seu nome?");
    nome := leia();
    imprima("Qual é a sua idade?");
    idade := leia();
    imprima("Olá, ", nome, "! Você tem ", idade, " anos.");
fim

Não há concatenação implícita entre textos em linhas físicas distintas. Para imprimir valores de tipos diferentes juntos, passe-os como argumentos separados para imprima.

08 · Decisões

Condicionais

se avalia uma expressão e inicia um bloco; senão é opcional. Todo bloco condicional termina com fim-se. Parênteses ao redor da condição são opcionais. O manual documenta esta estrutura como a forma de seleção da pseudolinguagem; não apresenta um comando separado de seleção múltipla.

se nota >= 7 então
    imprima("Aprovado");
senão
    imprima("Precisa recuperar");
fim-se

Qualquer expressão pode ser avaliada como condição: zero, texto vazio e o caractere nulo são falsos; valores numéricos diferentes de zero e textos não vazios são verdadeiros. Valores lógicos também podem ser escritos como verdadeiro e falso.

09 · Repetição

Laços

G-Portugol documenta três estruturas de repetição: enquanto, repita e para. Cada estrutura encerra o bloco com uma palavra reservada própria.

enquanto quantidade > 0 faça
    quantidade := quantidade - 1;
fim-enquanto

repita
    quantidade := quantidade + 1;
até quantidade = 3;

para i de 1 até 5 faça
    imprima(i);
fim-para

enquanto testa a condição antes de cada passagem; seu corpo pode não executar. repita testa depois do corpo e executa ao menos uma vez. Os limites de para são inclusivos, o passo padrão é 1 e um passo negativo percorre a sequência em ordem decrescente.

para i de 10 até 0 passo -2 faça
    imprima(i);
fim-para

Não há comandos break ou continue documentados; o controle dos laços deve ser expresso pela condição e pelas variáveis envolvidas.

10 · Reuso

Funções e retorno

Uma função é declarada depois do bloco principal. Parâmetros seguem a forma nome:tipo; o tipo de retorno é opcional. Declarações locais, quando necessárias, vêm antes do bloco início.

função fatorial(valor:inteiro) : inteiro
    resultado : inteiro;
    contador : inteiro;
início
    resultado := 1;
    para contador de 1 até valor faça
        resultado := resultado * contador;
    fim-para
    retorne resultado;
fim

retorne devolve uma expressão compatível com o tipo declarado ou, em função sem tipo de retorno, encerra a função sem valor. Funções podem chamar a si próprias. Parâmetros e matrizes são passados por valor; não há funções aninhadas nem parâmetros variáveis. Os valores de retorno são primitivos.

11 · Exemplo integrado

Contar e classificar números

Este programa lê um limite e percorre os inteiros de um até esse valor, indicando a paridade de cada um:

algoritmo contagem;
variáveis
    limite, numero : inteiro;
fim-variáveis

início
    imprima("Digite o limite:");
    limite := leia();

    para numero de 1 até limite faça
        se numero % 2 = 0 então
            imprima(numero, " é par.");
        senão
            imprima(numero, " é ímpar.");
        fim-se
    fim-para
fim

O exemplo combina declaração, leitura, atribuição, resto, comparação, decisão e laço inclusivo.

12 · Regras importantes

Comportamento e limites

  • Palavras reservadas e identificadores diferenciam maiúsculas de minúsculas; acentos fazem parte das palavras reservadas, mas não são aceitos em identificadores.
  • Os tipos primitivos podem formar vetores e matrizes homogêneos de uma ou mais dimensões. Matrizes são inicializadas por elemento e passadas a funções por valor; não podem ser atribuídas ou retornadas como um conjunto.
  • Os tipos inteiro, real, lógico e caractere são compatíveis em operações numéricas; literal não participa de operações aritméticas. Não há conversão explícita de tipos. Operandos compatíveis são promovidos quando isso não causa perda; uma conversão feita na atribuição pode truncar um real destinado a inteiro. Por exemplo, 5 / 2 é uma divisão inteira, enquanto 5.0 / 2 produz resultado real.
  • Comparações de igualdade entre valores reais podem variar por causa da representação numérica, especialmente entre execução interpretada, compilada e tradução.
  • Literais de texto são comparados respeitando maiúsculas e minúsculas. A comparação de ordem entre literais considera a quantidade de caracteres, conforme a referência oficial.
  • Índices de matrizes começam em zero. O GPT verifica limites na execução interpretada; o manual não descreve essa verificação para os outros modos.
  • O GPT fornece duas funções internas para entrada e saída: leia() e imprima(...). A referência não documenta uma biblioteca padrão incluída por uma declaração específica.

13 · Ferramenta de referência

O programa GPT

O manual oficial descreve o GPT como a ferramenta do projeto para analisar e executar arquivos G-Portugol. As opções abaixo pertencem a esse programa e não descrevem comandos disponíveis na interface do Potoo IDE.

OpçãoFunção descrita
-iInterpreta e executa o algoritmo.
-o arquivoCompila e grava um executável.
-t arquivoGera código-fonte em C.
-s arquivoGera código Assembly.
-dAcrescenta dicas ao relatório de erros.
-hMostra a ajuda do programa.

A forma geral é gpt [opções] arquivos.... Se forem informados vários arquivos, o primeiro contém a declaração do algoritmo e o bloco principal; os demais fornecem código complementar e não devem repetir a declaração do algoritmo, o bloco global de variáveis ou o bloco principal. A variável de ambiente GPT_INCLUDE também pode indicar arquivos adicionais: seus caminhos são separados por : em sistemas Unix e por ; no Windows. O manual espera resultados equivalentes entre interpretação, compilação e tradução, com a ressalva de que a verificação de limites das matrizes ocorre no modo interpretado. A geração de executáveis por -o é limitada a máquinas x86 de 32 bits; para outras arquiteturas, o manual descreve a geração de C com -t e sua compilação com a ferramenta do sistema.

14 · Leitura complementar

Referências

15 · Comparação

Diferenças para Portugol Studio 2.0

G-Portugol e Portugol Studio 2.0 são pseudolinguagens distintas. Elas compartilham o objetivo de expressar algoritmos em português, mas seus programas não são intercambiáveis: estrutura, palavras reservadas, tipos, operadores e regras de execução diferem.

AspectoG-PortugolPortugol Studio 2.0
Estruturaalgoritmo nome;, bloco principal início ... fim e funções depois dele.programa { ... } com a função de entrada funcao inicio().
EscritaPalavras reservadas com acentos, como variáveis, início e função.Palavras-chave sem acentos, como funcao, senao e nao.
Declarações e tiposnome : inteiro; tipos inteiro, real, caractere, literal e lógico. Não documenta const.inteiro nome; usa caracter, cadeia, logico e vazio, além de declarações com const.
Atribuição e comparação:= atribui; = e <> comparam.= atribui; == e != comparam. Também documenta atribuições compostas e ++/--.
Vetores e matrizesmatriz[linhas][colunas] de inteiros; aceita uma ou mais dimensões e passa conjuntos por valor.inteiro tabela[linhas][colunas]; a referência documenta vetores, matrizes bidimensionais, inicializadores e parâmetros por referência com &.
Controle de fluxoUsa fim-se, fim-enquanto, repita ... até e para ... de ... até ... passo; não documenta seleção múltipla nem interrupção de laço.Usa blocos entre chaves, escolha/caso, faca ... enquanto, laço para com três campos e pare.
Funçõesfunção dobro(valor:inteiro): inteiro; parâmetros por valor, retorno apenas primitivo e sem funções aninhadas.funcao inteiro dobro(inteiro valor); pode usar & para passar parâmetro por referência e vazio para indicar ausência de retorno.
Entrada e saídaleia() retorna um valor convertido pelo contexto; imprima(...) concatena e acrescenta quebra de linha.leia(variavel) preenche uma variável; escreva(...) não acrescenta quebra de linha automaticamente.
BibliotecasDocumenta leia e imprima como funções internas; não descreve uma instrução de código para incluir bibliotecas.Inclui módulos com inclua biblioteca e oferece bibliotecas padrão como Matematica, Texto e Tipos.
ExpressõesQualquer expressão pode ser usada como condição; zero e valores vazios são falsos. A precedência é apresentada explicitamente.As condições são documentadas com valores lógicos; a gramática não apresenta uma tabela completa de precedência, então parênteses deixam a ordem explícita.

O mesmo exercício, em duas sintaxes

O exemplo verifica se um número é par. O algoritmo é o mesmo; delimitadores, operadores e entrada e saída seguem as regras de cada pseudolinguagem.

G-Portugol

algoritmo paridade;
variáveis
    numero : inteiro;
fim-variáveis
início
    imprima("Digite um inteiro:");
    numero := leia();
    se numero % 2 = 0 então
        imprima("Par");
    senão
        imprima("Ímpar");
    fim-se
fim

Portugol Studio 2.0

programa {
    funcao inicio() {
        inteiro numero
        escreva("Digite um inteiro: ")
        leia(numero)
        se (numero % 2 == 0) {
            escreva("Par\n")
        } senao {
            escreva("Ímpar\n")
        }
    }
}

Para consultar cada pseudolinguagem em detalhe, veja a referência de Portugol Studio 2.0 e as regras oficiais de G-Portugol.

Voltar ao Manual do Potoo IDE

Consulte as outras referências e as informações do projeto.

Abrir o Manual