Muchas personas tienen dificultades o frustraciones con los lenguajes de programación que utilizan todos los días. Algunos quieren que las cosas se manejen de manera más abstracta, mientras que a otros no les gusta implementar características que desearían que fueran "estándar". Ya sea que sea un profesional de TI o simplemente un aficionado, es posible que muchas veces desee crear un nuevo lenguaje de programación.
Pasos
Paso 1. Familiarícese con la tecnología
No puede crear un lenguaje de programación si no sabe cómo usar una computadora.
Paso 2. Familiarícese con la terminología
Los redactores de compiladores suelen utilizar terminología desconocida. Lea sobre los compiladores antes de continuar. Asegúrese de saber todo lo que necesita saber.
Paso 3. Decide qué problema está resolviendo tu idioma
¿Se trata de un problema específico de un dominio o es un lenguaje de propósito general?
Paso 4. Piense en la semántica de su idioma y sus conceptos
- ¿Permitirá el acceso directo al puntero o no?
- ¿Cuáles son los tipos de datos de su idioma?
- ¿Es un lenguaje estático o dinámico?
- ¿Cuál es tu modelo de memoria? ¿Va a utilizar un recolector de basura o una gestión de memoria manual? (Si usa un recolector de basura, prepárese para escribir uno o adaptar uno existente a su idioma).
- ¿Cómo van a manejar la concurrencia? ¿Va a utilizar un modelo simple de enhebrado / bloqueo o algo más complejo como Linda o el modelo de actor? (Dado que hoy en día las computadoras tienen múltiples núcleos).
- ¿Hay funciones primitivas incrustadas en el lenguaje o todo vendrá de una biblioteca?
- ¿Cuál es el paradigma o paradigmas de su idioma? ¿Funcional? ¿Orientado a objetos? ¿Prototipo (como JavaScript)? ¿Orientado a aspectos? ¿Orientado a plantillas? ¿O algo completamente nuevo?
- ¿Cómo va a interactuar su idioma con las bibliotecas e idiomas existentes (principalmente C)? Este punto es importante si está creando un lenguaje específico de dominio.
- Finalmente, algunas de las respuestas a estas preguntas serán respondidas por el segundo paso y lo ayudarán a responder al siguiente paso.
Paso 5. Piense en algunas tareas específicas que alguien querría poder realizar con su idioma
Por ejemplo, "pueden querer dirigir a un robot para que siga una línea" o "pueden querer crear programas de escritorio relativamente portátiles en él" o "pueden querer crear aplicaciones web con él".
Paso 6. Experimente con ideas de sintaxis (el texto del idioma) para los ejemplos anteriores
Tenga cuidado de mantener su idioma en la categoría de idioma libre de contexto o algo dentro de ella. Tu generador de analizadores sintácticos y lo agradecerás más adelante
Paso 7. Escribe una gramática formal para la sintaxis
Paso 8. Decida si el lenguaje se interpretará o compilará
Lo que significa que en el mundo interpretado su usuario normalmente editará su programa en un editor y lo ejecutará directamente en el intérprete; mientras esté en el mundo compilado, su usuario editará su programa, lo compilará, guardará el ejecutable resultante en algún lugar y lo ejecutará.
Paso 9. Escriba el analizador y el escáner frontal o busque una herramienta que le ayude con esto
Además, piense en cómo su compilador / intérprete advertirá a su usuario sobre programas erróneos y errores de sintaxis
Paso 10. Utilice la información del analizador para escribir el código del objeto o una representación intermedia
Haga que el analizador cree un AST, luego cree su código objeto a partir del AST usando el código de tres direcciones o su hermano mayor SSA, luego cree una tabla de símbolos para definir sus funciones, variables globales, etc.
Además, dependiendo de su idioma, es posible que también desee crear tablas de punteros virtuales o tablas de información para sus clases (para admitir la reflexión o RTTI)
Paso 11. Escriba el ejecutor o generador de código que unirá todo
Paso 12. Escriba muchos programas de prueba para probar el idioma
Desea crear programas que enfaticen las cargas de su gramática formal para ver que su compilador acepta todo lo que está dentro de su definición y rechaza todo lo que está fuera de ella
Paso 13. Considere cómo depurará el usuario sus propios programas
Paso 14. Si su idioma usa una biblioteca estándar, querrá escribirla
Junto con un recolector de basura u otras funciones de tiempo de ejecución si lo necesita.
Específicamente, si escribe un compilador, necesitará el código que ejecutará el sistema operativo para comenzar a ejecutar el código de usuario (por ejemplo, asignando todas las variables globales)
Paso 15. Publique su idioma, junto con la especificación del mismo y algunos ejemplos de lo que puede hacer en él
No olvide documentar cómo puede integrarse con bibliotecas, lenguajes existentes y cómo usar las funciones de tiempo de ejecución y / o la biblioteca estándar
Video: al utilizar este servicio, es posible que cierta información se comparta con YouTube
Consejos
- Comience por diseñar su lenguaje y no escriba ningún código, hasta que esté satisfecho y haya respondido todas (o la mayoría) de las preguntas o problemas relacionados con su diseño, ya que es más fácil cambiar el diseño antes que después.
- Conozca su plataforma de destino (sistema operativo y bibliotecas) para su compilador / intérprete, después de todo, la va a usar y manipular.
Advertencias
- Piense si realmente necesita un nuevo idioma y qué tiene su idioma de nuevo que otros idiomas no tienen (puede ser una combinación de características o una sola característica).
- Escribir idiomas es difícil si no sabes lo que estás haciendo. También se necesita mucha práctica.
- Prepárese para dedicar algo de tiempo al diseño del lenguaje, ya que no tendrá la oportunidad de cambiar su lenguaje una vez que haya escrito el compilador y pasado el punto de diseño.
- No intente basar sus características en una unión de varios idiomas, como decir que su idioma será una unión del idioma X, el idioma Y y el idioma Z. La historia nos ha demostrado que los idiomas creados de esa manera nunca tendrán éxito. o todos estarían programando PL / 1 en lugar de algo basado en C.