Referencia de pseudolenguaje · Portugol Studio 2.0

Portugol Studio 2.0

Esta página documenta el pseudolenguaje Portugol Studio 2.0 a partir de la gramática, el léxico y las referencias públicas que lo describen.

Pseudolenguaje Portugol Studio 2.0

01 · Alcance

Sobre Portugol Studio 2.0

Portugol es un nombre que se usa para distintos pseudolenguajes. Esta documentación describe específicamente Portugol Studio 2.0; sus reglas no definen un estándar universal para todos los pseudolenguajes llamados Portugol.

Las reglas presentadas corresponden al pseudolenguaje Portugol Studio 2.0 y a las fuentes enumeradas al final de esta referencia.

02 · Organización

Estructura de un programa

Un archivo comienza con programa y un bloque delimitado por llaves. Las inclusiones de bibliotecas aparecen al principio del bloque; después pueden venir declaraciones globales y funciones. La forma habitual de punto de entrada es una función llamada inicio.

programa {
    inclua biblioteca Matematica --> mat

    const inteiro tentativas = 3
    inteiro acertos = 0

    funcao inicio() {
        escreva("Bienvenido al ejercicio")
    }
}

Los bloques de funciones, condiciones y bucles usan { y }. El punto y coma se usa en los tres campos de la cabecera de para; los ejemplos habituales escriben un comando por línea y no terminan cada comando con punto y coma.

03 · Escritura

Nombres, comentarios y literales

  • Los identificadores empiezan con una letra ASCII o guion bajo; después pueden incluir letras ASCII, dígitos y guiones bajos. La gramática publicada no admite letras acentuadas en identificadores.
  • Las palabras clave se escriben sin acentos y la gramática las reconoce en minúsculas, por ejemplo programa, funcao y enquanto.
  • Los comentarios de línea empiezan con //; los comentarios de bloque se delimitan con /* y */.
  • Los números reales usan punto como separador decimal. Los textos usan comillas dobles y los caracteres individuales, comillas simples; el léxico también define escapes y literales hexadecimales.
  • Los valores lógicos son verdadeiro y falso.
// comentario de línea
/* comentario
   de bloque */
cadeia mensagem = "Hola"
caracter inicial = 'A'
real media = 7.5
logico aprovado = verdadeiro

04 · Datos

Tipos, variables y constantes

TipoUso
inteiroNúmeros enteros.
realNúmeros con parte fraccionaria.
logicoValores verdadeiro o falso.
caracterUn carácter.
cadeiaSecuencia de caracteres.
vazioIndica una función sin valor de retorno.

Declara el tipo antes del nombre. Una declaración puede agrupar nombres del mismo tipo e incluir una expresión inicial. La palabra clave const marca declaraciones constantes. Los valores y tipos deben ser compatibles.

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

Una variable declarada dentro de una función o bloque tiene alcance local; las declaraciones del cuerpo principal, fuera de las funciones, son globales. La lista de declaraciones también permite inicializadores de vectores y matrices, que se explican en Vectores y matrices.

05 · Expresiones

Operadores y precedencia

GrupoOperadoresSignificado
Aritméticos+ - * / %Suma, resta, multiplicación, división y resto.
Unarios+ - nao ~ ++ --Signo, negación lógica, negación bit a bit, incremento y decremento. ++ y -- pueden aparecer antes o después del identificador.
Asignación= += -= *= /=Asignación simple y compuesta. = no es el operador de igualdad.
Comparación== != > < <= >=Igualdad, diferencia y comparaciones relacionales.
Lógicose ouConjunción y disyunción lógica.
Bit a bit^ << >> & |XOR, desplazamientos a izquierda y derecha, AND y OR bit a bit.
Agrupación( )Controla explícitamente el orden de evaluación.

La gramática oficial define los operadores mediante alternativas recursivas, pero no publica una tabla de precedencia clara para todas las combinaciones. Usa paréntesis para hacer explícito el orden, sobre todo al mezclar comparaciones, lógica y operaciones bit a bit.

Recomendación: la propia regla gramatical señala que la igualdad tiene prioridad baja, así que no dependas de un orden supuesto en expresiones compuestas.

06 · Interacción

Entrada y salida

escreva muestra una o más expresiones. Para saltar de línea, incluye la secuencia de escape \n en una cadena que pases a la función. leia recibe datos para variables. La función predefinida limpa() limpia el área de salida.

programa {
    funcao inicio() {
        cadeia nome
        escreva("¿Cuál es tu nombre? ")
        leia(nome)
        escreva("Hola, ", nome, "!\n")
    }
}

La forma de mostrar y leer datos depende de las funciones y bibliotecas disponibles en el entorno de ejecución descrito por las referencias.

07 · Decisiones

Condiciones y selección

se ejecuta una rama cuando la expresión lógica es verdadera; senao define la rama alternativa. Los bloques pueden contener varios comandos. La selección múltiple usa escolha, etiquetas caso y la alternativa contrario.

se (nota >= 7) {
    escreva("Aprobado\n")
} senao {
    escreva("Sigue practicando\n")
}

escolha (opcao) {
    caso 1:
        escreva("Iniciar\n")
        pare
    caso contrario:
        escreva("Opción desconocida\n")
}

pare termina el caso actual de escolha o interrumpe un bucle. Usa una expresión de tipo lógico como condición.

08 · Bucles

Repetición

Portugol Studio 2.0 define bucles condicionales y un bucle con inicialización, condición 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 evalúa antes de cada repetición; faca ... enquanto evalúa después del bloque. En para, los campos se separan por punto y coma y pueden inicializar una variable, comprobar una condición y actualizar el contador. pare termina el bucle actual.

09 · Colecciones

Vectores y matrices

Los vectores usan un índice entre corchetes; las matrices usan dos índices. Cada dimensión declarada debe ser una expresión constante de tipo entero y valor positivo; si hay un inicializador, el tamaño puede inferirse. La gramática también permite inicializar matrices por filas.

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")
    }
}

Los índices son expresiones enteras. Los parámetros de función pueden declarar dimensiones sin fijar sus tamaños, por ejemplo inteiro valores[] o inteiro tabela[][].

10 · Reutilización

Funciones y parámetros

Una función puede declarar un tipo de retorno antes del nombre; omitir el tipo equivale a usarla sin valor de retorno, que también se puede escribir con vazio. Los parámetros tienen tipo y nombre, pueden separarse por comas y pueden recibir vectores o matrices. Un & antes del nombre indica paso por referencia.

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 termina la función y puede devolver una expresión. La referencia oficial describe llamadas dentro de expresiones, funciones con retorno y funciones sin retorno.

11 · Recursos estándar

Bibliotecas de Portugol Studio 2.0

Una biblioteca se incluye con inclua biblioteca Nombre y puede recibir un alias después de -->. Las llamadas usan el nombre o el alias seguido de un punto. La tabla resume los módulos del pseudolenguaje documentados en las fuentes de esta referencia; la documentación de cada clase enumera firmas, parámetros y constantes.

BibliotecaRecursos de referencia
ArquivosAbrir, cerrar, leer y escribir archivos; comprobar el fin, seleccionar archivos, listar archivos y carpetas, crear carpetas, reemplazar texto y comprobar o borrar archivos.
CalendarioDía, mes, año, hora, minuto, segundo, milisegundo y nombres de los días de la semana.
GraficosVentanas gráficas, dibujos geométricos, imágenes, animaciones GIF, texto, fuentes, colores, gradientes, dimensiones, pantalla completa y transformaciones visuales.
InternetTiempo límite, lectura de contenido de una dirección, descarga de imágenes y comprobación de disponibilidad.
MatematicaPI, potencia, raiz, arredondar, logaritmo, seno, coseno, tangente, valor absoluto, número mayor y menor.
MouseConsultar botones y posición del puntero; ocultar o mostrar el cursor.
ObjetosCrear objetos desde JSON/XML o propiedades, consultar y asignar propiedades tipadas, trabajar con vectores de propiedades y liberar o exportar objetos.
ServicosWebConexiones y solicitudes web, encabezados y parámetros; operaciones para obtener, publicar, actualizar y eliminar datos.
SonsCargar, reproducir, pausar, detener y liberar sonidos; consultar posición, duración y volumen.
TecladoConsultar y leer teclas y caracteres, con constantes para teclas comunes, letras, números y funciones.
Textonumero_caracteres, caixa_alta, caixa_baixa, substituir, preencher_a_esquerda, obter_caracter, posicao_texto y extrair_subtexto.
TiposComprobar si los textos representan números, valores lógicos o caracteres, y convertir entre cadena, entero, real, lógico y caracter.
UtilDirectorio del usuario, tamaños de vectores y matrices, sorteo, espera y tiempo transcurrido.
inclua biblioteca Matematica --> mat

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

El conjunto de bibliotecas pertenece al entorno de referencia de Portugol Studio 2.0; no todas las bibliotecas son apropiadas para cualquier intérprete o contexto de ejecución.

Firmas y resultados

Las llamadas siguientes usan el alias mat del ejemplo anterior. Las funciones devuelven valores que pueden asignarse a variables o combinarse en expresiones.

BibliotecaFirma o llamadaComportamiento
Matematicapotencia(base, expoente)Devuelve un número real con la base elevada al exponente. Ejemplo: potencia(2, 3) da 8.
Matematicaraiz(radicando, indice)Devuelve un número real con la raíz indicada por el índice. raiz(27, 3) da 3.
Matematicaarredondar(numero, casas), logaritmo(numero, base)Devuelven números reales: redondeo a los decimales indicados y logaritmo en la base especificada.
Matematicaseno(angulo), cosseno(angulo), tangente(angulo)Devuelven números reales con el resultado trigonométrico; los ángulos se expresan en radianes.
Matematicavalor_absoluto(numero), maior_numero(a, b), menor_numero(a, b), PIDevuelven números reales: valor absoluto, mayor o menor de dos números y la constante π.
Textonumero_caracteres(cadeia), caixa_alta(cad), caixa_baixa(cad)La primera devuelve un entero; las otras devuelven la cadena en mayúsculas o minúsculas.
Textosubstituir(cad, pesquisa, substituto)Devuelve una cadena con todas las apariciones del fragmento buscado reemplazadas.
Textopreencher_a_esquerda(car, tamanho, cad)Devuelve una cadena rellenada por la izquierda hasta el tamaño indicado; las cadenas que ya tienen ese tamaño no cambian.
Textoobter_caracter(cad, indice), posicao_texto(texto, cadeia, posicao_inicial)La primera devuelve un carácter; la segunda, un entero con la posición. Los índices empiezan en cero; la búsqueda devuelve -1 si no encuentra el texto.
Textoextrair_subtexto(cadeia, posicao_inicial, posicao_final)Devuelve una cadena desde el índice inicial hasta el final, sin incluirlo. Ejemplo: extrair_subtexto("salgado", 0, 3) da "sal".
Tiposcadeia_e_inteiro(cad, base), cadeia_e_real(cad), cadeia_e_logico(cad), cadeia_e_caracter(cad)Devuelven valores lógicos para indicar si la cadena representa el tipo indicado. Para enteros, las bases documentadas son 2, 10 y 16.
Tiposinteiro_e_caracter(valor), caracter_e_inteiro(car), caracter_e_logico(car)Devuelven valores lógicos para comprobar si los valores se pueden convertir a los tipos indicados.
Tiposcadeia_para_inteiro(valor, base), cadeia_para_real(valor), cadeia_para_logico(valor), cadeia_para_caracter(valor)Devuelven un entero, real, lógico o carácter según la función. La conversión lógica reconoce verdadeiro o falso; para convertir a carácter se requiere exactamente un carácter.
Tiposinteiro_para_cadeia(valor, base), inteiro_para_caracter(valor), inteiro_para_logico(valor), inteiro_para_real(valor)Devuelven una cadena, carácter, valor lógico o real; para cadenas, usa la base 2, 10 o 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)Devuelven cadena, entero, valor lógico o carácter según el tipo de origen y la función; consulta la referencia de la biblioteca para cada conversión.
Utilobter_diretorio_usuario(), numero_elementos(vetor), numero_linhas(matriz), numero_colunas(matriz)La primera devuelve una cadena; las demás, enteros con las dimensiones. La matriz debe tener al menos una fila para consultar las columnas.
Utilsorteia(minimo, maximo), aguarde(intervalo), tempo_decorrido()sorteia devuelve un entero dentro del intervalo inclusivo si minimo es menor que maximo; aguarde no devuelve valor y pausa en milisegundos; tempo_decorrido devuelve un entero en milisegundos desde el primer uso de la 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")
}

Salida: 6, LOGICA y log, cada valor en una línea.

inclua biblioteca Tipos --> tipos

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

Salida: verdadeiro y 5. La primera llamada valida la escritura binaria; la segunda convierte el mismo valor a entero.

12 · Ejemplo

Programa completo

Este ejemplo combina declaración, entrada y salida, condición, función y expresión lógica:

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

    funcao inicio() {
        inteiro valor
        escreva("Ingresa un número entero: ")
        leia(valor)

        se (eh_par(valor)) {
            escreva("El número es par\n")
        } senao {
            escreva("El número es impar\n")
        }
    }
}

13 · Consejos de lectura

Errores frecuentes y cómo evitarlos

  • Confundir asignación e igualdad: usa = para asignar y == para comparar valores.
  • Olvidar los separadores del bucle para: los campos de inicialización, condición y actualización se separan con punto y coma.
  • Usar índices fuera del vector: los índices empiezan en cero; un vector de tamaño 3 ocupa las posiciones 0 a 2.
  • Esperar una operación de otra biblioteca: incluye el módulo con inclua biblioteca Nombre y usa el mismo nombre o alias antes del punto.
  • Confundir el tamaño con el último índice: una cadena de seis caracteres tiene como último índice el 5; en extrair_subtexto, el índice final marca el límite y no se incluye en el resultado.
  • Usar pare en cualquier lugar: termina el bucle o caso de selección actual; fuera de esos contextos no sustituye a retorne.
Al investigar un error: comprueba primero los tipos declarados, los delimitadores del bloque, el nombre de la biblioteca y los límites de los índices. En expresiones con operadores distintos, usa paréntesis para explicitar el orden.

14 · Lectura adicional

Referencias del pseudolenguaje Portugol Studio 2.0

Portugol Studio 2.0 tiene su origen en Portugol Studio. Ese proyecto aparece en esta sección únicamente como fuente de las referencias utilizadas para documentar el pseudolenguaje.

Las referencias pertenecen a proyectos distintos. Consúltalas para verificar detalles de comportamiento y compatibilidad antes de usar una función específica.

Vuelve al Manual de Potoo IDE

Consulta otras secciones del Manual.

Abrir el Manual