procesador de c

11
PROCESADOR DE C El preprocesador de C o CPP es el MACRO PROCESSOR para el C y C+ + en lenguaje de programación de computadoras. El preprocesador proporciona la habilidad para la inclusión de header files,macro expansion,conditional compilation, y líneas de control. En cualquier implementación de C, esto es un programa separado invocado por el compilador como la primera parte de la traducción. El lenguaje de directivas de preprocesador es agnóstico a la gramática de C, por lo que el preprocesador de C también se puede utilizar de forma independiente para procesar otros tipos de archivos de texto. FASES: Pre procesamiento se define por la primera de cuatro (de ocho) fases de la traducción se especifica en el estándar de C. Reemplazo Trigraph: El preprocesador reemplaza secuencias Trigraph con los personajes que representan. Línea de empalme: las líneas de fuentes físicas que se continúan con escaparon secuencias de nueva línea se empalman para formar líneas lógicas. Tokenization: El preprocesador rompe el resultado en tokens de pre procesamiento y espacios en blanco. Sustituye comentarios con espacios en blanco. Expansión de Macro y manejo Directiva: se ejecutan las líneas directivas de preprocesamiento, como la inclusión de archivos y la compilación condicional. El preprocesador de macros y se expande al mismo tiempo, en la versión 1999 de la norma de C, se ocupa de los operadores _Pragma. ¿Qué es un macro processor? Preprocessor En computer science un preprocesador es un programa que procesa estas entradas de datos para producir salidas que son usadas como entradas de otros programas. La salida se dice que es una forma pre-procesado de los datos de entrada, que es a menudo usada para muchos programas subsecuentes como compilers. La cantidad y el tipo de procesamiento realizado depende de la

Upload: rob-ert

Post on 09-Dec-2014

118 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Procesador de c

PROCESADOR DE C

El preprocesador de C o CPP es el MACRO PROCESSOR para el C y C++ en lenguaje de programación de computadoras. El preprocesador proporciona la habilidad para la inclusión de header files,macro expansion,conditional compilation, y líneas de control.En cualquier implementación de C, esto es un programa separado invocado por el compilador como la primera parte de la traducción.

El lenguaje de directivas de preprocesador es agnóstico a la gramática de C, por lo que el preprocesador de C también se puede utilizar de forma independiente para procesar otros tipos de archivos de texto.

FASES:Pre procesamiento se define por la primera de cuatro (de ocho) fases de la traducción se especifica en el estándar de C.

Reemplazo Trigraph: El preprocesador reemplaza secuencias Trigraph con los personajes que representan.Línea de empalme: las líneas de fuentes físicas que se continúan con escaparon secuencias de nueva línea se empalman para formar líneas lógicas.

Tokenization: El preprocesador rompe el resultado en tokens de pre procesamiento y espacios en blanco. Sustituye comentarios con espacios en blanco.

Expansión de Macro y manejo Directiva: se ejecutan las líneas directivas de preprocesamiento, como la inclusión de archivos y la compilación condicional. El preprocesador de macros y se expande al mismo tiempo, en la versión 1999 de la norma de C, se ocupa de los operadores _Pragma.

¿Qué es un macro processor?

PreprocessorEn computer science un preprocesador es un programa que procesa estas entradas de datos para producir salidas que son usadas como entradas de otros programas. La salida se dice que es una forma pre-procesado de los datos de entrada, que es a menudo usada para muchos programas subsecuentes como compilers. La cantidad y el tipo de procesamiento realizado depende de la naturaleza del preprocesador; algunos preprocesadores sólo son capaces de realizar sustituciones textuales relativamente simples y expansiones macro, mientras que otros tienen el poder de los lenguajes de programación de full-fledged(pleno derecho).Un ejemplo común de programación informática es el procesamiento realizado en el código fuente antes del siguiente paso de compilación. En algunos lenguajes de programación (por ejemplo, C y PL / I) hay una fase de la traducción conocida como pre-procesamiento.

Lexical preprocessors

Preprocesadores léxicos son el nivel más bajo de preprocesadores, en la medida en que sólo requieren análisis léxico, es decir, que operan en el texto de origen, antes de cualquier análisis, mediante la realización de simple sustitución de secuencias de caracteres tokenizados para

Page 2: Procesador de c

otras secuencias de caracteres tokenizados, según a las reglas definidas por el usuario. Por lo general se llevan a cabo la sustitución de macros, la inclusión textual de otros archivos, y la compilación o la inclusión condicional.

C preprocessor

El ejemplo más común de esto es el preprocesador de C, que tiene líneas que comienzan con "#" como directivas. Debido a que no sabe nada sobre el lenguaje subyacente, su uso ha sido criticado y muchas de sus características incorporadas directamente en otros lenguajes.

Por ejemplo, los macros sustituidos por procesos agresivos en línea y plantillas, incluye a las importaciones de tiempo de compilación (esto requiere la preservación de la información en el código objeto, por lo que esta característica imposible de adaptar en otro lenguaje) conditional compilation is effectively accomplished with if-then-else and dead code elimination in some languages.

Other lexical preprocessors

Otros preprocesadores léxicos incluyen la m4 de propósito general, más comúnmente utilizado en multiplataforma construir sistemas como autoconf, y GEMA, un procesador de macros de código abierto que opera en los patrones de contexto. Preprocesadores sintácticos se introdujeron con la familia Lisp de lenguajes. Su función es la de transformar árboles de sintaxis de acuerdo con una serie de reglas definidas por el usuario. Para algunos lenguajes de programación, las reglas están escritas en el mismo idioma que el programa (reflexión en tiempo de compilación). Este es el caso de Lisp y OCaml. Algunos otros idiomas se basan en un lenguaje totalmente externa para definir las transformaciones, tales como el preprocesador XSLT para XML, o su homólogo de tipo estático CDuce.

Preprocesadores sintácticos se suelen utilizar para personalizar la sintaxis de un lenguaje, extender una lengua mediante la adición de nuevas primitivas o incrustar una programación Domain-Specific Language dentro de un lenguaje de propósito general.

Customizing syntax

Un buen ejemplo de personalización sintaxis es la existencia de dos sintaxis diferentes en el lenguaje de programación Objective Caml. [1] Los programas pueden ser escritos indistintamente utilizando la sintaxis "normal" o "la sintaxis revisada", y puede ser “pretty-printed”con cualquier sintaxis bajo demanda.

Del mismo modo, un número de programas escritos en OCaml personalizar la sintaxis de la lengua mediante la adición de nuevos operadores.

Extensión de un idioma

Los mejores ejemplos de la extensión del lenguaje a través de macros se encuentran en la familia Lisp de idiomas. Si bien las lenguas, por sí mismos, son los núcleos de tipo simple dinámicamente funcionales, las distribuciones estándar del régimen o de Lisp permiso de programación imperativa y orientada a objetos comunes, así como los tipos estáticos. Casi

Page 3: Procesador de c

todas estas funciones son ejecutadas por preprocesamiento sintáctica, aunque vale la pena notar que la "expansión de la macro" fase de compilación es manejado por el compilador de Lisp. Esto todavía puede ser considerada como una forma de procesamiento previo, ya que se lleva a cabo antes de que otras fases de compilación.

Del mismo modo, estáticamente verificado, se pueden añadir las expresiones regulares de tipo seguro o generación de código a la sintaxis y la semántica de OCaml a través de macros, así como micro-hilos (también conocidos como co-rutinas o fibras), mónadas o manipulación de XML transparente.

Especializada un idioma

Una de las características inusuales de la familia Lisp de las lenguas es la posibilidad de utilizar macros para crear un lenguaje de programación específico del dominio interno. Por lo general, en un proyecto basado en Lisp grande, un módulo puede estar escrito en una variedad de tales mini lenguajes, uno tal vez usando un dialecto basado en SQL de Lisp, otro escrito en un dialecto especializado para GUIs o bonito-impresión, etc Common Lisp de biblioteca estándar contiene un ejemplo de este nivel de abstracción sintáctica en la forma de la macro LOOP, que implementa una Algol-como minilenguaje para describir iteración complejo, mientras que todavía permite el uso de operadores Lisp estándar.

El preprocesador / idioma MetaOCaml proporciona características similares para exteriores Programación dominio específico Idiomas. Este preprocesador realiza la descripción de la semántica de un lenguaje (es decir, un intérprete) y, mediante la combinación de interpretación en tiempo de compilación y la generación de código, resulta que la definición en un compilador para el lenguaje de programación OCaml-y de que el lenguaje, ya sea a código de bytes o de código nativo.

Preprocesador de uso general

La mayoría de los preprocesadores son específicos de una tarea de procesamiento de datos en particular (por ejemplo, compilar el lenguaje C). Un preprocesador puede ser promovido como siendo de uso general, lo que significa que no está destinado a un uso específico o lenguaje de programación, y está destinado a ser utilizado para una amplia variedad de tareas de procesamiento de texto.

M4 es probablemente el ejemplo más conocido de este tipo de preprocesador de uso general, aunque el preprocesador C se utiliza a veces en una función específica no-C. Ejemplos:

Usando preprocesador de C para JavaScript preprocesamiento. [2]

utilizando M4 (véase el ejemplo en el artículo) o C preprocesador [3] como un motor de plantillas para la generación de HTML.

imake, hacer una interfaz mediante el preprocesador C, escrito para el sistema X Window, pero ahora en desuso en favor de automake.

grompp, un preprocesador para los archivos de entrada de simulación para GROMACS (un código rápido, gratuito y de código abierto para algunos problemas en la química

Page 4: Procesador de c

computacional) que llama al preprocesador de C del sistema (u otro preprocesador según lo determinado por el archivo de entrada de simulación) para analizar la topología, utilizando la mayoría de los # define y # incluye mecanismos para determinar la topología grompp eficaz en tiempo de ejecución

Digraphs and trigraphs

En la programación de computadoras, dígrafos y trígrafos son secuencias de dos y tres caracteres, respectivamente, que aparecen en el código fuente, que una especificación del lenguaje de programación requiere una implementación de dicho idioma a tratar como si se tratara de otro personaje.

Existen varias razones para el uso de dígrafos y trígrafos: teclados pueden no tener llaves para cubrir todo el conjunto de caracteres de la lengua, la entrada de caracteres especiales puede ser difícil, editores de texto pueden reservan algunos personajes para uso especial y así sucesivamente. Tri-grafos también podrían ser utilizados para algunas páginas de códigos EBCDIC que carecen de personajes como {y}.

HISTORY

El juego de caracteres básico del lenguaje de programación C es un subconjunto del conjunto de caracteres ASCII que incluye nueve caracteres que se encuentran fuera del conjunto de caracteres invariante ISO 646. Esto puede suponer un problema para la escritura de código fuente cuando la codificación (y posiblemente del teclado) que se utiliza no es compatible con cualquiera de estos nueve personajes. El comité ANSI C inventó trigraphs como una manera de entrar en el código fuente usando los teclados que soportan cualquier versión del juego de caracteres ISO 646.

COMPILERUn compilador es un programa informático (o conjunto de programas) que transforma el código fuente escrito en un lenguaje de programación (el idioma de origen) en otro lenguaje de programación (el idioma de destino, a menudo con un formato binario conocido como código objeto). La razón más común para que el deseo de transformar el código fuente es crear un programa ejecutable.

COMPILATION

Los compiladores habilitan el desarrollo de programas que son independientes de la máquina. Antes del desarrollo de FORTRAN (Fórmula traductor), el primer lenguaje de alto nivel, en la década de 1950, fue ampliamente utilizado depende de la máquina lenguaje ensamblador. Mientras que el lenguaje ensamblador produce programas más valiosos y reubicable que el código máquina en la misma arquitectura, tiene que ser modificado o reescrito si el programa se va a ejecutar en arquitectura diferente hardware.

Con el avance de los lenguajes de programación de alto nivel que siguieron FORTRAN, como COBOL, C y BASIC, los programadores pueden escribir programas de código independiente del equipo. Un compilador traduce los programas fuente de alto nivel en los programas en los

Page 5: Procesador de c

idiomas de destino de la máquina para los hardwares específicos. Una vez que se genera el programa de destino, el usuario puede ejecutar el programa

Strcuctur of a compiler

Compiladores programas fuente puente en lenguajes de alto nivel con el hardware subyacente. Un compilador requiere 1) determinar la corrección de la sintaxis de los programas, 2) la generación de código objeto correcto y eficiente, 3) la organización de tiempo de ejecución, y 4) la salida de formato de acuerdo con ensamblador y / enlazadores convencionales. Un compilador se compone de tres partes principales: el front end, la middle-end, y el back-end.

El front end comprueba si el programa está escrito correctamente en términos de la sintaxis del lenguaje de programación y la semántica. Se reconocen los programas Aquí legales e ilegales. Los errores se informaron, en su caso, de una manera útil. La verificación de tipos se realiza también mediante la recopilación de información de tipo. El front end tambien genera una representación intermedia o IR del código fuente para el procesamiento por the middle-end.

El middle end es donde la optimización se lleva a cabo. Transformaciones típicas de optimización son la eliminación de código inútil o fuera de cobertura, el descubrimiento y la difusión de los valores constantes, la relocalización de la computación a un lugar ejecutado con menos frecuencia (por ejemplo,fuera de un bucle), o la especialización de la computación basada en el contexto. La middle-end genera otro IR para el siguiente backend. La mayoría de los esfuerzos de optimización se centran en esta parte.

La back end se encarga de la traducción del IR de la middle-end en código ensamblador. La instrucción de destino (s) se elige para cada instrucción IR. Asignar distribuciones de registros del registro de procesador para las variables del programa siempre que sea posible. El backend utiliza el hardware de encontrar la manera de mantener las unidades de ejecución paralelas ocupado, llenando las ranuras de retardo, y así sucesivamente. Aunque la mayoría de los algoritmos de optimización están en NP (En teoría de la complejidad computacional, NP es una de las clases más fundamentales complejidad. La abreviatura se refiere NP a "tiempo polinómico no determinista"), técnicas heurísticas son bien desarrolladas.

COMPILER OUTPUT

Una clasificación de los compiladores es por la plataforma en la que realiza su código generado. Esto se conoce como la plataforma de destino.

Un compilador nativo o alojado es una salida que está destinado para ejecutarse directamente en el mismo tipo de ordenador y sistema operativo que el propio compilador se ejecuta en. La salida de un compilador cruzado está diseñado para ejecutarse en una plataforma diferente. Compiladores cruzados se utilizan a menudo en el desarrollo de software para sistemas embebidos que no están destinados para apoyar un entorno de desarrollo de software.

La salida de un compilador que produce código para una máquina virtual (VM) puede o no puede ser ejecutado en la misma plataforma que el compilador que lo produjo. Por esta razón,

Page 6: Procesador de c

estos compiladores no suelen clasificarse como compiladores nativos o cruz.

El lenguaje de bajo nivel que es el destino de un compilador puede ser en sí misma un lenguaje de programación de alto nivel. C, a menudo visto como una especie de ensamblador portable, también puede ser el idioma de destino de un compilador. Por ejemplo: Cfront, el compilador original para C + + utiliza C como idioma de destino. El C creado por un compilador tal generalmente no se piensa para ser leído y mantenido por los seres humanos. Así guión estilo y bastante código intermedio C son irrelevantes. Algunas características de C se convierten en una buena lengua de llegada. Por ejemplo: el código C con directivas # line se puede generar para apoyar la depuración de la fuente original.

MACRO

Una macro (abreviatura de "macroinstrucción", del Griego μακρο-"grande") en ciencias de la computación es una regla o patrón que especifica una secuencia de entrada determinada (a menudo una secuencia de caracteres) debe ser asignada a una secuencia de entrada de sustitución (a menudo una secuencia de caracteres) de acuerdo con un procedimiento definido. El proceso de asignación que crea una instancia (transformaciones) un uso macro en una secuencia específica se conoce como expansión de la macro. Una instalación para la escritura de macros se puede proporcionar como parte de una aplicación de software o como parte de un lenguaje de programación.

En el primer caso, las macros se utilizan para realizar tareas mediante la aplicación menos repetitivas. En este último caso, son una herramienta que permite a un programador para permitir la reutilización de código o incluso el diseño de lenguajes específicos de dominio.Las macros se utilizan para hacer una secuencia de instrucciones de computación disponibles para el programador como una sola instrucción de programa, por lo que la tarea de programación menos tediosa y menos propensa a errores (Por lo tanto, se les llama "macros", porque un gran bloque de código se puede ampliar de una pequeña secuencia de caracteres).

Macros permiten a menudo que los parámetros de posición o palabra clave que dictan lo que genera el programa ensamblador condicional y se han utilizado para crear programas completos o conjuntos de programas de acuerdo a variables tales como el sistema operativo, plataforma u otros factores. El término deriva de "instrucción macro", y tales expansiones se utilizaron originalmente en la generación de código en lenguaje ensamblador.

DIRECTIVE

En programación, el término Directiva se aplica en una variedad de formas que son similares al término comando. También se utiliza para describir algunas construcciones de lenguaje de programación (por ejemplo, las que especifican cómo un compilador o ensamblador deben procesar su entrada).Para distinguir una directiva de un comando o declaración, una directiva puede involucrar un pre o post procesador de comandos o macros. su segundo uso implica una declaración que afecta local o más opciones globales o que se aplica a un bloque de código de programación

Page 7: Procesador de c

pero por sí mismo no realiza ninguna operación. Este término puede ser utilizado para referirse

A las etiquetas de propiedad de terceros y comandos(o marcado) incrustados en el código que resulta de un proceso ejecutable adicional que se extiende el compilador existente, ensamblador y construcciones de lenguaje presentes en el entorno de desarrollo.

Lenguaje assembler

Un lenguaje ensamblador es un lenguaje de programación de bajo nivel para un ordenador u otro dispositivo programable, en el que hay una correspondencia muy fuerte (por lo general de uno a uno) entre el lenguaje y las instrucciones de código de máquina del arquitectura. Cada lenguaje ensamblador es específico de una arquitectura de computadora en particular, a diferencia de la mayoría de los lenguajes de programación de alto nivel, que suelen ser portable a través de múltiples sistemas.

El lenguaje ensamblador se convierte en código máquina ejecutable por un programa de utilidad que se refiere como un ensamblador, el proceso de conversión se conoce como assembly(conjunto), o ensamblar el código.

El lenguaje ensamblador utiliza una regla mnemotécnica para representar a cada operación de la máquina de bajo nivel o opcode. Algunos códigos de operación requieren uno o más operados, como parte de la instrucción, y la mayoría de los ensambladores pueden tener etiquetas y símbolos como operandos para representar las direcciones y constantes, en lugar de código difícil en el programa. Ensambladores Macro incluyen un macroinstrucción facilitando a que el texto en lenguaje ensamblador pueda ser pre-asignado a un nombre, y que el nombre se puede utilizar para insertar el texto en otro código. Muchos ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, para controlar el proceso de montaje, y para facilitar la depuración

ASSEMBLER (ensamblador)

Un ensamblador crea código objeto traduciendo mnemónicos de instrucciones de montaje en los códigos de operación, y mediante la resolución de nombres simbólicos para direcciones de memoria y otras entidades. [1] El uso de referencias simbólicas es una característica clave de los ensambladores, ahorrando tediosos cálculos y actualizaciones de dirección manual después de las modificaciones del programa. La mayoría de los ensambladores también incluyen facilidades para la realización de macro textual sustitución-por ejemplo, para generar secuencias cortas comunes de instrucciones como en línea, en lugar de llamadas subrutinas.

Ensambladores han estado disponibles desde la década de 1950 y es mucho más fácil de escribir que los compiladores para lenguajes de alto nivel, ya que cada mnemónico combinación modo de instrucción / dirección se traduce directamente en un solo código de operación en lenguaje de máquina. Ensambladores modernos, especialmente para las arquitecturas RISC, como SPARC o Power Architecture, así como, optimizar la planificación de instrucciones x86 y x86-64 para explotar el oleoducto CPU de manera eficiente