Desarrollar un compilador hecho en C

Imagen de colombiano
0 puntos

hola a todos que tal, feliz año :)
Bueno me encuentro en un proyecto un poco complicado para mi la verdad, tengo que hacer un compilador en C, este proyecto nos lo encargaron en la universidad en la clase de teoria de la computación, pero el problema esque la profesora nos acaba de decir que no nos va a enseñar como se hace lo unico que sabemos es la "teoria" de como funciona o mas o menos de que esta hecho un compilador para un lenguaje que inventamos nosotros. Hasta el momento se que el compilador consta de sus analizadores lexico, sintactico, semantico, y luego lo que hace una vez que checa un codigo fuetne escrito y no encuentra errores, es:
-generar un codigo intermedio
-optimizar el codigo
-crear codigo objeto
-pasar a codigo maquina
-final el programa ya estaria compilado

quisiera pedir humildemente su ayuda con un poco de orientación a lo que deberia estar investigando, simplemente sabiendo C no me basta para tan siquiera tener una idea de por donde empezar, ya que el curso de C que nos impartieron es basico mas no para hacer compiladores. Por si alguna duda el compilador se hace bajo ubuntu 8.10, agradeceria mucho la ayuda de cualquier persona que me la proporcione por pequeña que sea, inclusive algun buen link, o consejos me podrian servir, para saber estructurar bien el plan que debo hacer.

gracias de antemano
suerte a todos

PD:por si cualquier cosa este es mi correo, **********, alguna sugerencia o algo que necesiten pueden avisarme quien quiera,

Imagen de Juan Manuel Lallana
+1
0
-1

si solo te piden compilador no es tan complejo, pensa que estas en linux y podes usar analizadores léxicos y sintacticos además de el enlazador.

Lo que estas confundiendo el de orden

Primero se analiza lexica y sintactimente (bison con modificaciones a tu lenguaje)

Despues se compila (Podes leer codigo fuente y documentacion de alguno de los tantos compiladores de GCC)

Eso de pasar a codigo de maquina no forma parte del compilador sino del enlazador (No se si formara parte de tu trabajo)

Si te llegaran a dar la libertad de elejir el lenguaje de programación te recomendaria python por que te vas a ahorrar demasiado tiempo.

Si tenes la libertad de escribir vos el mismo lenguaje, te recomendarias que hagas uno basado en algo hecho y uses un analizador existente, siendo bago te diria xml por ejemplo

<program name=ejemplo>
  <print color="red">"hola mundo!"</print>
</program>

Obvio que esto es algo burdo pero con 10 lineas de C podes empezar a parsear el codigo como si fuese castellano :)

Hay que ver las estructuras que tenes que implementar. Pero siguiendo el ejemplo seria sencillo.

Si podes ser mas descriptivo con lo que tenes que hacer te puedo pasar un link, asi mas que ideas vagas no puedo darte :)

+1
0
-1
Imagen de colombiano
+1
0
-1

hola juan gracias por el comentario, bueno para ser mas descriptivo no se bien mucho como pero lo que tengo que hacer exactametne es hacer completamente desde cero el analizador lexico,sintactico y semantico, el enlazador puede ser modificado a alguno que ya exista pero seria el menor de los problemas, bien el lenguaje a desarrollar empezaria siendo muy simple y con fin de ser un lenguaje compilado no interpretado y similar a C,pascal,fortran etc, en el aspecto de que todo seria en terminal.Muchas gracias por comentar lo de leer el codigo de gcc la verdad no se como no se me ocurrio antes XD, sobretodo para la parte de los analizadores puede servirme mucho :)

por otro lado si es extraño que el profesor aca pida algo relativamente "complejo" cuando solo nos enseña un poco de teoria pero la modalidad de la mayoria de las materias las manejan x mera investigación y el teacher na mas responde dudas :( pero weno asi es la vida jajaja.

No me vendria mal algun buen link o recomendación para comenzar desde el principio, analizador lexico y sintactico con un poco de su amabilidad

muchas gracias y suerte a todos

PD:perdon x lo de el correo la verdad andaba un poco emocionado en el momento porque me llama mucho la atencion el tema y lo olvide

"If you don´t take risks, you don´t drink champagne"
-Gary Kasparov

"Tomate la champaña hasta que te pongas ebrio y luego arriesgate"

-yo

+1
0
-1

____________________________________

Jorge
Estudiante en TI
pagina-web por diversion: http://crazyvids.org
pagina-web de programacion:codigoprogramacion.com

Imagen de slap
+1
0
-1

He editado tu correo porque está prohibido por las normas del foro.

Saludos.

Equipo de Ubuntu-es

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de slap
+1
0
-1

Personalmente pienso que si no sabes ni por donde empezar es que estás muy verde en la teoría y deberías entenderla bien antes de poder hacer algo práctico.

Me extrañaría mucho que un profesor ordene hacer un trabajo sin antes haber dejado claro cómo y qué se debe hacer.

Saludos.


0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://7grados.injiniero.es

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de Juan Manuel Lallana
+1
0
-1

Si tenes que hacer analizadores lexicos, sitácticos y enlazador aparte del compilador, date por reprobado :S

Pregunta bien por q es mas sencillo hacer en sistema operativo que todo eso LoL

Si solo tenes que hacer el compilador: Bison y toda tu vida solucionada.

http://www.wikilearning.com/tutorial/bison-bison_el_generador_de_analiza...

Ahi explica de bison :)

+1
0
-1
Imagen de colombiano
+1
0
-1

No pues tengo hasta finales de febrero para tener hechos el analizador lexico y sintactico, la maestra lo confirmo el dia de aller , pero nose por donde empezar :s

consegui el libro de Louden Construcción de compiladores

"If you don´t take risks, you don´t drink champagne"
-Gary Kasparov

"Tomate la champaña hasta que te pongas ebrio y luego arriesgate"

-yo

+1
0
-1

____________________________________

Jorge
Estudiante en TI
pagina-web por diversion: http://crazyvids.org
pagina-web de programacion:codigoprogramacion.com

Imagen de Juan Manuel Lallana
+1
0
-1

... encontre esto por ahi y lo encontre bastante sencillito, es un compilador de pascal (Mini pascal) que no tiene casi estructuras ni nada pero es un buen comienzo.

Tiene un manual y todo. Como habia que registrarse y toda la vuelta lo subi a otra pagina X en este link

Fuera de todo esto, yo no estoy en la universidad pero me encanta la programacion, jugue mucho con minix y claro linux, tambien estube intentando hacer un sistema operativo, hice bastante y nada a la vez, me quede clavado con el tema de los firmwares de los discos duros (para leerlos en modo protegido)

El tema compilador me re intereza, quizas queres puedo ponerme mas al tanto de tu proyecto para ayudarte y al mismo tiempo aprender (y el dia de mañana quizas hacer uno prestable)

Saludos espero tu respuesta :)

+1
0
-1
Imagen de colombiano
+1
0
-1

Hola que tal, muchas grax men, ya lo descargue y "hojee", lamentablemente no habia tenido tiempo porque esta semana me toco hacer unas cosas de servicio social y no habia podido revisar, pero pues claro cualquier cosa siempre estare avisando como va el proyecto.

Cualquier cosa no dudes en avisarme :)

Saludos

Jorge V.

+1
0
-1

____________________________________

Jorge
Estudiante en TI
pagina-web por diversion: http://crazyvids.org
pagina-web de programacion:codigoprogramacion.com

Imagen de clavmoth
+1
0
-1

pues yo ando mas o menos en la misma situación, pero, si te sirve de algo, hay un libro que se especializa en explicar todo lo que engloba el tema de los compiladores, su nombre es:
- Compiladores: Principios, Técnicas y Herramientas
también le llaman Dragon book.
sus autores son Aho, Seti y Ullman, y me parece que anda navegando en la red por si quieres buscarlo.

+1
0
-1
Imagen de Vinicio Steven
+1
0
-1

Ahh, interesante proyecto, si me das la teoria que te han entregado en la Universidad la puedo aprender y ayudarte.

Mi e-mail es: v.fhdz@hotmail.com

+1
0
-1
Imagen de zxk
+1
0
-1

hola!!
yo también te recomiendo el libro de Ullman
o el de Construcción de Compiladores, Principios y Práctica de Kenneth C. Louden
puedes usar lex & yacc para hacer el analizador lexico

+1
0
-1

zxk->k