Toy programming language

A

TPL (toy programming language) es un pequeño lenguaje de programación interpretado que estoy haciendo. Es posible que recordeis que hace unas semanas había hecho uno bastante extraño llamado Cell.

TPL está diseñado para ser lo más fácil posible de aprender, y está dirigido a aquellos que quieren iniciarse en el mundo de la programación.

Actualmente es beta y tiene algunos fallos, pero ya soporta bucles, condiciones, declaración de variables, operaciones matemáticas y de comparación y comentarios al estilo C++.

Le faltan de todos modos, cosas importantes, como ser capaz de leer desde el teclado, cargar librerías, arrays...etc, pero todo a su tiempo.

Aquí os dejo un compilado para Windows XP, así como tres ejemplos de código sencillos. (un holamundo, una condición y un bucle)

http://ese.libro.en.googlepages.com/tpl1.0.zip

Por si no apetece, dejo también una screenshot:
http://i7.tinypic.com/21c5qfp.jpg

El código es tan sencillo como:
imprimir "hola"

O como:
si x = 10 entonces
imprimir "hola"
fin

Un saludo. :-)

A

Actualización:

Versión 1.1:
http://ese.libro.en.googlepages.com/tpl1.1.zip

Novedades:

  • Puede leer desde teclado.
  • Corregido un bug en la comparación de cadenas.
  • Añadidos cinco ejemplos comentados.
  • Mejor análisis léxico.
  • Añadidos operadores de % (modulo), ^ (exponente) y ? (aleatorio).

Los ejemplos incluyen:
ejemplo1.tpl: Genera 100 numeros aleatorios.
ejemplo2.tpl: Cuenta hasta 100, formateando la salida.
ejemplo3.tpl: Suma numeros introducidos por el usuario hasta que introduzca un cero.
ejemplo4.tpl: Un "hola mundo" :-)
ejemplo5.tpl: Compara dos cadenas de texto.

Saludos.

A

Actualización:

Tpl 1.2:
http://ese.libro.en.googlepages.com/tpl1.2.zip

Novedades:
tpl -x ejemplo1.tpl ejemplo2.tpl... :
Para ejecutar varios programas seguidos.

tpl -xi ejemplo1.tpl ejemplo2.tpl... :
Para que además sus variables sean persistentes.

Cambiado el método de acceso a la API de Windows.
Ahora, debería funcionar en 2K, Win NT, 95/98...
aunque no puedo comprobarlo, no los tengo instalados.

Arreglados diversos bugs.

Agregada una función, para probar si era posible implementarlas:
definir x = cos(10) // x vale el coseno de diez

Saludos.

C

:O NICE!!

ItNaS

esta wapo

A

Actualización:
tpl 1.4:

Binario:
http://ese.lenguaje.en.googlepages.com/tpl1.4binario.zip

Código fuente:
http://ese.lenguaje.en.googlepages.com/tpl1.4codigo.zip

Completo (binario y código):
http://ese.lenguaje.en.googlepages.com/tpl1.4dist.zip

Esta versión puede ser considerada más o menos estable. Será la base a partir de la cual iré añadiendo funciones al lenguaje a partir de ahora.

Novedades:

La mayor parte de las novedades no son visibles, sino que van en pos de la optimización del código.

Aún así
opción -s: TPL devolverá mensajes con código de color.
opción -d: Iniciara TPL en una linea de comandos interactiva.

  • Las variables ya no será necesario declararlas antes de usarlas. Se entenderán con valor 0.

  • Se pueden sumar, restar y comparar cadenas. Por ejemplo:

definir x = "hola" - "la"
imprimir x

Este programa imprimirá: ho

definir x = "abcdefg" > "abcdeff"
si x == 1 entonces
imprimir "cierto"
sino
imprimir "falso"
fin

Este otro imprimirá "cierto" ya que comparando las letras, la "g" es mayor que la "f". (su valor ascii lo es) Otra novedad es que puede usarse el signo "-" antes de las variables para cambiar su signo:

definir x = 1
imprimir -x + 1

Imprimirá: 0

Sobre el código fuente:

Se trata de Visual Basic 6.0. Puede parecer una estupidez hacer un intérprete en este lenguaje, pero como todos los elementos se declaran como objetos nuevos la implementación es rápida.

La parte negativa es que sólo funciona en Windows.
(En Linux hay que usar Wine)

Cómo lo compilo:

  • Generar: tpl.lib a partir de la gramática tpl.grm usando Gold Parser Builder.
  • Compilar con VB6 y VBAdvance, para poder compilar aplicaciones para consola.
  • Linkar la DLL toy.dll en el ejecutable, usando Bitarts Fusion, así como las VB6 Runtimes.

Un saludo y gracias por los comentarios y por soportar estos posts tan largos. :-)

LOc0

MUUUUUUUUUUUUUY interesante. Eres un crack.

Salu2 ;)

A

Yep !

Otra actualización:
tpl 1.5

Binarios:
http://ese.lenguaje.en.googlepages.com/tpl1.5bin.zip

Código fuente:
http://ese.lenguaje.en.googlepages.com/TPL1.5codigo.zip

Entero (binarios y código):
http://ese.lenguaje.en.googlepages.com/TPL1.5dist.zip

Esta actualización corrige un error, mediante el cual si se hacía por ejemplo: "tpl -xi ejemplo2.tpl ejemplo3.tpl" las variables definidas en ejemplo2.tpl solo eran persistentes si eran impresas en algún momento.

Ahora se comprueba su existencia y se identifican cada vez que se les asigna un valor, esto es: al leer, al definir y al imprimir.

Además, tpl ya no dará problemas si hacemos: "imprimir "hola" + 4" ya que entenderá perfectamente cuando algo es representado como número y cuando como cadena independientemente de cómo lo definamos.

Por último, ahora funcionarán perfectamente dos cosas más:

  • Números con parte decimal. (incluyendo sus comparaciones)
  • Condiciones múltiples.

Un ejemplo de condición múltiple:

// Aquí empieza el programa

definir x = 1
definir w = 0.5
definir y = 3
definir z = 2

/*
Para imprimir "hola", comprobamos que:
x es menor que y
y es mayor que z
w es menor que z
*/

si ( x < y ) == ( y > z ) == ( w < z ) == 1 entonces
imprimir "hola"
fin

// Nota: 1 significa "cierto"

En la próxima actualización añadiré:

  • Funciones matemáticas. (coseno, seno, logaritmos...)
  • Funciones de cadenas. (longitud("hola")...)
  • Funciones de conversion de tipos. ( cadena(x)... )
  • "cuando x <> 0 hacer..."

Mi objetivo con este lenguaje es reproducir en él todos los ejemplos de cconclase.net (al menos la mayoría). Entonces me daré por más que satisfecho.

Un saludo y una vez más gracias por los comentarios. :-)

C

hace falta poner actualizacion por actualizacion? o poniendo la ultima ya rula XD? es para esperarme a cuando saques la ultima actualizacion xd

erdanblo

La idea de un lenguaje en español, mola, pero a la vez, se hace muy incómoda, por el hecho de que para decir una misma cosa, en español hay tantas varias formas :/, (y que ademas se hace raro ver algo en español :P, el "mientras" ma matao)

A

Hola.

#9 Cada actualización es independiente, sólo necesitas el último zip. Si quieres ampliar el lenguaje puedes descargar el código, si sólo te interesa probarlo e ir haciendo programillas, el binario es suficiente.

#10. Tienes razón, pero eso se verá solucionado en su momento, gracias a dos cosas:

  • La documentación, que explicará cuales son las palabras reservadas, las funciones y su uso, con ejemplos. (mientras, desde...hasta, cuando..., si...sino)

  • Que podrás escoger la gramática a usar para el lenguaje. Ésto significa que en la cabecera de tu archivo.tpl (o quizá con una opción tipo "tpl -lang...") podrás hacer algo tipo: lang=es o lang=en y TPL usará para "es" las palabras reservadas en castellano y para "en" las palabras inglesas. (while, if, else...). La idea es poder programar en tu lenguaje natural. :-)

Un saludo.

IbLiS-

yo para empezar a programar empeze (en la universidad) con un pseudocodigo de java llamado POODI (programacion orientada a objecto i algo mas). Las instrucciones eran en catalan y muy simples al estilo

mentre x=10 fer
si x=5 llavors
f=cert
fsi
fmentre

que viene a ser

mientras x=10 hacer
si x=5 entonces
f=cierto
fsi
fmientras

La verdad es que era facilisimo de usar y a mi me sirvio de mucho para aprender

A

#12, Me alegro ese lenguaje te sirviera para aprender. En definitiva espero que TPL pueda ayudar a otros en un futuro, o al menos les haga interesarse por la programación.

¿ Podrías ayudarme a traducir las palabras reservadas (cuando estén todas) al catalán en el momento en el que lo haya terminado ?

Me gustaría poder tener la gramática en todos los idiomas posibles.

kas

Muy buena iniciativa Archi, si me lo permites, opino que es un Spanish Vusal Basic :)

IbLiS-

ok, yo te ayudo :D

A

Más cosas nuevas:
tpl 1.6

Binario:
http://ese.lenguaje.en.googlepages.com/tpl1.6binarios.zip

Código:
http://ese.lenguaje.en.googlepages.com/tpl1.6codigo.zip

Entero:
http://ese.lenguaje.en.googlepages.com/tpl1.6dist.zip

Novedades:

Las siguientes funciones matemáticas:
absoluto(x)
arcocoseno(x)
arcoseno(x)
arcotangente(x)
cuadrado(x)
coseno(x)
cubo(x)
entero(x)
exponente(x)
hexadecimal(x)
logaritmo(x)
octal(x)
raiz(x)
seno(x)
tangente(x)

Con cadenas:
ascii(x)
mayusculas(x)
minusculas(x)
reves(x)

Para numeros y cadenas:
cadena(x) (convierte a cadena)
numero(x) (convierte a número)
escadena(x) (devuelve 1 si lo es, 0 si no)
esnumero(x) (igual que la anterior)
longitud(x)

Y tres nuevas comparaciones:
x << y (devuelve 1 si Y está contenido en X)
x >> y (devuelve 1 si X está contenido en Y)
x || y (compara con comodines)

Incluye ejemplos nuevos, entre ellos uno para validar un email.

No pondré más versiones hasta que haya avanzado bastante, que se hará pesado cada poco. : -P

X

Hace tiempo desarrolle un par de proyectos parecidos al tuyo, pero este era un lenguaje de scripting para windows (si, ya lo se q para windows ya hay el vb, y el js scripting, xD). Este proyecto lo desarrolle con Delphi (hice tambien un sencillo IDE para el, para enseñarselo a unos compañeros de clase xDDDD).

Mas adelante me adentre en otro proyecto parecido, pero esta vez no era interpretado sino compilado.
La principal caracteristica de este proyecto era que se podia configurar el lenguaje, me explico, las palabras reservadas eran configurables (los begin, end, while, etc...) podian ser sustituidas por lo q tu quisieras, hice 3 ficheros de configuracion distintos: catalan, castellano e ingles.

El proyecto en si consta de 3 modulos basicos: El "Parser", el Traductor y el Compilador. El parser es el que lee el codigo fuente y lo analiza en busca de errores sintacticos y logicos. El traductor, como su palabra indica traduce el codigo fuente a Pascal, para posteriormente ser compilador con el FreePascal (http://www.freepascal.org/).
La gracia del proyecto es que era multipltaforma (windows y linux).

Luego tenia planeado crear dos IDEs, solo llegue a desarrollar uno de ellos (el basico) que era como el notepad de windows, pero con funciones añadidas, como son la de "Compilar", "Analizar codigo", etc... y que en caso de error te llevaba a la linea que contenia el error.
El otro IDE debia de ser desarrollando con la libreria "SynEdit 1.2 project" (http://sourceforge.net/projects/synedit/), una muy buena librerira para el resaltado de texto, etc... y ademas multiplataforma, pero no llegue ni a empezarlo...

A todo esto, el proyecto se quedo en fase de desarrollo (semi-avanzado), solo el Parser esta casi terminado, los demas estan a medio camino. La falta de tiempo (estudios + trabajo) hicieron q lo abandonara de forma indefinida.

Pero tengo una cosa clara, si tuiviera q volver a programar alguno de los 2 proyectos no los haria de la misma forma, ya q no usaria programacion estructurada sino POO (programacion orientada a objetos), y me plantearia seriamente si hacerlo en Delphi (Pascal) o C++.

He visto q esta programado en basic (no es uno de mis lenguajes favoritos xDD) pero si quieres información sobre alguno de los dos proyectos o algun tipo de ayuda, no dudes en hacermelo saber por privado, estare encantado ^^

Saludos.

A

Vaya xEsK, es genial ver que hay más gente por aquí trasteando con cosas de éstas.

Lo cierto es que nunca he usado Delphi. En mi caso, el IDE (aunque aún no tengo claro si lo haré o no) estaría basado en Scintilla:
http://www.scintilla.org/

Pensé en hacer un traductor a C++, pero no me tomo ésto como un proyecto realmente serio, sino como algo de lo que aprender. Conozco mis posibilidades y ya hay grandes lenguajes ahí fuera. Por otra parte, debido a otros proyectos y al trabajo, tampoco tengo mucho tiempo para dedicarle.

En un futuro, quizá sí me anime y me ponga a hacer algo que tenga cierta salida. A la conclusión que he llegado, de momento es que de hacerlo usaré Coco/R ( http://www.ssw.uni-linz.ac.at/Coco/ ) y C++.

Y sí, me gustaría ver tus proyectos, estoy seguro que aprenderé mucho de ellos. : -)

Un saludo.

X

La verdad es q vi el post y me hizo gracia ver algo asi, y me entro otra vez el gusanillo a retormarlo o empezar otro nuevo xDDD Pero siendo realistas no tengo tiempo por el momento :(

Pero a la q tenga un ratito libre, lo preparo todo y ya vemos como lo hacemos ^^

Saludos.

D

Me parece una iniciativa cojonuda.. pero.. hay preguntas que vienen a mi cabeza.

¿No tienes que trabajar o estudiar? O dedicar el tiempo en otra cosa..

salu2

pd.: Yo tngo q trabajar y estudiar :(

A

Hola.

#20 Sí, estudio y trabajo. Estas cosas las hago en mi tiempo libre, cuando aún me quedan ganas de trastear con ordenadores. : -P

Yo creo que si uno se administra, hay tiempo para todo.

kas

Jsjsjs a mi lo uqe me pasa es que acabo dedicando mas tiempo a los programas que me invento en mi tiempo libre de lo que deberia ^.

1 mes después
S

todos tenemos un friki dentro :D

1 mes después
elfito

#1 == crack

voy a probar :P

Usuarios habituales