wikiHow es un "wiki", lo que significa que muchos de nuestros artículos están escritos por varios autores. Para crear este artículo, 24 personas, algunas anónimas, han trabajado para editarlo y mejorarlo con el tiempo.
Este artículo ha sido visto 37 155 veces.
Muchas personas experimentan dificultades o frustraciones con los lenguajes de programación que usan cada día. Algunos quieren cosas que puedan manejarse de forma más abstracta, mientras que a otros no les gusta implementar características que les gustaría que fueran normales. Tanto si eres un profesional de la informática como un aficionado, muchas veces te encontrarás ante la situación de querer crear un lenguaje de programación nuevo.
Pasos
-
1Familiarízate con la terminología. Los escritores compiladores suelen usar una terminología desconocida. Infórmate sobre los compiladores antes de continuar. Asegúrate de saber todo lo que necesitas.
-
2Decide qué problema vas a solucionar. ¿Está dirigido a un problema de un dominio específico o es un lenguaje para un uso general?
-
3Piensa sobre la semántica del lenguaje y sus conceptos.
- ¿Vas a permitir acceso directo o no?
- ¿Cuáles son los tipos de datos de tu lenguaje?
- ¿Es un lenguaje estático o dinámico?
- ¿Cuál es el modelo de la memoria? ¿Vas a usar un recolector de basura o un administrador manual de memoria? (en caso de que uses un recolector de basura, prepárate para escribir uno o adaptar uno existente a tu lenguaje).
- ¿Cómo vas a administrar la concurrencia? ¿ Vas a usar un modelo sencillo de hilo o bloqueo o algo más complejo como Linda o el modelo de actores? (ya que en la actualidad las computadoras tienen varios núcleos).
- ¿Habrá funciones primarias insertadas en el lenguaje o estarán todas en una librería?
- ¿Cuál es el paradigma o los paradigmas de tu lenguaje? ¿Funcional? ¿Dirigido a objetos? ¿Prototipo (como JavaScript)? ¿Dirigido al aspecto? ¿A plantillas? ¿O algo completamente nuevo?
- ¿Cómo se va a relacionar tu lenguaje con otras librerías y lenguajes (principalmente C)? Este punto es importante en caso de que vayas a crear un lenguaje para un dominio específico.
- Finalmente, algunas de las respuestas a estas preguntas se responderán en el segundo paso y te ayudarán a responder el paso siguiente.
-
4Piensa algunas tareas específicas que alguien quizá quiera realizar con tu lenguaje. Por ejemplo, es posible que quieran dirigir un robot para que siga una línea, crear programas de escritorio relativamente portátiles en él o crear aplicaciones web con él.
-
5Experimenta con ideas de sintaxis (el texto del lenguaje) con los ejemplos anteriores.
- Ten cuidado de mantener tu lenguaje en una categoría libre de contextos sin nada dentro de él. Tu generador sintáctico y tú lo agradecerán más adelante.
-
6Escribe una gramática formal para la sintaxis.
-
7Decide si quieres que el lenguaje se interprete o compile. Esto significa que en el mundo de la interpretación el usuario probablemente editará tu programa con un editor y ejecutará directamente en el intérprete, mientras que en el mundo de la compilación, el usuario editará tu programa, lo compilará, guardará el ejecutable resultante en alguna parte y lo ejecutará.
-
8Escribe el traductor y generador sintáctico o busca una herramienta que te ayude con esto.
- Piensa también cómo el compilador o intérprete avisarán al usuario sobre los programas erróneos y fallos de sintaxis.
-
9Usa la información del generador sintáctico para escribir el código del objeto o un intermediario. Haz que el generador cree un AST y luego el código del objeto desde el AST usando tres direcciones código o su "hermano mayor" SSA, y después crea una tabla de símbolos para definir sus funciones, variables globales, etc.
- Además, dependiendo del lenguaje, es posible que quieran crear tablas virtuales o de información para tus clases (para poder soportar la reverberación o RTTI).
-
10Escribe el ejecutor o código generador que unirá todo.
-
11Escribe muchos programas de prueba para comprobar el lenguaje.
- Crea programas que "estiren la cuerda" de tu gramática formal para poder comprobar que el compilador soporta todo lo que se encuentra dentro de tu definición y rechaza todo lo que está fuera de ella.
-
12Considera cómo el usuario eliminará los fallos de sus propios programas.
-
13En caso de que tu lenguaje use una librería estándar, escríbela. Añade también el recolector de basura u otras características de ejecución común de lenguaje en caso de que lo necesites.
- Específicamente, en caso de que uses un compilador necesitarás el código que ejecuta el sistema operativo para poder iniciar el código de usuario (por ejemplo, distribuir todas las variables globales).
-
14Publica tu lenguaje junto a su descripción y algunos ejemplos de lo que puede hacerse con él.
- No olvides documentar cómo integrarlo con librerías existentes, lenguajes y cómo usar las características de ejecución común o la librería estándar.
Consejos
- Comienza por diseñar el lenguaje y no escribas ningún código hasta que quedes satisfecho y hayas respondido a todas (o la mayoría) de preguntas o problemas relacionados con tu diseño, ya que es más sencillo cambiar el diseño antes que después.
- Conoce tu plataforma objetivo (sistema operativo y librerías) para tu compilador e intérprete, ya que después de todo, vas a usarlo y manipularlo.
Advertencias
- Piensa si realmente necesitas un lenguaje nuevo y qué tiene de nuevo que no tengan los demás (puede ser una combinación de características o una sola).
- Es difícil escribir lenguajes en caso de que no sepas lo que haces. También requiere de mucha práctica.
- Prepárate para pasar bastante tiempo con el diseño de lenguaje, ya que no tendrás oportunidad de cambiar el lenguaje una vez hayas escrito el compilador y pasado el punto del diseño.
- No intentes basar tus características en una mezcla de varios lenguajes, como decir que el lenguaje será una unión de los lenguajes X, Y y Z. La historia ha demostrado que los lenguajes creados de esa forma nunca tienen éxito porque de lo contrario, todo el mundo programaría en PL/1 en vez de sobre algo basado en C.
Cosas que necesitarás
- paciencia
- conocimiento sobre las características y diseño del lenguaje (es posible que quieras leer "Programming Language Design Concepts" ("Lenguajes y paradigmas de programación" de David A. Watt)
- conocimiento sobre teoría de la compilación (ya que vas a escribir un compilador e intérprete para tu lenguaje y su puesta en práctica será la referencia para que se cumpla)
- usos para tu lenguaje (recuerda que algunos de los lenguajes más usados como C o Lisp se crearon para poder hacer algo específico como crear Unix o realizar cálculo simbólico)