Академический Документы
Профессиональный Документы
Культура Документы
,-'(")*
!
!
,-.)/!./)'*(,&**
$),*$)"!,-'(")!
#$%&'(!)*+,-+! #$%&'(!)*+,-+ #$%&'(!)*+,-+
! ! !
!!!!!! !!!!!! !!!!!!
"!"!"
!
"#$!
"#%&$'()%#!
! !
#$%&'(!)*+,-+ (*(+,-()%#!
.#(,!!)(/01-(2 +./,&%!
!
!
!
!
!
! "
! En el programa principal la inclusión de una librería se declara:
Program X;
{$I archivo}
…
{$I archivo}
declaraciones
funciones
bloque principal
.
archivo principal
{$I archivo}
…
{$I archivo}
declaraciones
funciones
librería
2
EJEMPLO:
Ppal.pas
A.pas B.pas
C.pas
Debe hacerse un recorrido en profundidad, esto es, primero se incluyen los hijos de izquierda a
derecha antes de incluir al padre.
C.pas
B.pas
C.pas " se repite
A.pas
C.pas " se repite
B.pas " se repite
Ppal.pas
3
Los archivos que se repitan se incluyen una sola vez, por lo que el recorrido quedaría:
C.pas
B.pas
A.pas
Ppal.pas
Lo que significa que la concatenación de los archivos C.pas, B.pas, A.pas, se coloca en ppal.pas
después de la cabecera del programa, es decir ppal.pas quedaría:
Program X;
C.pas
B.pas
A.pas
Resto de ppal.pas
4
Program X; Le indican al
{$I A.pas} pre-procesador que nuevo principal +formato
hay que procesar una Son comentarios para el
{$I B.pas} librería ppal.pas línea 1 -> Program X; analizador léxico, por lo
que los va a ignorar (no
ppal.pas línea 2 -> {$I A.pas}
Ppal.pas
PRE PROCESADOR
{$I B.pas}
COMPILADOR
B.pas línea 4 -> funciones B
Librería
{$I C.pas}
A.pas
funciones C
C.pas
En realidad no forman parte del programa fuente, pero el analizador léxico los necesita para llevar la cuenta
de la línea y del archivo que está analizando, por si sucede un error poder dar la ubicación exacta.
5
DEFINICIÓN DEL LENGUAJE “PASCAL”
GRAFOS DE SINTAXIS
expresión
COMA
DIV_ENTERA div
MOD mod
Operadores
aritméticos
MAS +
MENOS -
MULT *
DIV_REAL /
AND and
lógicos
NOT not
Op.
OR or
IGUAL =
DIF <>
relacionales
Operadores
MENOR <
MAYOR >
MEN_IGUAL <=
MAY_IGUAL >=
CORCH_IZQ [
CORCH_DER ]
PAR_IZQ (
puntuación
Símbolos
PAR_DER )
ASIGNACION :=
de
PUNTOYCOMA ;
PUNTO .
DOS_PUNTOS :
COMA ,
reservadas
Palabras
ELSE else
WHILE while
DO do
REPEAT repeat
UNTIL until
FOR for
CASE case
READ Read
READLN ReadLn
WRITE Write
WRITELN WriteLn
BREAK Break
CONTINUE Continue
CLRSCR ClrScr
TO to
DOWNTO downto
TERMINALES
ID CONST_ENTERA CONST_REAL
CONST_ALFA CONST_LOGICA PROGRAMA
VAR CONST ARRAY
OF INTEGER CHAR
REAL BOOLEAN FUNCTION
PROCEDURE BEGIN END
IF THEN ELSE
WHILE DO REPEAT
UNTIL FOR CASE
READ READLN WRITE
WRITELN BREAK CONTINUE
CLRSCR TO DOWNTO
DIV_ENTERA MOD MAS
MENOS MULT DIV_REAL
AND NOT OR
IGUAL DIF MENOR
MAYOR MEN_IGUAL MAY_IGUAL
CORCH_IZQ CORCH_DER PAR_IZQ
PAR_DER ASIGNACION PUNTOYCOMA
PUNTO DOS_PUNTOS COMA
NO TERMINALES
programa declaración Dvariables
Dconstantes lista_identificadores tipo
tipo_estándar dimensiones índice
subrutina nombre_subrutina argumentos
lista_parámetros bloque lista_instrucciones
instrucción variable lista_variables
asignación llamada_a_subrutina caso
lista_expresiones expresión operador_relacional
expresion_simple signo operador_suma
término operador_mult factor
valor_constante
SÍMBOLO INICIAL
programa
instrucción "
IDENTIFICADOR ( asignación | llamada_a_subrutina )
| bloque
| WHILE expresión DO instrucción
| REPEAT lista_instrucciones UNTIL expresión
| FOR variable ASIGNACION expresión (TO | DOWNTO) expresión DO instrucción
| CASE expresión OF
( caso (PUNTOYCOMA caso)* )? (ELSE instrucción)? END
| IF expresión THEN instrucción (ELSE instrucción)?
| READ PAR_IZQ lista_variables PAR_DER
| READLN PAR_IZQ lista_variables PAR_DER
| WRITE PAR_IZQ lista_expresiones PAR_DER
| WRITELN ( PAR_IZQ lista_expresiones PAR_DER )?
| BREAK | CONTINUE | CLRSCR
|#