Sie sind auf Seite 1von 14

Introduccin

1. Convenciones tipogrficas
PCLEX es en gran medida independiente de las caractersticas del hardware que se est
ejecutando. Ha sido adaptado para la mayora de sistemas microinformticos y puede ser
fcilmente adaptado para otros.
Por lo tanto, la presentacin tambin es en gran medida independiente del sistema. Cuando se
utiliza un sistema especfico, se utiliza un IBM-PC/XT ejecuta MS-DOS. Hay consejos sobre las
caractersticas que dependen del sistema de PCLEX, incluyendo la instalacin y los requisitos de
hardware y software.
En este manual, los siguientes tipos de letra y convenciones de sintaxis se utilizan para ayudar a la
claridad
1). Palabras o frases que tienen importantes significados tcnicos o que tienen interpretaciones
especiales en PCLEX se destacaron en su primera aparicin. Definiciones y / o explicaciones se dan
en este momento en el estilo de texto normal.
Ejemplo: PCLEX programas estn escritos en el lenguaje de descripcin de un escner o SDL, que
es un lenguaje de alto nivel para las especificaciones lxicas de entrada de ordenador.
2). Al ilustrar las interacciones usuario-mquina, el usuario introduce texto est en cursiva.
Mensajes o instrucciones de la computadora estn en texto normal. Un retorno de carro se
representa como <CR>.
Ejemplo: C> pclex example.l <CR>
3). Muestra, como diagramas o listados de cdigo, se imprimirn en una fuente similar a la
mquina de escribir. Sern sangra que le ayudarn a distinguir del resto del texto.
Ejemplo: El siguiente es un pequeo escner archivo de descripcin que se pueden ver ms tarde
en los tutoriales:
carta [a-zA-Z]
%%
{Letter} + ECHO;
. ;
4). Caracteres significado especial o cadenas sern en negrita para ayudarle a distinguir del resto
del texto.
Ejemplo: Expresin regular [a-zA-Z] coincide con cualquier letra.

2. Ejemplos
Este manual contiene tres ejemplos: Programa Word Count (Captulo V), fecha Programa
Analizador de Sintaxis C Programa (Captulo VII), y ANSI (Captulo VIII). El cdigo fuente de estos
ejemplos son en el PCLEX [DOS-OS / 2] Kit de herramientas de discos bajo \ WC, FECHAS \ y \ ansiC
respetable. Cada directorio es autnomo, incluyendo todos los archivos de cdigo fuente, un
Makefile para el estilo UNIX que los programas y archivos MAKE archivos de MAKE 's Microsoft C
7.0. El disco contiene un ejemplo ms llamado Dgrafo en \ directorio dgrafo. El propsito del
dgrafo se explica en Captulo X, sin embargo, el ejemplo completo no se incluye en este manual.








II . RESUMEN DE PCLEX
En este captulo se ofrece una breve visin general de PCLEX , su origen , su historia y evolucin,
as como una descripcin de su funcionamiento a un nivel abstracto .
1 . Historia PCLEX es un descendiente de FLEX ( LEX Fast) , que es una versin mejorada de LEX .
LEX primero fue descrito pblicamente en un artculo de Michael Lesk y Eric Schmidt. El artculo es
uno de los ms ampliamente citado en la literatura del ordenador . Esa versin de LEX fue
diseado, codificado y depurado por Eric Schmidt , basado en las ideas de Stephen C.
Johnson and Alfred Aho . FLEX fue programado por Vern Paxson y Kevin Gong , basado en ideas
desarrolladas por Van Jacobson. FLEX aade algunas caractersticas adicionales tiles y aceler
significativamente tanto los escneres generados y la generacin de escner.
LEX (y ms recientemente FLEX ) ha sido parte de las herramientas de lenguaje estndar que se
suministran en los entornos de sistema operativo UNIX .
Durante la ltima dcada , numerosos proyectos de software , tanto grandes como pequeos, han
sido desarrollados con LEX . Como tal , LEX ha sido histricamente una de las herramientas ms
valiosas disponibles para los desarrolladores de aplicaciones y lenguaje de programacin. LEX
puede reducir drsticamente el tiempo y la complejidad que normalmente participan en el
programa de desarrollo y compilador. Herramientas de escritura como el compilador LEX
proporcionan a los desarrolladores una poderosa ayuda a la escritura de compiladores, intrpretes
de comandos, y otros programas de introduccin de texto.
Debido LEX es una herramienta tan til, muchos desarrolladores de software han portado a sus
propios sistemas, o re- implementado en sus propios entornos de software. PCLEX es un ejemplo
de una aplicacin de FLEX en microcomputadoras (IBM PC y Macintosh).
PCLEX se ha diseado e implementado para ser compatible hacia arriba con LEX y FLEX.
Todas las caractersticas de LEX se retienen en PCLEX, incluyendo las mejoras de FLEX. Aunque
PCLEX tiene una interfaz de programacin casi idntica a LEX, hay bastantes diferencias, que se
harn evidentes a medida que avanzamos.
2. Lo PCLEX Tiene PCLEX es un programa informtico . Como la mayora de otros programas,
toma de entrada, calcula los valores, y produce una salida. Se trata de un traductor, es decir, su
entrada est en un idioma (SDL) y su salida est en otro (C). Generadores programa son programas
que traducen de un idioma de alto nivel que se adapte a un rea de programacin o informtica a
un lenguaje de bajo nivel, por lo general un lenguaje de programacin de propsito general, como
C. LEX y YACC , que es el acrnimo de "otra Compiler - Compiler " , son programas generadores
para escribir compiladores . Los compiladores son traductores de una programacin idioma a un
idioma muy bajo nivel como el lenguaje ensamblador o lenguaje de mquina (es decir , el cdigo
objeto) . PCLEX est escrito utilizando PCYACC y s mismo.
SDL est diseado para describir la entrada de texto de un programa a nivel de lxico, es decir, las
palabras bsicas y smbolos del idioma de entrada. SDL es un lenguaje para describir lenguajes, un
meta-lenguaje. Un lenguaje escrito se expresa como una cadena de caracteres.
SDL est diseado para describir la entrada de texto de un programa a nivel de lxico, es decir, las
palabras bsicas y smbolos del idioma de entrada. SDL es un lenguaje para describir lenguajes, un
meta-lenguaje. Un lenguaje escrito se expresa como una cadena de caracteres.
Personajes dividen en varios grupos amplios: por ejemplo, letras, nmeros y signos de puntuacin.
Identificadores y palabras clave o reservada se construyen a partir de los personajes de acuerdo a
la convencin decidida por el diseador del lenguaje. Por ejemplo, los identificadores en C pueden
contener el carcter de subrayado ('_'). FORTRAN y Pascal identificadores se limitan a una letra
inicial y las letras y dgitos adicionales.


III . LINEA Y OPCIONES DE COMANDO
Este captulo explica cmo ejecutar PCLEX , sus convenciones de nombre de archivo y las opciones
de lnea de comandos . PCLEX es la lnea de rdenes y se puede ejecutar cualquiera de los
procedimientos por lotes o desde el smbolo del sistema de otros programas.
1 . Formato de lnea de comandos
PCLEX conserva la lnea de comandos de PCYACC .
PCLEX [opciones ] <sdf_name>
Cuando <sdf_name> es el nombre de un archivo de descripcin del escner ( SDF ) y [opciones ]
representa cero o ms opciones de lnea de comandos . Si PCLEX se invoca sin argumentos, se
emite un breve mensaje informndole sobre el formato de lnea de comandos correcta.
1.1 Convenciones de nombre de archivo
El <sdf_name> puede ser cualquier nombre legal de MS- DOS. Por razones de coherencia y
claridad, se recomienda que elija una extensin y se adhieren a ella. Todos los ejemplos de este
manual utilizan la extensin. "L". El nombre predeterminado del archivo de salida es el nombre
base (el nombre de archivo sin extensin), adems de la extensin". C". Por ejemplo, si el nombre
de archivo de entrada es " EXAMPLE.L", el nombre de archivo de salida es "example.c " . El nombre
del archivo de salida puede cambiarse con las opciones "-c " y "- C" (ver la siguiente seccin).
1.2 Opciones de lnea de comandos
Opciones de lnea de comandos se utilizan para anular acciones predeterminadas o cambie las
convenciones de nombre de archivo. Las opciones disponibles son:
-c: Esta opcin prevalece sobre el nombre del archivo de salida por defecto C, En lugar de utilizar
el nombre base del archivo de descripcin de escner de entrada ms la extensin. "C",
PCLEX utiliza " YYLEX.C ", como el escner de nombre de archivo fuente de salida.
-C <cf> : Like- c , esta opcin reemplaza el nombre del archivo de salida por defecto C , pero utiliza
el nombre de archivo proporcionado por el usuario en <cf> .
- h: Muestra una pantalla de ayuda.
-i : Construir un escner de maysculas y minsculas. El caso de que los patrones sean ignorados y
patrones coinciden con independencia de caso. El texto encontrado en "yytext" , el puntero de
carcter interno definido sealando el token de entrada emparejado, no se altera, la causa original
de la entrada del escner est conservado .
-n : Suprimir directivas # line en el archivo de origen escner de salida . Esta opcin es til si usted
est tratando de usar un depurador de cdigo fuente. En el funcionamiento normal el archivo de
origen escner de salida de la # lnea para hacer la referencia a la de archivo de descripcin
scanner original, esto normalmente hace que el cdigo fuente depuradores como CodeView para
generar resultados extraos.
-p <pf> : Utilice el usuario siempre esqueleto en <pf> escner en lugar del predeterminado. Esta
opcin se puede utilizar para generar analizadores en C + +.
- s : Esta opcin suprime la regla por defecto ( que la entrada sin igual se escribir en "stdout").
Con esta opcin, si el analizador encuentra entrada que no se corresponde por las normas, el
programa de escner se cierra con un "scanner pclex atascado" mensaje.
Slo con la opcin "- c " y "- C" Opciones distinguen entre maysculas y minsculas. El resto es el
mismo para ambos superior y minsculas. Por ejemplo, "pclex - h" y "pclex - H" son equivalentes .






2. Uso de las opciones de lnea de comandos
En esta seccin se muestra cmo utilizar las opciones de lnea de comandos. En el ejemplo
siguiente,
"EXAMPLE.L " , se utiliza en esta seccin:
carta [a- zA -Z ]
% %
{letter } + ECHO ;
. ;
Sin opciones, PCLEX escribe el archivo de salida C a "example.c".
2.1 Anulacin de Convenciones para los archivos de salida C ( -c y-C ) . El "-c " y "- C" opciones
tienen prioridad sobre la salida C convencin nombre de PCLEX. Con la opcin "-c ", la salida se
escribe " YYLEX.C". Por ejemplo:
C> pclex -c ejemplo. crea " YYLEX.C " en el directorio actual.
La opcin "- C" le permite especificar el nombre del archivo de salida. Por ejemplo:
C> ejemplo pclex - Canything.c . crea " ANYTHING.C " en el directorio actual .

2.2 Pregunta PCLEX de Ayuda ( -h o -H )
Las dos opciones de ayuda, "-h " y "- H", hacen lo mismo. Piden PCLEX para mostrar un mensaje de
ayuda en la pantalla. Esta pantalla es til cuando usted est aprendiendo primero a usar PCLEX y
ms tarde es un recordatorio til para opciones que se utilizan con poca frecuencia.
C > pclex - h
muestra el siguiente mensaje :
Uso: opciones pclex escner.
Opciones disponibles:
-c: uso de archivos " yylex.c " para la salida C
-Cf : utilizar el archivo f para la salida C
-h : muestra este mensaje de ayuda
-i : maysculas y minsculas
-n : no generan ' # line ' Directiva de la produccin
-pf : Uso esqueleto f como controlador del escner
- s : suprimir la salida del escner y C> pclex -h ejemplo . muestra el mensaje de ayuda y genera el
escner example.c archivo de origen.
2.3 Generar escner distinguir maysculas de minsculas (-i o -I)
Normalmente, PCLEX genera escner que tratan superior y las letras minsculas como algo
distinto. Por ejemplo, el modelo "abc" no coincidir con " ABC". Esta opcin le dice PCLEX para
construir un escner de maysculas y minsculas. El caso de las letras en los patrones de entrada
PCLEX y el escner se tendr en cuenta las normas y se comparar con independencia del caso. El
escner simplemente convierte todas las letras minsculas. El texto encontrado en " yytext "
tendr caso preservada.
La siguiente declaracin
carta [a- zA -Z ]
puede ser reescrito como
carta [a- z]
o
letra [ A- Z]
con el mismo comportamiento scanner si se utiliza la lnea de comandos:
C> pclex-i example.l

2.4 Suprimir directivas # linae en el escner ( -n o -N)
Normalmente, las directivas # linea se colocan en el archivo de origen escner de salida de C . Para
proporcionar una forma de la correlacin de los nmeros de lnea en los mensajes de error del
compilador con la lnea original en la entrada archivo de definicin de escner. Esta opcin hace
que las directivas # linea se omitan algunos depuradores de nivel de fuente manejan directivas #
linea incorrectamente.
2.5 Anulacin omisin Escner Skeleton (-p o -P)
Normalmente, el analizador generado se basa en el esqueleto escner predeterminado. El C
cdigo fuente para el esqueleto por defecto de un programa de escner es interno a PCLEX, la " -P
" opcin permite un esqueleto escner personalizada se utilice. La forma del escner esqueleto se
explica en el Apndice C. El valor predeterminado esqueleto C archivo de origen " LEXSCAN.C "
utilizado para construir el esqueleto interno est en el directorio \ PCLEX , disponible para
personalizacin. Por ejemplo :
C> pclex example.l y C> pclex - plexscan.c example.l son equivalentes y, C> pclex - pmyscan.c
example.l usar MYSCAN.C para producir example.c .
2.6 Suprimir la accin predeterminada ( - s o - S )
Cada pieza de introduccin de texto del escner que se corresponde con un patrn especificado
en el escner archivo de descripcin tiene una accin asociada. Para que el texto de entrada del
escner no reconozca cualquier patrn, se toma la accin predeterminada. Normalmente, la
accin predeterminada es copiar el texto sin igual a la salida . Las opciones " -s " y "- S " suprimen
la accin predeterminada y tratamiento de texto de entrada sin igual como un error: el escner
muestra el mensaje " scanner pclex atascado "en el dispositivo de errores estndar ( normalmente
la pantalla) y salidas.
2.7 Apoyo Exterior del 8 bits juego de caracteres ASCII ( -8 )
Por defecto PCLEX genera escner de caracteres de 8 bits, que lee los archivos de entrada de
escritos en smbolos en el juego de caracteres ASCII de 8 bits . Con la opcin -8 , PCLEX generar 7
bits escner de carcter que puede leer archivos de entrada escritos en smbolos del ASCII de 7
bits conjunto de caracteres . Si define caracteres conjunto hi - bits en el archivo de definicin
lxica ( . L ) , debe definir las normas con caracteres octales , es decir , los personajes anteriores
octal 177 ( 8 ) deben ser definido como \ 0200 [ 200 ( 8 ) ] .


















IV . REVISION DE CONCEPTOS BSICOS
Este captulo presenta los conceptos bsicos relacionados con PCLEX como equipo lenguajes de
programacin , traductores, intrpretes, compiladores , analizadores lxico , la gramtica de las
lenguas y expresiones regulares . Tambin se explican los trminos tcnicos bsicos utilizados en
los captulos posteriores. Algunos trminos se enumeran a prepararse para una discusin ms
formal de esos temas en los prximos captulos
1 . Qu es un lenguaje de programacin
Ordenadores hace una variedad abrumadora y constante expansin de las tareas. Sin embargo, las
computadoras no son inteligentes. Se debe decir cmo hacer cada tarea con un conjunto de
instrucciones paso a paso, llamados programas. Para hacer estas seales aparentes, alguien tiene
que trabajar la secuencia de pasos para realizar la tarea en detalle y presentar este programa paso
a paso a la computadora en un lenguaje de programacin. Un lenguaje de programacin es un
lenguaje artificial que se utiliza para escribir las instrucciones detalladas necesarias para la
realizacin de cualquier tarea por el ordenador. Programas de cualquier duracin son las formas
bsicas en las que estas instrucciones se presentan a la computadora para su ejecucin.
Hay dos grandes clases de lenguajes de programacin: lenguajes de bajo nivel como el lenguaje
mquina y ensamblador que estn instruccin de mquina orientada y lenguajes de alto nivel
como C , Basic y Pascal que son en gran medida independientes de la mquina y se orientan hacia
las operaciones aritmticas y lgicas. El lenguaje de mquina es directamente ejecutable por el
ordenador. Mapas lenguaje ensamblador directamente en lenguaje de mquina y la traduccin es
rpido y fcil.
2 . Qu es un lenguaje de programacin Traductor
Una computadora puede entender slo directamente los programas escritos en un lenguaje
propio, llamado lenguaje de mquina , un tipo de lenguaje de bajo nivel. Programas de lenguaje de
mquina se escriben en dgitos binarios. Lenguajes de mquina son muy primitivos . Escribir
programas en lenguaje de mquina es tedioso y muy propenso a errores. Poco despus de la
invencin de la computadora, se desarrollaron lenguajes simblicos para cambiar parte de la carga
de la programacin de la computadora en s misma . En lugar de escribir el programa en dgitos
binarios , nombres significativos ( mnemnicos ) se les dio a cada una de las instrucciones de la
mquina y el programa a continuacin, se puede escribir de una manera ms fcil de leer forma
simblica . A continuacin, la traduccin tiene que hacer para traducir los programas escritos en
lenguajes simblicos a los programas escritos en lenguajes de mquina . Al principio, la traduccin
fue hecha a mano. Ms tarde, un programa, llamado traductor, fue escrito en el lenguaje de
mquina para traducir programas lingsticos simblicos a los programas de lenguaje de mquina .
Los primeros lenguajes simblicos eran todava muy orientado al conjunto de instrucciones de la
mquina ( el repertorio del equipo de las acciones bsicas ) . Son llamados lenguajes
ensambladores , otro tipo de lenguaje de bajo nivel , y el traductor se denomina ensamblador. A la
inversa, que los traductores de lenguaje de mquina translate programas en lenguaje
ensamblador se llaman desensambladores.









3 . Cules son Compiladores e Intrpretes
La traduccin al lenguaje mquina no se limita slo a lenguajes de bajo nivel . Un lenguaje de alto
nivel describe un programa en los trminos que se adapten mejor a la tarea en procesos del
pensamiento humano y de la mano . Los programas escritos en lenguajes de alto nivel tienen dos
modos diferentes de ejecucin : ejecucin interpretado y ejecucin compilado .
Los compiladores son traductores entre lenguajes de alto nivel y lenguajes de bajo nivel. Un
compilador traduce el programa fuente a partir de un lenguaje de alto nivel a un programa objeto
en un lenguaje de bajo nivel (ya sea en lenguaje ensamblador o lenguaje de mquina ) . El idioma
en que estn escritos los programas de cdigo se conoce como el idioma de origen y el idioma en
que se componen los programas objeto se conoce como el lenguaje objeto. Un preprocesador
traduce de un lenguaje de alto nivel a un lenguaje similar . Por lo general , el lengua objeto del
preprocesador es un subconjunto de su lengua de origen . Modo de ejecucin Compilado se divide
en dos fases : una fase de compilacin y una fase de ejecucin . durante la compilacin, el
compilador reconoce por primera vez el programa fuente de entrada escrito en el idioma de
origen y luego redacta un programa objeto equivalente. escrita en la lengua objeto. En la fase de
ejecucin , se ejecuta el programa objeto (en lenguaje de mquina ) .
Los programas pueden ser escritos que llevan a cabo las acciones del programa de idiomas de
origen directamente en lugar de primero a traducir a lenguaje de mquina. Este programa se llama
un intrprete. Intrpretes omitir el paso de compilacin . El ordenador ejecutar el programa en
lenguaje de mquina intrprete y el intrprete ejecuta el programa de idiomas de origen. Esta
capa adicional de programa ralentiza la ejecucin del programa fuente. Intrpretes eliminar el
paso de compilacin del habitual ciclo editar -compilar -debug del desarrollo. En el modo de
ejecucin interpretado , sentencias de programa se descodifican y se ejecutan uno a la vez . Cada
paso incluye la traduccin de una declaracin seguida de las acciones de mquinas adecuadas
dictadas por la declaracin.
4 . Gramtica de la Lengua
Un lenguaje de programacin se puede definir en un nmero de maneras , algunos otros formales
y rigurosa , casuales e ilustrativo . Una pequeo lengua puede tener un nmero finito de
programas y el lenguaje se podra definir al enumerar a todos. Un mtodo ms general para
describir la gramtica del lengua , el conjunto de reglas que describen lo que las estructuras y
construcciones vlidos son y cmo se combinan . Los lenguajes formales , lenguajes definidos con
rigor matemtico , ofrecen una solucin al problema de describir infinitos lenguajes de una
manera concisa , utilizando slo un nmero finito de smbolos. Las normas para la definicin
precisa de los lenguajes de programacin constituyen lo que se llama las gramticas formales.
Segn Noam Chomsky, quien es bien conocido por la comunidad informtica por sus
contribuciones al estudio de los lenguas oficiales , hay cuatro clases de gramtica para generar
lenguajes en cuatro niveles. Las gramticas se enumeran de acuerdo con el aumento del poder de
la descripcin y la complejidad de la siguiente manera : gramticas regulares , gramticas libres de
contexto , gramticas sensibles al contexto y gramticas sintagmticas . La investigacin posterior
ha identificado cuatro tipos correspondientes mquinas abstractas, que pueden reconocer las
cadenas escritas en los lenguajes generados por sus respectivas gramticas . En correspondencia
con las gramticas mencionadas anteriormente , estas mquinas abstractas o autmatas son:
autmata de estado finito , empujar hacia abajo autmata lineal acotado autmata, y la mquina
de Turing .




Gramticas regulares son el tipo ms simple de gramticas , y se pueden utilizar para una amplia
variedad de aplicaciones . A pesar de que son un poco demasiado simple para describir lenguajes
de programacin de prcticas , que son buenos para la definicin de reglas lxicas para los
compiladores . En el otro extremo del espectro estn las llamadas gramticas frase , que son ms
complicados y de gran alcance . Gramticas frase puede describir cualquier tarea que se puede
hacer con un ordenador .
Gramticas libres de contexto y sensibles al contexto son los ms utilizados para especificar
efectivamente lenguajes de programacin de una manera mecnica. Para la mayora de las
aplicaciones , las gramticas son sensible al contexto apropiado, ya que la mayora de los lenguajes
de programacin de uso prctico son sensibles al contexto . Sin embargo , cuando se considera la
complejidad computacional , gramticas contextfree son mucho ms fciles de manejar. Ellos
pueden ser implementados ms eficientemente como procedimientos mecnicos . Por lo tanto ,
se utilizan casi exclusivamente por ordenador Profesionales de las ciencias . La mayora de los
compiladores reales se escriben primero como independiente del contexto gramticas que se
traducen mecnicamente en los cdigos .
Al primer vistazo parece que la eleccin de contexto libre sobre contextual gran compromiso, ya
que la mayora de los lenguajes de programacin funcional son sensibles al contexto .
Sin embargo , es posible sealar a los componentes sensibles al contexto de los lenguajes de
programacin y tratar con ellos por separado de procesamiento pura sintaxis . La parte de la
sintaxis de cualquier idioma siempre es libre de contexto . Una prctica comn es cambiar el deber
de procesar componentes sensibles al contexto a una frase llamada semntica -anlisis.
Una gramtica define un lenguaje , explicando que las oraciones se pueden formar . Consta de
cuatro componentes , que son los terminales, los no terminales, las reglas de reescritura y de la
terminal de smbolo de inicio , tambin conocidos como tokens, son los elementos bsicos de
construccin de programas. Son smbolos constantes debido a que cada smbolo representa a s
misma . En un lenguaje de programacin , smbolos terminales se utilizan para escribir programas .
Utilizando el lenguaje C como ejemplo, palabras clave, como si , entonces , de lo que, break,
continue , vuelva etc , constantes , tales como 10 , 2.5, ' y', "text -string" , etc , y los identificadores
, tales como line_count , line_buffer etc, todos ellos smbolos terminales . Los smbolos terminales
no se explican con ms detalle en la gramtica , sino que son el alfabeto y las palabras en el que se
escriben las frases de la lengua, que la gramtica describe . Un alfabeto es un conjunto finito de
smbolos , una palabra es una secuencia de smbolos alfabticos ; una oracin es una secuencia de
palabras que comprenden un lengua , y una lengua es un conjunto de palabras formado a partir
del alfabeto .
No terminales son variables sintcticas que pueden tomar diferentes valores de cadenas
compuestas de los no terminales y terminales. La presencia de los no terminales en una gramtica
por lo general corresponde a importantes construcciones lingsticas del lenguaje definido por la
gramtica . En un lenguaje de programacin como C tpica , datos declaracin de funcin de
declaracin, declaracin y expresin son normalmente reconocidos como los no terminales.
Producciones , o reglas de reescritura o reglas gramaticales, especifican la manera en que el
terminales y no terminales se pueden combinar para formar cadenas . Para cada no terminal, debe
existir una produccin , y cualquiera de las formulaciones de esta produccin puede ser sustituido
por el no terminal. Una regla de produccin de una gramtica consiste en una izquierda handside
(izq. ) y una mano del lado derecho ( RHS ), separados por una flecha :
U - > V
donde U y V son cadenas de smbolos gramaticales. Varios tipos de gramticas se hacen mediante
la imposicin de restricciones a la U y V. En particular, una regla gramatical en una gramtica libre
de contexto tiene la siguiente forma:
X -> X1 X2 ... Xn

donde el de la mano - lado izquierdo de la regla de gramtica , X , tiene que ser una sola , nico
smbolo no terminal, y cualquiera de los componentes de la mano derecha del lado de la regla de
gramtica , Xj , puede ser o bien un terminal o un terminal no . Incluso podra ser la mano
izquierda , X. El significado de una norma de este tipo de produccin en una gramtica libre de
contexto es que all donde se produce X , se puede volver a escribir la secuencia de los smbolos
gramaticales
X1 X2 ... Xn
en ese orden . Adems, siempre que la secuencia
X1 X2 ... Xn
se produce , puede ser reducido a X. El proceso de sustitucin de la LHS de una produccin por sus
RHS se llama un ( un paso ) la derivacin . La inversa de una derivacin , el proceso de sustitucin
de los RHS de una regla gramatical por su LHS , se llama una reduccin . La sustitucin de una
secuencia de smbolos de gramtica por un smbolo terminal no , o viceversa , utilizando reglas de
la gramtica se puede hacer sin consultar el texto circundante de smbolos gramaticales .
Esta es la razn libre de contexto se utiliza la frase . Una vez ms usando el lenguaje C como
ejemplo ( tomado del manual de referencia del lenguaje de programacin C ) :
comunicado -> compuesto declaracin
comunicado -> expresin ';'
Este ejemplo establece que una declaracin de C puede ser una sentencia compuesta o una
expresin terminado y coma.
El smbolo de inicio de una gramtica es un smbolo terminal no distinguido que normalmente
significa el concepto de sintaxis ms alto nivel de la lengua que se est definiendo . Este sera el
programa en el caso de los lenguajes de programacin , o frase en el caso de las lenguas naturales.

5. Gramtica y Lenguaje Regular
Gramticas regulares (gramticas RE), tambin llamadas gramticas de estados finitos (gramticas
FS), se utilizan para lenguajes regulares definidas que describen la estructura del texto en el nivel
del personaje.
Es decir, los smbolos terminales en un lenguaje regular son caracteres individuales. Por lo tanto, el
lado derecho en una gramtica regular contiene como mximo una tienda de gramticas no
terminal y regular a ser bastante grandes en tamao dependiendo del lenguaje ordinario por
definir. Sin embargo, todas las gramticas regulares pueden reducirse considerablemente en
tamao mediante el uso de las notaciones de expresiones regulares. En el otro lado, una expresin
regular se puede convertir en una gramtica regular mediante la expansin de acuerdo con el
significado de los operadores. Por lo tanto, los lenguajes regulares son a menudo descritos por
expresiones regulares en lugar de por las gramticas regulares.

6 . Expresiones regulares
Las expresiones regulares son especificadores de cadena o descripciones de patrones con una
descripcin del dibujo lenguaje, que es un lenguaje de especificacin muy conveniente para el
autmata de estados finitos realidad construida. Los personajes establecen utiliza en el lenguaje
es un subconjunto de caracteres ASCII . Descripciones del patrn se especifican dando un
significado especial para ciertos personajes llamados metacaracteres . Las siguientes reglas son
utilizados por PCLEX para formar una de las expresiones regulares . Las reglas son las mismas que
las reglas utilizadas por UNIX LEX y FLEX .
1 . Un nico carcter que no es un metacarcter es una expresin regular que coincide con el
carcter individual. Por lo tanto , las letras , nmeros y algunos caracteres especiales representan
a s mismos .
Por ejemplo, la expresin regular A coincide con el nico carcter A.
2 . Dos expresiones regulares concatenan forman una expresin regular que coincide con el patrn
que un partido de la primera expresin es seguido inmediatamente por un partido de la segunda .
Por ejemplo, la expresin regular P y expresiones regulares C forman un PC expresin regular que
coincide con la cadena PC.
3 . Dos expresiones regulares , separados por una barra vertical ( "|" ) forman un habitual
expresin coincide con la expresin ya sea anterior o la siguiente expresin regular.
Por ejemplo, la expresin regular RED | VERDE | BLUE coincide con alguna de las tres palabras ..
4 . Dos expresiones regulares , separados por una barra ( "/" ) constituyen una expresin regular
coincida con la expresin anterior , pero slo si es seguido por el siguiente regulares expresin .
Por ejemplo , la expresin regular de la PC / LEX coincide con la subcadena PC en el PCLEX cadena.
No se correspondera con PC de cadena o PCYACC .
5 . Una serie de expresiones regulares se pueden agrupar en un par de parntesis ( '(' y ' )') forman
una nueva expresin regular.
Por ejemplo , la expresin regular ( Lind | Brian ) coincide con un tanto Linda y Briana .
6 . Un punto ( '.') Coincide con cualquier carcter excepto la nueva lnea C metacaracter ('\ n' ) .
Por ejemplo, la expresin regular coincide con cadenas M. YO y MI .
7 . Una flecha hacia arriba acento circunflejo ( "^" ) como el primer carcter de un habitual
expresin coincide con el comienzo de una lnea.
Por ejemplo , la expresin regular ^ ME coincide con la cadena ME slo si es los dos primeros
caracteres de la lnea .
8 . Un signo de dlar ( "$" ) como el ltimo carcter de una expresin regular coincide con el
el final de una lnea , pero no el mismo carcter de lnea nueva .
Por ejemplo, la expresin regular ME $ coincide con la cadena ME slo si son los dos ltimos
caracteres de la lnea .
9 . Un par de corchetes ( '[' y ']' ) que encierra una secuencia de caracteres forma una expresin
regular se llama una clase de caracteres , lo que coincide con cualquiera de los caracteres includos
entre los corchetes. Metacarcter ' [' marca el inicio de una clase de caracteres y metacaracteres
']' marca el final de la clase de caracteres .
Dentro de una clase de caracteres slo metacaracteres '] ', ' ^ ', '- ', ' " ', ' \ ', ' {' y '} ' tienen un
significado especial Otros metacaracteres pierden su significado especial dentro de una clase de
caracteres , excepto C . caracteres que empiezan con ' \ ' . Uso escapar \ { \ } , \ ] , y as
sucesivamente para poner a estos personajes en una clase de caracteres.
Por ejemplo , la expresin regular [ 0123456789 ] concuerda con cualquier dgito decimal y,
expresin regular coincide con un punto o un signo de dlar [$ . ] .
10 . Una flecha hacia arriba acento circunflejo ( "^" ) como el primer carcter de un personaje
clase hace una clase de carcter negativo, lo que coincide con cualquier carcter excepto los que
dentro de los corchetes.
Por ejemplo , la expresin regular [ ^ 0123456789 ] concuerda con cualquier carcter excepto el
carcter de dgito . Y la expresin regular [ ^ 0123456789 ] concuerda con cualquier carcter dgito
o un acento circunflejo .
11 . Un guin o un guin ( "-" ) dentro de una clase de caracteres , o una clase de carcter negativo
indica un intervalo de caracteres . A ' -' como primer carcter despus del ' [' coincide con el
carcter ' -' en s . Esto proporciona otra razn por poner al personaje en la clase de caracteres .
Por ejemplo , la expresin regular [ 0-9 ] concuerda con cualquier dgito decimal , significa lo
mismo que la expresin regular [ 0123456789 ] . Expresin regular [- ^ ] coincide con un guin o
una flecha hacia arriba .
12 . Un signo de comillas ( " " ) independientemente dentro de una clase de caracteres o no se
lleva significado especial de los caracteres hasta prximos comillas. Todo dentro de las comillas se
interpreta literalmente , metacaracteres que no escapa de caracteres C pierden su significado
dentro de las comillas .
Por ejemplo, la expresin regular " 1.5/3.0 " coincide con la cadena de 1.5/3.0 .
13 . Una barra invertida ('\ ' ) independientemente dentro de una clase de caracteres o no le quita
significado especial del prximo carcter. El meta-carcter se utiliza para escapar metacaracteres ,
y como parte de los escapes de caracteres habituales C .
Por ejemplo , la expresin regular [ \ t \ n \ ] coincide con un carcter de espacio en blanco.
14 . Un par de llaves ( ' {' y ' }' ) sin tener en cuenta dentro de una clase de caracteres o no
marca el inicio y el final de un nombre de macro .
Por ejemplo ,
letter [a-zA-Z]
%%
{letter} ECHO;
. ;

En el ejemplo, definimos primero una carta nombre de la macro que representa una expresin
regular
[a- zA -Z ] en la seccin de definiciones del archivo de descripcin del escner. Ms tarde, en el
Estado seccin nos referimos a la expresin regular llamando a su nombre de la macro utilizando
{letter } .
15 . Los nmeros en un par de llaves , { nmero1 , nmero2 } , forman un operador que indica las
veces que se permite que el patrn previo de igualar.
Por ejemplo , la expresin regular [ 0-9 ] { 1,3} coincide con nmeros del 0 al 999.
16 . Una expresin regular seguido por un asterisco ( ' * ' ) que coincide con la expresin repetido
cero o ms veces . El meta-carcter '*' es un operador de cierre. Una operacin de cierre tiene
mayor precedencia que la concatenacin.
Por ejemplo , la expresin regular [ 0-9 ] [ 0-9 ] * coincide con los nmeros formados por uno o
ms dgitos .
17 . Una expresin regular seguido de un signo ms ( '') , un operador de cierre coincide con la
expresin repite una o ms veces.
Por ejemplo, la expresin regular [ 0-9 ] coincide con los nmeros formados por uno o ms dgitos.
18 . Una expresin regular seguida de un signo de interrogacin ( "?" ) , Un operador de la
clausura, repetido cero o una vez.
La precedencia de operadores en una expresin regular est en la lista de mayor a menor de la
siguiente manera :
Descripcin de operador
( ) Parntesis, agrupando
[ ] Clase de caracteres
* ? { } Veces el patrn se permite para que coincida
ee concatenacin
| Sea patrn
^ $ Principio y al final de la lnea

7. PCLEX Terminologa - Una breve revisin
PCLEX es un generador de escner, un programa que ayuda a escribir escneres lxicos. El escner
es un autmata de estado finito o mquina de estados finitos (FSM). PCLEX toma un escner
archivo de descripcin de entrada compuesta de expresiones regulares y cdigos asociados C
(acciones), a continuacin, genera un programa reconocedor que ejecuta el cdigo C en un
determinado se reconoce cadena. PCLEX construye el escner lxico mediante la traduccin de la
meta descripcin de la sintaxis lxica de la lengua en las expresiones regulares en un programa de
C que reconoce los smbolos o tokens de la lengua meta . El idioma fuente de PCLEX es el lenguaje
de descripcin de escner ( SDL ) . El lenguaje objeto de PCLEX es el idioma fuente de
programacin C. Programas escritos en SDL se llaman programas de descripcin del escner ( SDP )
. Archivos de SDP se denominan archivos de descripcin de escner ( SDF ) .
La funcin de PCLEX es traducir una GDF en un archivo de C que define una funcin . Por
convencin , el nombre de la funcin es yylex (). Una lengua de destino en un proceso de anlisis
de lxico es el lenguaje descrito por el programa de descripcin del analizador .
A SDF se compone de tres secciones , una seccin de definiciones , una seccin de la regla , y una
seccin de subrutina de usuario , en ese orden. Cualquiera o todas de las tres secciones puede
estar vaco . Si la seccin de subrutina de usuario est vaco , el segundo " % % " delimitador puede
ser omitido . La primera " % % " delimitador no puede ser omitido .

V. INTRODUCCIN - Nuestro primer ejemplo
En este captulo se da una idea de cmo utilizar PCLEX con un programa de escner
independiente.
Muchos procesamiento simple recopilacin de estadsticas y programas de texto se pueden
escribir rpidamente de esta manera con la ayuda de PCLEX . Se supone que ya est familiarizado
con MS -DOS y el lenguaje de programacin C . Usted necesita un PC MS -DOS con ABRAXAS PCLEX
y un compilador de C instalado para generar y ejecutar este ejemplo. Un editor de programacin
es til para realizar modificaciones y experimentos del programa.
Los fundamentos del proceso de desarrollo del programa es similar para todos los programas
PCLEX independientes. En este captulo se ofrece una visin general de este proceso . El programa
de ejemplo utilizado en este captulo cuenta los bytes , palabras y lneas en un archivo de texto .
Cmo crear y ejecutar el programa ser mostrado y explicado. En captulos posteriores se
muestran ejemplos ms complicados con mayor participacin construir procedimientos.
1 . Escner Descripcin del archivo para el programa Word Count
La siguiente es la lista de las Fuerzas de Autodefensa para el programa de conteo de palabras ,
WC.L. para referencia, se aaden nmeros de lnea a la lista .
001: /*
002: * WC.L - simple standalone PCLEX application.
003: */
004:
005: %{
006: long nchar = 0; /* # of characters */
007: long nword = 0; /* # of words */
008: long nline = 0; /* # of lines */
009: %}
010:
011: %%
012:
013: \n nchar += 2; ++nline;
014:
015: [^ \t\n]+ ++nword; nchar += yyleng;
016:
017: . ++nchar;
018:
019: %%
020:
021: main()
022: {
023: yylex();
024: printf("%d\t%d\t%d\n", nchar, nword, nline);
025: exit(0);
026: }

Este ejemplo, aunque pequeo, presenta la estructura tpica de un escner PCLEX
Descripcin . Lneas 001 a 010 forma la seccin de definiciones , donde se incluyen los archivos de
cabecera necesarios , las variables globales declaradas , y los nombres definidos. Lneas 012 a
travs de 018 forman la seccin de reglas , donde los patrones de entrada para que coincidan y sus
acciones correspondientes se definen . Lneas 020 a travs de la seccin 026 son subrutina de
usuario con las funciones de apoyo necesarias escritas en C. Como se ilustra en este ejemplo, un
archivo de descripcin de escner se compone de tres secciones : una seccin de definiciones ,
una seccin de reglas , y una seccin de subrutina de usuario . Cualquiera o todas de las tres
secciones puede estar vaco .
Lneas 001 a 003 es un comentario . SDL comentarios el mismo aspecto que los comentarios en C y
se pasan a travs del archivo de salida intacta . Las reglas para la colocacin comentario SDL no
son exactamente lo mismo que en C. Ellos se explican en detalle en el captulo X, seccin 5.3 .
Los pares de smbolos " % {" y "% }", en las lneas 005 y 009 son delimitadores usados en la seccin
de definicin de cdigo de soporte de C , como las directivas de preprocesador , tipo mundial y las
definiciones de la estructura, y declaraciones de variables globales. En este ejemplo , hay tres
declaraciones de variables . PCLEX no mira el cdigo dentro de estos delimitadores , que se
transmite a travs del archivo de origen escner de salida intacta . El cdigo se coloca en la parte
superior del archivo de salida de manera que otras partes del escner pueden referirse a las
definiciones de los datos contenidos en el mismo .
Lnea 011 es el delimitador ("% %") , en una lnea por s mismo, que separa la seccin de
definiciones de la seccin de la regla .
Lnea 013 dice: cuando se llega a un final de lnea ('\ n' es la abreviatura de nueva lnea ), aadir
dos al contador de caracteres ( " nchar ") y agregue a la barra de lnea (" nline ") . El final de la lnea
en archivos de texto MS -DOS est marcada por dos personajes, un retorno de carro y un carcter
de avance de lnea. El patrn en una regla es todo antes del primer espacio en blanco ( espacios o
tabuladores ) , en este caso los caracteres " \ " y "n" . Todo, desde el espacio en blanco al final de
la lnea es la parte de accin de la regla. Cada accin es una seccin de cdigo C ejecutada cuando
su patrn se reconoce en la entrada de escner . Las acciones pueden estar vacas ( una
instruccin nula en lenguaje C, llamado una accin vaca . ) Reglas normalmente son slo una
lnea. Cmo extender la accin en varias lneas , se explica en un captulo ms adelante (captulo
VII , seccin 4 ) .
Lnea 015 dice: Cuando se encuentran una serie de caracteres que no son espacios en blanco ,
incrementa el contador de palabras ( " nword ") y aadir la longitud del texto coincidente ( "
yyleng ") para el contador de caracteres . El patrn coincide con uno o ms ( el operador '+ ' ), las
apariciones de la clase de caracteres ( entre corchetes " [ " y " ] " , incluya las clases de caracteres )
que incluye todo excepto ( un operador inicial '^' complementa o anula los contenidos de una
clase de caracteres ), un espacio, una tabulacin ( " \ t " es la abreviatura de pestaas) , y los
extremos de las lneas .
Lnea 017 es la norma definitiva en la seccin de la regla y dice : para cualquier carcter que no se
repite lo contrario ('.' Operador de cualquier carcter ) , incrementa el contador de caracteres .
Se puede leer, lo que no se requieren las lneas en blanco entre las normas .
El segundo "% % " delimitador on line 019 separa la seccin de las reglas por parte del usuario
seccin de subrutina. Todo en la seccin de subrutina de usuario se pasa intacto al archivo de
salida de PCLEX . En este ejemplo, la funcin principal llama " yylex ()" , la funcin de escner
genera PCLEX , imprime carcter , palabra, y cuenta con la lnea , y sale. La siguiente discusin le
ayudar a entender cmo combinar lo PCLEX produce con las subrutinas de usuario escrito por el
programador para hacer un programa completo en C .

PCLEX genera cdigo C para una funcin, " yylex ()" , y las tablas de datos que se leen a la entrada ,
se divide en partidos de los patrones , y ejecutar las acciones correspondientes.
Tcnicamente , el " yylex ()" funcin es un intrprete por tablas que simula un
Determinista mquina de estados finitos ( DFSM ) . DFSM se discuten en ms detalle en el captulo
IX . El resto del programa debe incluir una funcin " main () " , realice la configuracin del
programa y la limpieza, y no es necesario ningn tratamiento adicional.
2 . Construir el archivo ejecutable
Para invocar PCLEX en la descripcin del analizador WC.L archivo, ejecute el comando siguiente :
C> pclex wc.l
El resultado de esta operacin es un programa de C . Un archivo con el nombre WC.C se crear en
el directorio actual , que es un programa en C para el programa Contar palabras. Para construir la
versin ejecutable del WC , invoque el compilador de C de la siguiente manera ( el ejemplo se
supone que el C compiladores de Microsoft ) :
C> cl wc.c
3 . Sesin de Muestra
Despus de la versin ejecutable del WC est construido con xito (en nuestro ejemplo , tenemos
un WC.EXE en el directorio actual ), se puede utilizar para comprobar el tamao de WC.L. El
siguiente es un ejemplo de sesin de WC en el trabajo :
C> wc < wc.l
398 64 26
En este ejemplo , aunque simple , contiene casi la totalidad de las partes de la construccin de un
programa con PCLEX .
Tenga en cuenta, si se toma WC.EXE y tipo
C> wc < wc.exe
Esto bloquear la mquina , el escner o porque el archivo ejecutable est formado por caracteres
ASCII de 8 bits. Para construir un escner de ocho bits use el comando
C> pclex -8 wc.l > wc.c
a continuacin, escriba
C> cl wc.c
ahora escriba
C> wc < wc.exe
y tenga en cuenta que la mquina no debe quedar apretado .

Das könnte Ihnen auch gefallen