tipos sintactico semantico proyecto lexico hecho hacer descargar compiladores compilador como codigo analizador compiler-construction

compiler construction - sintactico - ¿Es beneficioso para un programador aprender a construir un compilador?



proyecto analizador lexico en java (17)

Aprendí mucho.

Audrey Tang , desarrollador de PUGS , recomienda tipos y lenguajes de programación .

Personalmente, me encantó From NAND to Tetris , probablemente el mejor curso que he tomado, y un brillante ejemplo de lo que debería ser la educación superior.

Hay mucha variedad cuando se trata de los diferentes tipos de programadores. En general, ¿es beneficioso para un programador aprender a construir un compilador? ¿En qué casos sería o no necesaria la programación del compilador?


Comprender el proceso de compilación es un enfoque general para comprender cómo funciona la computadora y, por lo tanto, proporciona un amplio alcance de comprensión. Muchos programadores modernos trabajan en entornos complejos que requieren poco de esta comprensión, al menos en niveles básicos. Un ejemplo es java, que oculta el paso de vinculación de la compilación del desarrollador.

El conocimiento es conocimiento, casi siempre es útil. En mi caso, encontré el proceso de compilación de comprensión excepcionalmente útil cuando realizo la mejora del rendimiento, que es mi trabajo. (Trabajo en un entorno de latencia super baja)

Si haces todo tu trabajo en PHP mySql eso es genial. Solo recuerda que todas las tecnologías se vuelven obsoletas, y necesitarás entender la próxima gran cosa. Tener "conocimiento general" como comprender la compilación proporciona un amortiguador conceptual entre usted y aquellos que no pueden adaptarse.

Aprende a aprender


Creo que es mejor aprender desde el punto de vista del conocimiento. Al menos, puede examinar el código fuente del compilador existente y comprender los pasos de compilación y la complejidad típicos involucrados en cada fase de la compilación.


Creo que mi compilador y el curso de teoría del lenguaje en la Universidad realmente tuvieron una enorme influencia en mi comprensión de los lenguajes de computadora, incluso una década después. Pero no estoy seguro de que necesite implementar un compilador para esto.


De alguna manera, esta pregunta es muy similar a "¿Debería aprender C?"

Como han señalado otros, algunos elementos de un compilador (análisis léxico, análisis sintáctico) se pueden usar en muchas otras aplicaciones. Aprenderá algunas técnicas útiles, incluso si nunca tiene que implementar un compilador.

Además, la fase de generación de código le dará una mejor comprensión de cómo funciona la computadora. Verá cómo se procesan los algoritmos y las estructuras de datos de los lenguajes de nivel superior cuando llegan a la CPU (o a la máquina virtual, según sea el caso). Esto debería ayudarlo a escribir mejores algoritmos en su programación diaria.

Si también está diseñando su propio idioma, aprenderá mucho a través del proceso de pensar a través de los detalles de cómo debería funcionar, qué elementos de flujo de control necesita, cómo deben analizarse las expresiones, qué parámetros de la función de orden deben ser leer, etc. Esto debería darle una mejor comprensión de los idiomas en general, lo que debería convertirlo en un mejor programador en cualquier idioma que use.

Finalmente, siempre existe la posibilidad de que se quede atrapado en una aplicación heredada en un idioma antiguo que ya no es compatible, y la forma más fácil de agregar nuevas características será crear su propio compilador para extender el idioma.


Esto es como preguntar "¿es beneficioso para un programador tener más conocimiento de programación?". Lo simple es que sí, es beneficioso. ¿Cuánto beneficiará a los asuntos de programación no constructores de compilación día a día es difícil de adivinar? Pero definitivamente le enseñará cómo funcionan las funciones internas de lo que está haciendo, cómo manipular cadenas para dictar lógica y posiblemente ayudarlo a depurar mejor, independientemente de lo que use.


Estoy compilando un compilador como parte de un proyecto paralelo y debo decir que es una tarea muy satisfactoria donde aprenderá mucho sobre cómo funcionan los lenguajes de programación y cómo se puede optimizar el código.

saber cómo el código se compila y ejecuta tanto en código nativo como en bytecode también es una gran herramienta en C ++ vs Java / C # vs C ++ / C # vs hilos de Java y flame wars;)


Estoy en el proceso de leer a través de The Dragon Book (Compiladores) y durante el comienzo del libro te saludan con lo siguiente:

Aunque es probable que pocas personas construyan o incluso mantengan un compilador para un lenguaje de programación importante, el lector puede aplicar de manera rentable las ideas y técnicas que se analizan en este libro para el diseño general del software. Por ejemplo, las técnicas de coincidencia de cadenas para construir analizadores léxicos también se han usado en editores de texto, sistemas de recuperación de información y programas de reconocimiento de patrones. Las gramáticas libres de contexto y las definiciones dirigidas por sintaxis se han utilizado para crear muchos lenguajes pequeños, como los sistemas de composición y dibujo de figuras que produjeron este libro. Las técnicas de optimización de código se han utilizado en verificadores de programa y en programas que producen programas "estructurados" a partir de código no estructurado.

En resumen, no solo aprenderá cómo compilar un compilador. Aprenderá muchas técnicas diferentes de nivel inferior en el camino para asistirlo en la programación diaria. Aunque algunos dicen que es un libro fechado, todavía lo disfruto y lo recomendaría, aunque la lectura puede ser un poco pesada. Si lo obtiene, deje una buena cantidad de tiempo para leerlo y comprenderlo.


Hace poco hice un estudio independiente sobre lo que llamamos procesamiento de lenguaje (mi proyecto final no era tanto un compilador como un intérprete / intérprete de archivos c ++ con características similares a las del compilador). Se me requirió usar el libro "Dragón" mencionado anteriormente. Pensé que, como desarrollador de software, esta era una de las cosas más importantes que había hecho en mi carrera universitaria. Descubrí que no solo era interesante y gratificante para mi beneficio personal, sino que también me permitía ver más profundamente el idioma. Además de eso, porque el libro del Dragón no es específico del idioma, me ayudó a comprender las similitudes y, más importante aún, las razones detrás de las diferencias en diferentes idiomas. Sin embargo, estoy de acuerdo con el hecho de que no todos los programadores pueden encontrarlo necesario. Sin embargo, en el campo del desarrollo de software, creo que si tiene interés en ampliar su comprensión del diseño del lenguaje, puede ser muy útil observar los compiladores.


He vuelto a votar la mayoría de estas respuestas.

Creo que el trabajo de compilación te brinda formas importantes de pensar sobre la programación en general.

Cada vez que escribe un programa, en cierto sentido, define un idioma, y ​​cada programa es, en algún nivel, un procesador de lenguaje.

Te hace pensar en la mejor forma de representar la información y comprender que la información se puede codificar de muchas maneras diferentes, no solo como una estructura de datos y muchas clases.

Una vez que sepa que cada problema tiene múltiples soluciones válidas, con pros y contras, generalmente puede elegir una solución mucho mejor que con el viejo paradigma centrado en datos único para todos.


La programación del compilador es multifacética ya que incluye el análisis del código en árboles lógicos y luego la traducción del código en otra forma de código. Y potencialmente analizar la entrada una vez que está en árboles para optimizaciones.

Por lo tanto, en una ronda sobre camino ayudará a todos los programadores, ya que saben cómo las declaraciones se pueden interpretar más rápido, o cómo escribir un precompilador para crear macros para el idioma de su elección. O incluso cómo analizar ese archivo plano mejor que tu colega.

Para la mayoría de los lenguajes basados ​​en scripts, que no tienen un compilador, no podrá optimizar su flujo de trabajo diario al aprender cómo hacer un compilador. Pero aún entenderás el análisis.


La programación del compilador es un tema interesante y tiene un gran valor. En la universidad que asistí fue electiva, Diseño e Implementación del Idioma. Estoy personalmente agradecido de haberlo tomado. Aprendimos las diversas formas de implementar lexers, analizadores y emisores de códigos de bytes.

El valor real que he visto es que iluminaba la caja negra de la que dependía para poner en marcha mi programa. Me dio una mejor idea de cómo funciona el compilador y me ayudó a comprender mejor los errores del compilador.

El proceso de compilación de la fuente en el código es, de hecho, de forma general lo que hacen la mayoría de los programas, toman algunas entradas, realizan algunos procesos y generan el resultado. Un compilador tiene algunas ideas muy bien definidas sobre cómo hacer esto mejor.

Creo que en general fue beneficioso para mí, y actualmente trabajo en aplicaciones web basadas en Java.


Mientras que pocos programadores terminarán teniendo que implementar un compilador, las etapas más tempranas de compilación, como el lexing y el análisis sintáctico, pueden surgir con mucha más frecuencia: ¿Quién no ha tenido que escribir un analizador sintáctico para un formato de archivo extraño? Por lo general, son lo suficientemente simples como para administrarlos sin experiencia en la compilación de compiladores, pero no siempre.


Sí, es una buena idea. Aprender cómo funciona todo esto solo puede beneficiar al programador. Escribí un compilador BASIC en SX ASM y aprendí muchísimo.

Sin embargo, como alguien mencionó, hay muchos grados de programadores y conocimiento. Un desarrollador web que se dedique principalmente a los lenguajes de marcado y scripting probablemente no se beneficiaría tanto como un programador hardcore de C o ASM que escribe software de sistemas embebidos, eso no quiere decir que no sería conocimiento útil.

Reinventar las ruedas siempre es útil por su valor educativo.


Soy un desarrollador web; Paso la mayor parte de mi tiempo en PHP y MySQL. No creo que aprender a compilar un compilador me beneficie mucho.

Diferentes tipos de programadores obtendrán diferentes cantidades de beneficios.

Poco de una falta de respuesta, lo sé ...


Tomé dos cursos de compiladores en la universidad y los encontré útiles porque:

  • Escribir un compilador requiere el conocimiento de muchas áreas de la informática: expresiones regulares, gramáticas libres de contexto, árboles sintácticos, gráficos, etc. Puede ayudarlo a ver cómo aplicar la teoría de la informática a problemas del mundo real.
  • Al comprender cómo un compilador genera y optimiza el código, perderá menos tiempo haciendo tontas "optimizaciones" usted mismo.
  • El proceso de escanear / leer un archivo y crear un árbol de sintaxis es aplicable a un conjunto de problemas mucho mayor que el de construir un compilador.
  • Ayuda a "generalizar" los lenguajes de programación: una vez que ve que cada lenguaje de programación termina finalmente como código de máquina, hace que sea más fácil aprender nuevos lenguajes porque ve que cada idioma es solo una forma diferente de expresar las mismas ideas básicas.

Algunas personas replicarían que hay más cosas útiles que podrías hacer con tu tiempo, como aprender un lenguaje de programación popular o una biblioteca que podría ayudarte a conseguir un trabajo (este argumento se usa a menudo como una razón para no aprender el lenguaje ensamblador). Sin embargo, saber cómo funcionan los compiladores probablemente facilitará el aprendizaje de nuevos lenguajes de programación (ver el punto 4).


En la industria de hoy, si puedes hacer un compilador, entonces eres como un niño de 3 años que está aprendiendo a contar (que el límite superior de mi inteligencia me da un cociente intelectual de unos 18 en lo que respecta al campo) ); y es igual de esencial también: como se cita en el libro del dragón, cada aplicación con una interfaz de usuario define un lenguaje de programación.

Además, los nuevos lenguajes de programación, como zonnon y composita , usan protocolos dirigidos por sintaxis para la comunicación entre objetos en vivo. Definen tipos de protocolo que especifican la interfaz a un hilo de servidor como una gramática EBNF. ¡Eso hace que sea imposible codificar los manejadores de mensajes si no has escrito un compilador!

Los protocolos dirigidos por sintaxis son la mejor manera de manejar cosas como servidores web que usan protocolos basados ​​en texto; así que es muy posible que este se convierta en el método de elección. Sin embargo, ambos lenguajes restringen los protocolos a las gramáticas LL (1) (por una razón muy obvia), y esto puede resultar demasiado restrictivo.

Mientras que la implementación actual de zonnon todavía está un poco en el lado negativo; y la definición del lenguaje tampoco parece estar completa; Sin embargo, seré tan osado como para aventurar que zonnon (o algo similar) colocará C # en el contenedor de basura a donde pertenece, si es que pueden resolver estos problemas.

Composita es un lenguaje intrigante; pero en el mundo real, es muy poco deseable requerir que cada objeto sea un hilo en vivo y cada llamada a función sea un mensaje, ya que los diseñadores de compilación tuvieron que anular el sistema operativo para hacerlo funcionar lo suficientemente rápido.

Habiendo dicho eso, estoy cerca de repetirme: si las aplicaciones de servidor de programación siguen el camino de los tipos de protocolo EBNF, entonces será mejor que aprenda a escribir un compilador.