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.
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.
| Tipo | Exemplo | Uso |
|---|---|---|
inteiro | 42 | Números inteiros. |
real | 3.5 | Números com parte fracionária. |
caractere | 'A' | Um caractere. |
literal | "Olá" | Uma sequência de caracteres. |
lógico | verdadeiro | Um 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.
| Ordem | Operadores | Operação |
|---|---|---|
| 1 · menor | ou, || | Disjunção lógica. |
| 2 | e, && | 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ógicoecaracteresão compatíveis em operações numéricas;literalnã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, enquanto5.0 / 2produz 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()eimprima(...). 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ção | Função descrita |
|---|---|
-i | Interpreta e executa o algoritmo. |
-o arquivo | Compila e grava um executável. |
-t arquivo | Gera código-fonte em C. |
-s arquivo | Gera código Assembly. |
-d | Acrescenta dicas ao relatório de erros. |
-h | Mostra 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
- Manual oficial do G-Portugol, com capítulos de características, programação, sintaxe, ferramenta GPT e gramática.
- Capítulo de programação, com exemplos de variáveis, matrizes, controle de fluxo, funções e entrada e saída.
- Capítulo de implementação, que explica as decisões de estrutura, expressões, atribuições, funções e entrada e saída.
- Manual do programa GPT, com as opções de execução, compilação e tradução.
- Gramática oficial, com regras léxicas e produções sintáticas.
- Repositório oficial do projeto e site oficial.
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.
| Aspecto | G-Portugol | Portugol Studio 2.0 |
|---|---|---|
| Estrutura | algoritmo nome;, bloco principal início ... fim e funções depois dele. | programa { ... } com a função de entrada funcao inicio(). |
| Escrita | Palavras reservadas com acentos, como variáveis, início e função. | Palavras-chave sem acentos, como funcao, senao e nao. |
| Declarações e tipos | nome : 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 matrizes | matriz[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 fluxo | Usa 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ções | funçã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ída | leia() 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. |
| Bibliotecas | Documenta 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ões | Qualquer 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.