IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores

Autores
Arroyo, Marcelo; Aguirre, Jorge
Año de publicación
1998
Idioma
español castellano
Tipo de recurso
documento de conferencia
Estado
versión publicada
Descripción
En numerosas carreras de Ciencias de Computación se incluye la realización de un proyecto de diseño e implementación de un compilador. La etapa de generación de código, por su complejidad y por la extensión global del proyecto, suele simplificarse adoptando como lenguaje objeto el mismo lenguaje en que se realiza el desarrollo o el de alguna máquina abstracta definida ad hoc. Sin embargo desarrollar esta etapa en condiciones reales, para una arquitectura existente, es de gran valor formativo y quizás la mejor forma de enfrentar al alumno con la práctica de la programación a bajo nivel. En este trabajo se discute la aplicación de las técnicas usadas en la construcción de generadores de código y el uso de una herramienta iburg, cuya utilización permitió, generar código assembler optimizante para el ambiente linux como última etapa de un compilador Mini c. Trabajo realizado en una asignatura cuatrimestral. Generalmente un compilador genera una representación intermedia del programa fuente para realizar las operaciones requeridas en la generación de código optimizante. Esto permite además abstraerse de la plataforma (hardware y sistema operativo) sobre el cual se desea generar el código objeto, permitiendo desarrollar un front-end portable. El front_end utiliza un (o viarios) back_end que se encarga de la generación de código final para una plataforma determinada. El código intermedio generado, generalmente tiene la forma de árbol, ya que se asemeja a la forma del árbol de parsing construido por el reconocedor sintáctico (parser). Para producir código objeto a partir de esta representación es conveniente utilizar alguna herramienta que permita realizar un reconocimiento de patrones (subárboles) que se relacionan con las entidades semánticas mínimas y seleccionar las instrucciones de máquina más apropiadas que las implementen, esto es, secuencias de instrucciones que tengan el menor costo ( según un criterio de uso de recursos preestablecido). Un recorrido posible para un árbol no necesariamente es el que lleva a producir código de menor costo (en términos de uso de recursos), por lo cual es necesario evaluar todos los posibles recorridos para determinar el óptimo. En este artículo se analizará la herramienta, iburg, que toma como entrada una gramática libre de contexto que describe el árbol de representación elegido (aumentada con información de costos) y genera como salida un reconocedor de patrones (parser o BURS authomata) sobre el árbol. El reconocedor generado realiza una cobertura óptima en término de los costos asociados para un nodo del árbol dado como entrada. La determinación de recorridos (covers) se realiza en el momento en que se construye el autómata BURS (Bottom-Up Rewrite System) utilizando programación dinámica. Esto permite que el autómata generado sea extremadamente rápido y simple. Se ven ejemplos de aplicaciones para selección de instrucciones, inferencia de tipos y simplificaciones de árboles y se describe la experiencia realizada.
VI Ateneo de Profesores Universitarios de Computación (APUC)
Red de Universidades con Carreras en Informática (RedUNCI)
Materia
Ciencias Informáticas
Educación
Code generation
Dynamic programming
Compilers
Nivel de accesibilidad
acceso abierto
Condiciones de uso
http://creativecommons.org/licenses/by-nc-sa/2.5/ar/
Repositorio
SEDICI (UNLP)
Institución
Universidad Nacional de La Plata
OAI Identificador
oai:sedici.unlp.edu.ar:10915/24840

id SEDICI_bd3203eef007ac70093cddbbe78f31ce
oai_identifier_str oai:sedici.unlp.edu.ar:10915/24840
network_acronym_str SEDICI
repository_id_str 1329
network_name_str SEDICI (UNLP)
spelling IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladoresArroyo, MarceloAguirre, JorgeCiencias InformáticasEducaciónCode generationDynamic programmingCompilersEn numerosas carreras de Ciencias de Computación se incluye la realización de un proyecto de diseño e implementación de un compilador. La etapa de generación de código, por su complejidad y por la extensión global del proyecto, suele simplificarse adoptando como lenguaje objeto el mismo lenguaje en que se realiza el desarrollo o el de alguna máquina abstracta definida ad hoc. Sin embargo desarrollar esta etapa en condiciones reales, para una arquitectura existente, es de gran valor formativo y quizás la mejor forma de enfrentar al alumno con la práctica de la programación a bajo nivel. En este trabajo se discute la aplicación de las técnicas usadas en la construcción de generadores de código y el uso de una herramienta iburg, cuya utilización permitió, generar código assembler optimizante para el ambiente linux como última etapa de un compilador Mini c. Trabajo realizado en una asignatura cuatrimestral. Generalmente un compilador genera una representación intermedia del programa fuente para realizar las operaciones requeridas en la generación de código optimizante. Esto permite además abstraerse de la plataforma (hardware y sistema operativo) sobre el cual se desea generar el código objeto, permitiendo desarrollar un front-end portable. El front_end utiliza un (o viarios) back_end que se encarga de la generación de código final para una plataforma determinada. El código intermedio generado, generalmente tiene la forma de árbol, ya que se asemeja a la forma del árbol de parsing construido por el reconocedor sintáctico (parser). Para producir código objeto a partir de esta representación es conveniente utilizar alguna herramienta que permita realizar un reconocimiento de patrones (subárboles) que se relacionan con las entidades semánticas mínimas y seleccionar las instrucciones de máquina más apropiadas que las implementen, esto es, secuencias de instrucciones que tengan el menor costo ( según un criterio de uso de recursos preestablecido). Un recorrido posible para un árbol no necesariamente es el que lleva a producir código de menor costo (en términos de uso de recursos), por lo cual es necesario evaluar todos los posibles recorridos para determinar el óptimo. En este artículo se analizará la herramienta, iburg, que toma como entrada una gramática libre de contexto que describe el árbol de representación elegido (aumentada con información de costos) y genera como salida un reconocedor de patrones (parser o BURS authomata) sobre el árbol. El reconocedor generado realiza una cobertura óptima en término de los costos asociados para un nodo del árbol dado como entrada. La determinación de recorridos (covers) se realiza en el momento en que se construye el autómata BURS (Bottom-Up Rewrite System) utilizando programación dinámica. Esto permite que el autómata generado sea extremadamente rápido y simple. Se ven ejemplos de aplicaciones para selección de instrucciones, inferencia de tipos y simplificaciones de árboles y se describe la experiencia realizada.VI Ateneo de Profesores Universitarios de Computación (APUC)Red de Universidades con Carreras en Informática (RedUNCI)1998-10info:eu-repo/semantics/conferenceObjectinfo:eu-repo/semantics/publishedVersionObjeto de conferenciahttp://purl.org/coar/resource_type/c_5794info:ar-repo/semantics/documentoDeConferenciaapplication/pdfhttp://sedici.unlp.edu.ar/handle/10915/24840spainfo:eu-repo/semantics/openAccesshttp://creativecommons.org/licenses/by-nc-sa/2.5/ar/Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Argentina (CC BY-NC-SA 2.5)reponame:SEDICI (UNLP)instname:Universidad Nacional de La Platainstacron:UNLP2025-09-17T09:39:26Zoai:sedici.unlp.edu.ar:10915/24840Institucionalhttp://sedici.unlp.edu.ar/Universidad públicaNo correspondehttp://sedici.unlp.edu.ar/oai/snrdalira@sedici.unlp.edu.arArgentinaNo correspondeNo correspondeNo correspondeopendoar:13292025-09-17 09:39:26.86SEDICI (UNLP) - Universidad Nacional de La Platafalse
dc.title.none.fl_str_mv IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
title IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
spellingShingle IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
Arroyo, Marcelo
Ciencias Informáticas
Educación
Code generation
Dynamic programming
Compilers
title_short IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
title_full IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
title_fullStr IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
title_full_unstemmed IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
title_sort IBURG: su aplicación para la generación de generadores de código en un proyecto de compiladores
dc.creator.none.fl_str_mv Arroyo, Marcelo
Aguirre, Jorge
author Arroyo, Marcelo
author_facet Arroyo, Marcelo
Aguirre, Jorge
author_role author
author2 Aguirre, Jorge
author2_role author
dc.subject.none.fl_str_mv Ciencias Informáticas
Educación
Code generation
Dynamic programming
Compilers
topic Ciencias Informáticas
Educación
Code generation
Dynamic programming
Compilers
dc.description.none.fl_txt_mv En numerosas carreras de Ciencias de Computación se incluye la realización de un proyecto de diseño e implementación de un compilador. La etapa de generación de código, por su complejidad y por la extensión global del proyecto, suele simplificarse adoptando como lenguaje objeto el mismo lenguaje en que se realiza el desarrollo o el de alguna máquina abstracta definida ad hoc. Sin embargo desarrollar esta etapa en condiciones reales, para una arquitectura existente, es de gran valor formativo y quizás la mejor forma de enfrentar al alumno con la práctica de la programación a bajo nivel. En este trabajo se discute la aplicación de las técnicas usadas en la construcción de generadores de código y el uso de una herramienta iburg, cuya utilización permitió, generar código assembler optimizante para el ambiente linux como última etapa de un compilador Mini c. Trabajo realizado en una asignatura cuatrimestral. Generalmente un compilador genera una representación intermedia del programa fuente para realizar las operaciones requeridas en la generación de código optimizante. Esto permite además abstraerse de la plataforma (hardware y sistema operativo) sobre el cual se desea generar el código objeto, permitiendo desarrollar un front-end portable. El front_end utiliza un (o viarios) back_end que se encarga de la generación de código final para una plataforma determinada. El código intermedio generado, generalmente tiene la forma de árbol, ya que se asemeja a la forma del árbol de parsing construido por el reconocedor sintáctico (parser). Para producir código objeto a partir de esta representación es conveniente utilizar alguna herramienta que permita realizar un reconocimiento de patrones (subárboles) que se relacionan con las entidades semánticas mínimas y seleccionar las instrucciones de máquina más apropiadas que las implementen, esto es, secuencias de instrucciones que tengan el menor costo ( según un criterio de uso de recursos preestablecido). Un recorrido posible para un árbol no necesariamente es el que lleva a producir código de menor costo (en términos de uso de recursos), por lo cual es necesario evaluar todos los posibles recorridos para determinar el óptimo. En este artículo se analizará la herramienta, iburg, que toma como entrada una gramática libre de contexto que describe el árbol de representación elegido (aumentada con información de costos) y genera como salida un reconocedor de patrones (parser o BURS authomata) sobre el árbol. El reconocedor generado realiza una cobertura óptima en término de los costos asociados para un nodo del árbol dado como entrada. La determinación de recorridos (covers) se realiza en el momento en que se construye el autómata BURS (Bottom-Up Rewrite System) utilizando programación dinámica. Esto permite que el autómata generado sea extremadamente rápido y simple. Se ven ejemplos de aplicaciones para selección de instrucciones, inferencia de tipos y simplificaciones de árboles y se describe la experiencia realizada.
VI Ateneo de Profesores Universitarios de Computación (APUC)
Red de Universidades con Carreras en Informática (RedUNCI)
description En numerosas carreras de Ciencias de Computación se incluye la realización de un proyecto de diseño e implementación de un compilador. La etapa de generación de código, por su complejidad y por la extensión global del proyecto, suele simplificarse adoptando como lenguaje objeto el mismo lenguaje en que se realiza el desarrollo o el de alguna máquina abstracta definida ad hoc. Sin embargo desarrollar esta etapa en condiciones reales, para una arquitectura existente, es de gran valor formativo y quizás la mejor forma de enfrentar al alumno con la práctica de la programación a bajo nivel. En este trabajo se discute la aplicación de las técnicas usadas en la construcción de generadores de código y el uso de una herramienta iburg, cuya utilización permitió, generar código assembler optimizante para el ambiente linux como última etapa de un compilador Mini c. Trabajo realizado en una asignatura cuatrimestral. Generalmente un compilador genera una representación intermedia del programa fuente para realizar las operaciones requeridas en la generación de código optimizante. Esto permite además abstraerse de la plataforma (hardware y sistema operativo) sobre el cual se desea generar el código objeto, permitiendo desarrollar un front-end portable. El front_end utiliza un (o viarios) back_end que se encarga de la generación de código final para una plataforma determinada. El código intermedio generado, generalmente tiene la forma de árbol, ya que se asemeja a la forma del árbol de parsing construido por el reconocedor sintáctico (parser). Para producir código objeto a partir de esta representación es conveniente utilizar alguna herramienta que permita realizar un reconocimiento de patrones (subárboles) que se relacionan con las entidades semánticas mínimas y seleccionar las instrucciones de máquina más apropiadas que las implementen, esto es, secuencias de instrucciones que tengan el menor costo ( según un criterio de uso de recursos preestablecido). Un recorrido posible para un árbol no necesariamente es el que lleva a producir código de menor costo (en términos de uso de recursos), por lo cual es necesario evaluar todos los posibles recorridos para determinar el óptimo. En este artículo se analizará la herramienta, iburg, que toma como entrada una gramática libre de contexto que describe el árbol de representación elegido (aumentada con información de costos) y genera como salida un reconocedor de patrones (parser o BURS authomata) sobre el árbol. El reconocedor generado realiza una cobertura óptima en término de los costos asociados para un nodo del árbol dado como entrada. La determinación de recorridos (covers) se realiza en el momento en que se construye el autómata BURS (Bottom-Up Rewrite System) utilizando programación dinámica. Esto permite que el autómata generado sea extremadamente rápido y simple. Se ven ejemplos de aplicaciones para selección de instrucciones, inferencia de tipos y simplificaciones de árboles y se describe la experiencia realizada.
publishDate 1998
dc.date.none.fl_str_mv 1998-10
dc.type.none.fl_str_mv info:eu-repo/semantics/conferenceObject
info:eu-repo/semantics/publishedVersion
Objeto de conferencia
http://purl.org/coar/resource_type/c_5794
info:ar-repo/semantics/documentoDeConferencia
format conferenceObject
status_str publishedVersion
dc.identifier.none.fl_str_mv http://sedici.unlp.edu.ar/handle/10915/24840
url http://sedici.unlp.edu.ar/handle/10915/24840
dc.language.none.fl_str_mv spa
language spa
dc.rights.none.fl_str_mv info:eu-repo/semantics/openAccess
http://creativecommons.org/licenses/by-nc-sa/2.5/ar/
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Argentina (CC BY-NC-SA 2.5)
eu_rights_str_mv openAccess
rights_invalid_str_mv http://creativecommons.org/licenses/by-nc-sa/2.5/ar/
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Argentina (CC BY-NC-SA 2.5)
dc.format.none.fl_str_mv application/pdf
dc.source.none.fl_str_mv reponame:SEDICI (UNLP)
instname:Universidad Nacional de La Plata
instacron:UNLP
reponame_str SEDICI (UNLP)
collection SEDICI (UNLP)
instname_str Universidad Nacional de La Plata
instacron_str UNLP
institution UNLP
repository.name.fl_str_mv SEDICI (UNLP) - Universidad Nacional de La Plata
repository.mail.fl_str_mv alira@sedici.unlp.edu.ar
_version_ 1843532067720134656
score 13.046268