c++ - propio - lenguajes de programacion
crear mi propio lenguaje de programaciĆ³n (13)
Posibles duplicados:
Referencias necesarias para implementar un intérprete en C / C ++
¿Cómo crear un idioma en estos días?
Aprendiendo a escribir un compilador
Sé algo de c ++, MUY bueno en php, pro en css html, está bien en javascript. Así que estaba pensando en cómo se creó C ++. Quiero decir, ¿cómo puede la computadora entender qué significan los códigos? ¿Cómo se puede leer ... así que es posible que pueda crear mi propio idioma y cómo?
"De vez en cuando siento la tentación de diseñar un lenguaje de programación, pero luego simplemente me acuesto hasta que se va". - L. Peter Deutsch
EDITAR (para aquellos que anhelan contexto):
¡Sí! Interesarse en los compiladores fue mi gancho en CS profesional (anteriormente había estado en una ruta hacia EE, y solo cambié formalmente de bando en la universidad), es una gran manera de aprender un TON por una amplia gama de temas de informática. Eres un poco más joven (yo estaba en la escuela secundaria cuando comencé a perder el tiempo con analizadores e intérpretes), pero ahora hay mucha más información al alcance de la mano.
Comience poco a poco: Diseñe el lenguaje más pequeño que pueda imaginar: comience con nada más que una simple calculadora matemática que permita la asignación y sustitución de variables. Cuando te vuelves aventurero, intenta agregar "si" o bucles. Olvídese de las herramientas arcanas como Lex y Yacc, intente escribir a mano un analizador de descenso recursivo simple, tal vez conviértalo en códigos de bytes simples y escriba un intérprete para ello (evite todas las partes difíciles de entender el ensamblaje de una máquina en particular, asignación de registro, etc.). Aprenderás muchísimo con este proyecto.
Como otros, recomiendo el libro de Dragon (edición de 1986, no me gusta el nuevo, francamente).
Añadiré que para sus otros proyectos, recomiendo usar C o C ++, zanjar PHP, no porque sea un fanático del lenguaje, sino solo porque creo que trabajar con las dificultades en C / C ++ le enseñará mucho más sobre la arquitectura subyacente de la máquina y los problemas del compilador.
(Nota: si fueras un profesional, el consejo sería NO crear un nuevo idioma. Esa casi nunca es la solución correcta. Pero como proyecto de aprendizaje y exploración, es fantástico).
¡Sip! Definitivamente es posible. Otros han mencionado el Libro del Dragón, pero también hay mucha información en línea. llvm, por ejemplo, tiene un tutorial sobre la implementación de un lenguaje de programación: http://llvm.org/docs/tutorial/
Comience a aprender ASM y lea sobre cómo funciona el código byte y es posible que tenga una oportunidad :)
Comience con la creación de un analizador. Lea sobre gramáticas EBNF. Esto responderá a su pregunta sobre cómo la computadora puede leer el código. Este es un tema muy avanzado, así que no esperes demasiado de ti, pero diviértete. Algunos recursos que he usado para esto son bison, flex y PLY .
Eche un vistazo a este libro, Los Elementos de los Sistemas de Computación: Construyendo una Computadora Moderna a partir de Primeros Principios le lleva paso a paso a través de varios aspectos del diseño de un lenguaje de computadora, un compilador, un vm, el ensamblador y la computadora. Creo que esto podría ayudarte a responder algunas de tus preguntas.
Es posible. Debe aprender sobre compiladores y / o intérpretes: para qué sirven y cómo se hacen.
Realmente recomiendo Programming Language Pragmatics . Es un gran libro que te lleva desde el lenguaje hasta el funcionamiento de los compiladores y la creación del tuyo. Es un poco más accesible que el Libro del Dragón y explica cómo funcionan las cosas antes de saltar de cabeza.
Sí, es posible crear su propio idioma. Eche un vistazo a los compiladores de compiladores. O el código fuente de algunos lenguajes de scripting si te atreves. Algunas herramientas útiles son yacc, bison y lexx.
Otros han mencionado el libro de dragones. Usamos un libro que creo que se llamaba "teoría y práctica del compilador" en mi época universitaria.
No es necesario aprender ensamblador para escribir un idioma. Por ejemplo, Javascript se ejecuta en algo llamado intérprete, que es una aplicación que ejecuta archivos javascript. En este caso, el intérprete generalmente está integrado en el navegador.
El lenguaje de programa inicial más fácil puede ser escribir una calculadora simple basada en texto. es decir, tomar un archivo de texto, ejecutarlo y realizar los cálculos. Podrías escribir eso en C ++ muy fácilmente.
Mi primer idioma para un proyecto universitario fue un lenguaje definido en BNF. Luego tuvimos que escribir un analizador sintáctico que lo analizó en una estructura de árbol en memoria y luego en algo llamado código de dirección 3 (que es como ensamblador). Podría fácilmente convertir el código de 3 direcciones en ensamblador real o escribir un intérprete para eso.
Si conoces C, suena como lo haces, toma una copia usada de este libro antiguo: http://www.amazon.com/Craft-Take-Charge-Programming-Book-Disk/dp/0078818826
En él hay un capítulo donde el autor crea un intérprete "C", en C. No es académicamente serio como sería el libro del Dragón, pero recuerdo que es bastante simple, muy práctico y fácil de seguir, y ya que solo eres Para empezar, sería una introducción impresionante a las ideas de una "gramática" para los idiomas, y "tokenizar" un programa.
Sería un lugar perfecto para que comiences. Además, a $ 0.01 por una copia usada, más barata que el Dragon Book. ;)
Si desea comprender cómo la computadora entiende el código, es posible que desee aprender algún lenguaje ensamblador. Es un lenguaje de nivel mucho más bajo y le dará una mejor idea de los tipos de instrucciones simples que realmente se ejecutan. También debería poder hacerse una idea de cómo se implementan construcciones de nivel superior, como bucles con saltos condicionales.
Para un entendimiento aún más bajo, necesitarás estudiar sobre electrónica. La lógica digital le muestra cómo puede tomar "puertas" electrónicas e implementar una CPU genérica que pueda comprender el código máquina generado a partir del código del lenguaje ensamblador.
Para cosas de muy bajo nivel, puedes estudiar ciencia de materiales que puede enseñarte cómo hacer que las puertas funcionen a nivel atómico.
Suenas como una persona ingeniosa. Querrá buscar libros y / o sitios web sobre estos temas, adaptados a su nivel de comprensión y que se centren en lo que más le interesa. Una comprensión bastante completa de todo esto viene con una licenciatura en informática o ingeniería informática, pero muchas cosas son bastante comprensibles para una persona motivada en su posición.
Si está interesado en el diseño del compilador ("¿cómo puede la computadora entender qué significan los códigos?"), Recomiendo Dragon Book . Lo utilicé en la universidad e incluso creé un lenguaje de programación.
Si quieres una introducción realmente general (pero muy bien escrita) a este tema, los fundamentos de la informática, recomiendo un libro titulado Code by Charles Petzold. Él explica una serie de temas que le interesan y desde allí puede decidir qué quiere crear usted mismo.