VisionScript

Lenguaje de programación sencillo e inclusivo. Especial para personas con discapacidad visual.

Versiones

Antlr4

ANTLR Parser Generator Version 4.7.2

Java

Javac 1.8.0_144

Python

Python 3.7.2

PIP

Pip version 19.0.2

PIP Packages

Package Version
antlr4-python3-runtime 4.7.2
beautifulsoup4 4.7.1
bs4 0.0.1
certifi 2019.3.9
chardet 3.0.4
Click 7.0
gTTS 2.0.3
gTTS-token 1.1.3
idna 2.8
numpy 1.16.2
Pillow 6.0.0
pip 19.0.2
pygame 1.9.6
requests 2.21.0
setuptools 40.6.2
six 1.12.0
soupsieve 1.9.1
urllib3 1.24.3

Ejecutar

Pasos:

  1. antlr4 -Dlanguage=Python3 VisionScript.g4
  2. python VisionScriptRunner.py VisionScriptCode.vs

Manual de Usuario

Tipos de Variables

VisionScript tiene los siguientes tipos:

Declaración de Variables

Para declarar una variable es importante recordad que debe iniciar con una letra seguido de cualquier cantidad de letras, números ó _

Ejemplos de Variables

number Numero1 = 20
number numero_2 = 3.1416

text Texto_1 = "Cualquier Mensaje"
text texto_a = ""

bool Booleano_uno = false
bool booleanoDos = true

container contenedor_con_datos = [0,1,2,3,"A","B",false,true]
container ContenedorVacio = []

Operaciones

VisionScript posee los operadores básicos para realizar operaciones matemáticas: +, -, *, / y los operadores lógicos como <, >, <=, >=, equal, not_equal

En VisionScript es posible sumar una variable o un dato de tipo text con una variable o dato de tipo number, text o bool. Produciendo un nuevo texto con la concatenación de los demás elementos. Esto resulta útil a la hora de imprimir o escuchar un resultado.

Ejemplo:
print("Vision" + "Script")
print("" + 10 + 10)
print("" + (10 10))
Output:
VisionScript
1010
20

VisionScript también permite concatenar variables o elementos de tipo container, para ello se utiliza el operador de +, generando un nuevo container con la concatenación ambos.

Ejemplo:
print([1,2,3] + [4,5,6])
Output:
[1,2,3,4,5,6]

Otro aspecto importan en VisionScript es la multiplicación de una variable o un dato de tipo text por un número entero. Si el número es positivo el resultado será que ese texto se multiplique una cantidad de veces igual al número, y si el número es negativo se genera un texto vacío "".

Ejemplo:
print("A" * 3)
print("A" * -3)
Output:
AAA

Finalmente en VisionScript es posible multiplicar una variable de tipo container por un número entero. Si el número es positivo el resultado será que el contenedor almacenado en esa variable se multiplica una cantidad de veces igual al número, y si el número es negativo se genera un contenedor vacío [].

Ejemplo:
print([1] * 3)
Output:
Error! El contenedor debe estar almacenado en una variable.
Ejemplo:
container arr = [1]
print(arr * 3)
print(arr * -3)
Output:
[1, 1, 1]
[]

Input/Output

VisionScript cuenta con funciones especiales para leer valores desde la terminal y desplegar valores desde la terminal.Además de esto VisionScript cuenta con funciones especiales para imprimir resultados en formato braille e incluso convertir valores a audio y escuchar dicho audio.

Read

Está función permite guardar el valor leido desde terminal a una variable previamente definida.

Ejemplo:
number a = 0

read(a)

print(a + 1)
Input:
10
Output:
11

Print

Está función permite desplegar el valor dado dentro de los paréntesis en consola utilizando el formato del alfabeto latino.

Ejemplo:
print("Hola Mundo!")
Output:
Hola Mundo!

Braille

Está función permite desplegar el valor dado dentro de los paréntesis en consola utilizando el formato del alfabeto braille.

Ejemplo:
braille("Hola Mundo!")
Output:
⠓⠕⠇⠁ ⠍⠥⠝⠙⠕⠮

Hear

Está función permite escuchar el valor dado dentro de los paréntesis.

Ejemplo:
hear("Hola Mundo!")
Output:
Sonido por los altavoces: Hola Mundo!

Ciclos y Condicionales

If Else

VisionScript posee el típico if else, sin embargo a diferencia de otros lenguajes VisionScript no usa {} para definir lo que está dentro del rango de cada condición, para definir esto se utilizan las palabras begin y end, otro punto importante a destacar es todos los if’s deben de ir acompañados de un else, esto con el objetivo de que las personas con discapacidad visual no tengan problemas al momento de escuchar o leer condiciones muy largas o anidadas.

Ejemplo:
number a = 10
number b = 12

if a > b
begin
  print(a)
else
  print(b)
end
Output:
12

Repeat Until

Otro aspecto muy importante es a la hora de definir un ciclo, a diferencia de otros lenguajes VisionScript no tiene un while, este es substituido por un repeat until el cual funciona de la manera opuesta a un while. En este caso un repeat until va a iterar hasta que la expresión proporcionada se vuela falsa.

Ejemplo:
number i = 0
repeat until i > 10
begin
  print(i)
  i = i + 1
end
Output:
0
1
2
3
4
5
6
7
8
9
10

Funciones

En VisionScript es posible definir funciones y hacer uso de ellas por medio de llamadas. Al igual que otros lenguajes existen diferentes tipos de funciones las que tienen un valor de retorno y las que no. Las funciones pueden tener distintos tipos de parámetros.

Tipos de Funciones:

Para llamar a una función solo se necesita poner su nombre seguido de paréntesis con los valores de los parámetros.

Es posible declarar variables dentro de una función, pero hay que tener en cuenta de que estas solo podrán ser usadas dentro de la función.

Ejemplo:
number function add(number x, number y)
begin
  return(x + y)
end

number a = add(1,2)

print(a)
Output:
3

Contenedores

Como ya se mencionó un contenedor es una lista ordenada de elementos de distintos tipos (number,boolótext) que pueden ser intercambiables. Los contenedores aceptan valores repetidos y es posible crear contenedores vacíos asignado el valor de [] a la variable.

Todos los contenedores tienen un índice inicial de 0.

Operaciones con Contenedores

A diferencia de otros lenguajes VisionScript no utiliza los [] para acceder a un índice, en lugar de ello se utilizan funciones especiales.

Contenedor.insert(indice,elemento)

Sirve para insertar un elemento a un contenedor. Esta función no regresa ningún valor. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.insert(indice,elemento)

Ejemplo:
container arr = [0,1,2]

arr.insert(0,3)

print(arr)
Output:
[3, 0, 1, 2]
Ejemplo:
container arr = [0,1,2]

arr.insert(1,3)

print(arr)
Output:
[0, 3, 1, 2]
Ejemplo:
container arr = [0,1,2]

arr.insert(-1,3)

print(arr)
Output:
[0, 1, 3, 2]
Ejemplo:
container arr = [0,1,2]

arr.insert(-100,3)

print(arr)
Output:
[3, 0, 1, 2]
Ejemplo:
container arr = [0,1,2]

arr.insert(100,3)

print(arr)
Output:
[0, 1, 2, 3]
Contenedor.insert_back(elemento)

Sirve para insertar un elemento al final de un contenedor. Esta función no regresa ningún valor. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.insert_back(elemento)

Ejemplo:
container arr = [0,1,2]

arr.insert_back(3)

print(arr)
Output:
[0, 1, 2, 3]
Contenedor.insert_front(elemento)

Sirve para insertar un elemento al principio de un contenedor. Esta función no regresa ningún valor. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.insert_front(elemento)

Ejemplo:
container arr = [0,1,2]

arr.insert_front(3)

print(arr)
Output:
[3, 0, 1, 2]
Contenedor.replace(indice,elemento)

Sirve para reemplazar un elemento a un contenedor. Esta función no regresa ningún valor. Es importante que el índice está dentro del rango del tamaño del contenedor de lo contrario genera un error. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.replace(indice,elemento)

Ejemplo:
container arr = [0,1,2]

arr.replace(0,3)

print(arr)
Output:
[3, 1, 2]
Ejemplo:
container arr = [0,1,2]

arr.replace(1,3)

print(arr)
Output:
[0, 3, 2]
Ejemplo:
container arr = [0,1,2]

arr.replace(-1,3)

print(arr)
Output:
[0, 1, 3]
Ejemplo:
container arr = [0,1,2]

arr.replace(-100,3)

print(arr)
Output:
Error! indice fuera del rango.
Ejemplo:
container arr = [0,1,2]

arr.replace(100,3)

print(arr)
Output:
Error! indice fuera del rango.
Contenedor.get(indice)

Sirve para obtener un elemento de un contenedor. Esta función regresa el valor en el índice dado. Es importante que el índice está dentro del rango del tamaño del contenedor de lo contrario genera un error. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.get(indice)

Ejemplo:
container arr = [0,1,2]

print(arr.get(0))

Output:
0
Ejemplo:
container arr = [0,1,2]

print(arr.get(-1))

Output:
2
Ejemplo:
container arr = [0,1,2]

print(arr.get(-100))

Output:
Error! indice fuera del rango.
Contenedor.get_back()

Sirve para obtener el último elemento de un contenedor. Esta función regresa el valor del último elemento de un contenedor. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.get_back()

Ejemplo:
container arr = [0,1,2]

print(arr.get_back())

Output:
2
Contenedor.get_front()

Sirve para obtener el primer elemento de un contenedor. Esta función regresa el valor del primer elemento de un contenedor. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.get_front()

Ejemplo:
container arr = [0,1,2]

print(arr.get_front())

Output:
0
Contenedor.length()

Sirve para obtener el primer elemento de un contenedor. Esta función regresa el valor del primer elemento de un contenedor. Dicha función tiene la siguiente sintaxis: nombre_del_contenedor.get_front()

Ejemplo:
container arr = [0,1,2]

print(arr.length())

Output:
3

Editor de Textos

Algo que hace único a VisionScript es que tiene su propio editor de texto, el cual es utilizado para escribir código, que posteriormente puede ser ejecutado desde la terminal. Lo que hace único a este editor es que tiene botones especiales para traducir el código de alfabeto latino a braille y viceversa, e incluso reproducir el código en formato de audio, permitiendo que las personas con discapacidad visual tengan mayor facilidad de escribir código en VisionScript.

Editor de Textos