programming languages - programacion - ¿Cómo hacer tu propio lenguaje de programación?
como crear tu propio codigo de programacion (4)
Depende completamente de cómo será su lenguaje de programación.
¿Definitivamente quieres que sea compilado? También hay idiomas interpretados ... o podría implementar la compilación en el momento de la ejecución
¿Qué quieres que sea la plataforma de destino? Algunas opciones:
- Código nativo (¿qué arquitecturas y sistemas operativos?)
- JVM
- Regular .NET
- .NET usando el Dynamic Language Runtime (como IronRuby / IronPython)
- Parrot
Personalmente, consideraría enfáticamente la orientación a JVM o .NET, solo porque entonces obtienes mucha "seguridad" de forma gratuita, así como un gran conjunto de bibliotecas que tu idioma puede usar. (Obviamente, con el código nativo también hay muchas bibliotecas, pero sospecho que lograr una interoperabilidad correcta entre ellas puede ser más complicado).
No veo ninguna razón por la que desee escribir un compilador (u otra parte del sistema) en C, especialmente si es solo para fines educativos (por lo que no necesita un compilador de 100 millones de líneas por segundo) ). ¿En qué idioma es más productivo personalmente?
Posible duplicado:
Aprendiendo a escribir un compilador
Miré a mi alrededor tratando de averiguar más sobre el desarrollo del lenguaje de programación, pero no pude encontrar mucho en línea. He encontrado algunos videos tutoriales, pero no mucho para guías de texto, preguntas frecuentes, consejos, etc. Tengo mucha curiosidad sobre cómo construir mi propio lenguaje de programación. Me lleva a SO para preguntar:
¿Cómo puedes hacer tu propio lenguaje de programación?
Me gustaría construir un lenguaje muy básico. No planeo tener un lenguaje muy bueno, ni creo que sea usado por nadie. Simplemente quiero hacer mi propio lenguaje para aprender más sobre los sistemas operativos, la programación y mejorar en todo.
¿Dónde empieza uno? ¿Construyendo la sintaxis? ¿Construyendo un compilador? ¿Qué habilidades se necesitan? ¿Mucho montaje y comprensión del sistema operativo? ¿En qué idiomas están construidos la mayoría de los compiladores e idiomas? Supongo que C.
Echa un vistazo a ANTLR . Es un compilador-compilador impresionante las cosas que usas para construir un analizador para un lenguaje.
La construcción de un lenguaje consiste básicamente en definir una gramática y agregar reglas de producción a esta gramática. Hacer eso a mano no es trivial, pero un buen compilador-compilador te ayudará mucho.
También es posible que desee echar un vistazo al clásico "Libro del Dragón" (un libro sobre compiladores que presenta a un caballero matando a un dragón en la página principal). (Buscalo en Google).
Construir lenguajes específicos de dominio es una habilidad útil para dominar. Los lenguajes específicos de dominio generalmente no son lenguajes de programación con todas las funciones, sino que suelen ser reglas de negocios formuladas en un lenguaje hecho a medida para el proyecto. Echa un vistazo a ese tema también.
Hay varios tutoriales en línea, como Escribir un esquema en 48 horas .
Un lugar para comenzar aunque sea con un "lenguaje específico de dominio incorporado" ( EDSL ). Este es un lenguaje que realmente se ejecuta dentro del entorno de otro, pero ha creado palabras clave, operadores, etc. especialmente adecuados para el tema (dominio) en el que desea trabajar.
Yo diría que antes de comenzar, es posible que desee echar un vistazo al Libro del Dragón y / o a la Pragmática del lenguaje de programación . Eso te basará en la teoría de los lenguajes de programación. Los libros cubren la compilación y la interpretación, y te permitirán construir todas las herramientas que se necesitarían para hacer un lenguaje de programación básico.
No sé cuánto lenguaje ensamblador sabe, pero a menos que se sienta cómodo con algún dialecto de la programación en lenguaje ensamblador, le aconsejo que no intente escribir un compilador que se compile en el código ensamblador, ya que es bastante un reto. Anteriormente mencionó que está familiarizado con C y C ++, por lo que tal vez pueda escribir un compilador que compile en C o C ++ y luego use gcc / g ++ o cualquier otro compilador de C / C ++ para convertir el código en un ejecutable nativo. Esto es lo que hace el lenguaje de programación Vala (convierte la sintaxis Vala al código C que usa la biblioteca GObject).
En cuanto a lo que puedes usar para escribir el compilador, tienes muchas opciones. Puede escribirlo a mano en C o C ++, o para simplificar el desarrollo puede usar un lenguaje de nivel superior para que pueda concentrarse en la escritura del compilador más que las asignaciones de memoria y las que son necesarias para trabajar con cadenas. Cª.
Simplemente podría generar las gramáticas y hacer que Flex y Bison generen el analizador y el analizador léxico. Esto es realmente útil ya que le permite hacer un desarrollo iterativo para trabajar rápidamente en conseguir un compilador que funcione.
Otra opción que tienes es usar ANTLR para generar tu analizador, la ventaja de esto es que obtienes muchos lenguajes de destino que ANTLR puede compilar. Nunca he usado esto, pero he escuchado mucho al respecto.
Además, si desea una mejor base en los modelos que se utilizan con tanta frecuencia en la compilación / escáner / analizador de lenguaje de programación, debería obtener un libro sobre los Modelos de computación. Recomendaría Introducción a la Teoría de la Computación .
También parece mostrar interés en comprender los sistemas operativos. Yo diría que esto es algo que está separado del Diseño del Lenguaje de Programación, y debe ser perseguido por separado. El libro Principios de los sistemas operativos modernos es un buen punto de partida para aprender sobre eso. Podría comenzar con proyectos pequeños como crear un shell o escribir un programa que emule el comando ls, y luego ir a cosas de más bajo nivel, dependiendo de cómo esté con las llamadas del sistema en C.
Espero que eso te ayude.
EDITAR: He aprendido mucho desde que escribo esta respuesta. Estaba tomando el curso en línea sobre lenguajes de programación que ofrecía la Universidad de Brown cuando vi que esta respuesta aparecía allí. El profesor señala acertadamente que esta respuesta habla mucho sobre analizadores, pero es poco clara en todo lo demás. Realmente sugeriría revisar los videos y ejercicios del curso si desea obtener una mejor idea sobre cómo crear un lenguaje de programación.