Como hacer un lenguaje de programación?

Iniciado por n1sen, 21 Octubre 2017, 00:41 AM

0 Miembros y 1 Visitante están viendo este tema.

n1sen

Aveces me pregunto como hacer un lenguaje de programación, he visto paginas, nada me aclara, siempre veo que dicen "busca un lenguaje que se paresca al que quieres crear". Una vez intente hacer un interprete en Python, funcionaba, pero era muy básico, el código era ineficiente y mal programado, pero funcionaba!, aunque le faltaba lo mas básico, las variables, lo cual me genero muchos problemas...
El lenguaje que estaba programado tenia una """sintaxis""" igual a Python y Ruby.
De paso les dejo una muestra del lenguaje que estaba haciendo:

~Este es un comentario
putsln "Hola"
add "5" "5" ~Suma 5 mas 5 y lo muestra en pantalla


null

ivancea96

Un lenguaje al final es poco más que un parser, la forma de la cual guardas el código en memoria y la forma de "ejecutarlo" (que puede ser interpretarlo a mmento, generar bytecode, compilarlo...).

Para las variables, pues bueno. Depende. Una forma fácil sería tener un mapeado clave-valor donde la clave sea el nombre de la variable y el valor sea la información de esta (tipo, valor, y lo que sea).
En caso de un lenguaje estructurado, habría que tener un map en cada contexto (local, global, namespace, clase...) (Dependiendo del lenguaje, desde luego).

En fin, depende totalmente del lenguaje, paradigma que quieras seguir, etc. Un lenguaje ensamblador, por ejemplo, es realmente sencillo. Su parser es prácticamente trivial y su ejecución lo mismo.
Un lenguaje orientado a objetos como Java o C++, pues ya hay que andar con clases, funciones, imports... El parser se complica ya que, por ejemplo, en un ensamblador solo te vas a encontrar en el código unos operadores que tú has definido. Sin embargo, en Java, vas a encontrarte también cosas definidas por el programador, como nombres de clases, funciones...

Así que antes de nada, ¿qué es lo que tienes en mente?

n1sen

Un lenguaje de tipado dinámico, interpretado (pues para hacerlo compilado lo veo algo dificil), orientado a objetos, un poco de programación funcional.
Así que seria un lenguaje multiparadigma.
null

ivancea96

Si realmente vas a ponerte a hacerlo, lo primero es que tengas claro qué va a ser y cómo va a ser xD
Sintaxis y posibilidades.

n1sen

Una sintaxis simple, como Python y Ruby
null

ivancea96

Pues nada, empieza a ello. Empieza definiendo <exactamente> la sintaxis que tendrá tu lenguaje: Cómo declarar variables, cómo declarar funciones (si se las vas a meter), cómo hacer bucles, condicionales... También, qué tipos de variables tendrá.

En fin, si tienes alguna duda más concreta, puedes preguntar.

Serapis

Cita de: n1sen en 21 Octubre 2017, 18:22 PM
Una sintaxis simple, como Python y Ruby
Cuando uno decide crear un lenguaje nuevo, tiene la oportunidad dorada, de decidir como ha de ser su lenguaje y desterrar del mismo las tonterías que encuentra en otros lenguajes y añadir lo que cree que falta.

Si al final encuentras que tales lenguajes no contienen tonterías sobrantes, ni les falta nada, entonces es una pérdida de tiempo, pretender hacer un lenguaje prácticamente idéntico a uno ya "existonto"... Si es meramente por practicar, haz lo que muchos crea un lenguaje simple para una calculadora, sigue siendo un ejercicio, pero sin la pérdida considerable de tiempo y esfuerzo (como el que lleva un lenguaje complejo y completo).

Te recomiendo encarecidamente que te leas la notación BNF
Esto puede ilustrarte bastante:
https://tools.ietf.org/html/rfc5511  RBNF
https://www.ietf.org/rfc/rfc2234.txt ABNF