Yo diría que antes de comenzar puede que desee echar un vistazo a Dragon Book y/o Programming Language Pragmatics. Eso te pondrá a tierra en la teoría de los lenguajes de programación. Los libros cubren compilación e interpretación, y le permitirán construir todas las herramientas que serían necesarias para hacer un lenguaje de programación básico.
No sé cuánto lenguaje ensamblador que sabes, pero a menos que esté bien cómodo con algún dialecto de programación en lenguaje ensamblador Te aconsejo que no traten de escribir un compilador que compila a código ensamblador, ya que es un gran desafío Usted mencionó anteriormente que está familiarizado con C y C++, por lo que quizás pueda escribir un compilador que compile hasta C o C++ y luego use gcc/g ++ o cualquier otro compilador C/C++ para convertir el código a un ejecutable nativo. Esto es lo que hace el lenguaje de programación Vala (convierte la sintaxis de Vala en código C que usa la biblioteca GObject).
En cuanto a lo que puede usar para escribir el compilador, tiene 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 enfocarse en la escritura del compilador más que las asignaciones de memoria y las que son necesarias para trabajar con cadenas. en C.
Simplemente puede generar las gramáticas y tener Flex y Bison generar el analizador sintáctico y léxico. Esto es realmente útil ya que le permite hacer un desarrollo iterativo para trabajar rápidamente en obtener un compilador que funcione.
Otra opción que tiene es usar ANTLR para generar su analizador, la ventaja de esto es que obtiene muchos idiomas de destino que ANTLR puede compilar. Nunca he usado esto, pero he escuchado mucho al respecto.
Además, si desea una mejor conexión a tierra en los modelos que se utilizan con tanta frecuencia en la construcción del compilador de lenguaje de programación/escáner/analizador, debe obtener un libro sobre los Modelos de Computación. Yo recomendaría Introduction to the Theory of Computation.
Parece que también le interesa comprender los sistemas operativos. Esto diría que es algo que está separado del Diseño del Lenguaje de Programación, y debería buscarse por separado. El libro Principles of Modern Operating Systems es un buen punto de partida para aprender sobre eso. Puede comenzar con pequeños proyectos como crear un shell, o escribir un programa que emule el comando ls, y luego ir a más cosas de bajo nivel, dependiendo de cómo a través de las llamadas al sistema en C.
Espero que le ayuda.
EDIT: He aprendido mucho desde que escribo esta respuesta. Estaba tomando el online course on programming languages que Brown University estaba ofreciendo cuando vi esta respuesta presentada allí. El profesor señala muy acertadamente que esta respuesta habla mucho sobre los analizadores sintácticos, pero es clara en casi todo lo demás. Realmente te sugiero que revises los videos y ejercicios del curso si deseas obtener una mejor idea sobre cómo crear un lenguaje de programación.
No estoy seguro de que va a aprender mucho acerca de los sistemas operativos escribiendo un compilador ... Gracias –
no vi la otra pregunta, no aparecer en Google o en SO cuando busqué. ¡Muchas buenas respuestas! –
Creé un lenguaje de programación sin tocar ensamblar o binario. http://github.com/struixLang – sbrm1