Está en la página 1de 16

Lengua[es y AuLmaLas l lng. nelly !

aneLh velasco Lscobedo



!"#$%$ #' #"()*$!++#," % -% (.*)/% $. -*0 -."1!%2.0 3*)4%-.0'

Ln maLemLlcas, lglca, y las clenclas compuLaclonales, un 56789:;6 <=>?:5 es:
un con[unLo de palabras (cadenas de caracLeres) de longlLud flnlLa formadas a
parLlr de un alfabeLo (con[unLo de caracLeres) flnlLo.
lnformalmenLe, el Lermlno lengua[e formal se uLlllza en muchos conLexLos (en las clenclas,
en derecho, eLc.) para referlrse a:
un modo de expresln ms culdadoso y preclso que el habla coLldlana.

Los lengua[es formales pueden ser especlflcados en una amplla varledad de maneras,
como:
Cadenas producldas por una gramLlca formal (ver !erarqula de Chomsky)
Cadenas producldas por una expresln regular
Cadenas acepLadas por un auLmaLa, Lal como una mqulna de 1urlng.

La nocln ms prlmlLlva es la de @A?B=5=, que es slmplemenLe una represenLacln de
cualquler lnformacln. un slmbolo pueden ser cualesqulera, como w, 9, #, eLc.

C'C %5<:B6D='
Con[unLo no vaclo y flnlLo de slmbolos.
un alfabeLo es un con[unLo no vaclo de slmbolos. Asl, el alfabeLo del ldloma
espanol: _ = [a, b, c, . . . , z}, es slo uno de LanLos alfabeLos poslbles. Ln general
uLlllzaremos la noLacln _ para represenLar un alfabeLo.
Sl _ es un alfabeLo, (ro) _ denoLa que es un slmbolo de _. or LanLo sl _=
[1,2,3,4,., 9} podemos declr que 1 _.

C'E +:F67:@'
Las cadenas de caracLeres son llamadas Lamblen palabras.
Secuencla flnlLa de slmbolos de un deLermlnado alfabeLo.
Con los slmbolos de un alfabeLo es poslble formar secuenclas o cadenas de
caracLeres.
.L. algunas palabras del alfabeLo espanol son: dlas, arrlba, eLc.
un caso parLlcular de cadena es la palabra vacla, c, la cual es una secuencla vacla
de slmbolos Lomados de cualqulera que sea el alfabeLo en cuesLln.

C'G -6789:;6@'
Con[unLo de palabras.
Ls un grupo de cadenas del alfabeLo.
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

.L. [1,12,123,1234,12343, .}
Sl _ es un alfabeLo Lamblen es un lengua[e (formado por Lodas las cadenas con un
unlco slmbolo).

Pay lengua[es lnflnlLos como:
lngles
blnarlo

Pay lengua[es vaclos
no Llenen nlnguna cadena.
LsLn formados por [ c}
Ll lengua[e vaclo se denoLa de la mlsma forma que el con[unLo vaclo .

L[emplos
AlfabeLos
z
1
= [0, 1}
z
2
= [a, b}
z
3
= [na, pa, bra, la}
z
4
= [<P1ML>, </P1ML>, <8Cu?>, </8Cu?>, . . .}
z
3
= [|}
z
6
= [a, ab, aab}

alabras
z
1
: 0, 1, 00, 01, 11, 000, 1001101
z
2
: a, aa, abb, ababa
z
3
: napa, palabra
z
6
: a, ab, aab, aaab, abab

Cperaclones con cadenas
LonglLud de una palabra: es la canLldad de leLras que conLlene, conLando las
repeLlclones, se denoLa por |w| para una palabra w. or e[emplo, |perro| es 3.
ConcaLenacln: cuando escrlblmos varlas palabras o caracLeres uno a conLlnuacln
de oLro, se supone que forman una sola palabra (se concaLenan). Sl w y z son
cadenas wz es una concaLenacln. or e[emplo, sl w = abra y z = cada, enLonces
wzbra es la palabra abracadabra. La longlLud de una concaLenacln cumple la
propledad: |wz| = |w|+|z|= 8.
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

Subcadena: una palabra w es subcadena de oLra z cuando exlsLen las cadenas x, y
para los cuales z=xwy = w. or e[emplo, bor" es subcadena de vlbora", y c es
subcadena de Loda palabra.
refl[o: sl w y x son palabras, x es prefl[o de w sl para alguna cadena y se obLlene
que w=xy. w=121 enLonces la cadena x=12 es prefl[o de w e y=1. Sl y= c enLonces
para w=xy se Llene que w=x. 1oda palabra puede conslderarse prefl[o de sl mlsmo.
x=121 es un prefl[o de la cadena w=121.
Sufl[o: se forma suprlmlendo cero o mas slmbolos desde la lzqulerda de una
cadena S. era es un sufl[o de andera.
La lnversa o LranspuesLa de una palabra w es la lmagen refle[a de w. Sl w="able"
enLonces la lnversa es elba". w se usa w
l
.
w
l
= w sl w= c
y
l
a sl w=ay por LanLo a _ y y _*
x="able"
x
l
=(able)
l
= (ble)
l
a = (le)
l
ba = (e)
l
lba = (c)
l
elba= celba=elba
((abcd)
l
)
l
= (dcba)
l
=abcd
((x)
l
)
l
=x
oLencla:
w
n
= c sl n= 0
Ww
n-1
, sl n>0
or LanLo w=122 sobre el alfabeLo _=[1,2}
w
0
= c
w
1
= 122
w
2
= 122122
w
3
= 122122122

Cperaclones con lengua[es
ConcaLenacln
o Sean dos lengua[es L1, L2. La concaLenacln de L1 y L2, represenLado por
L1L2 (a veces por L1.L2), es un lengua[e que se deflne de la slgulenLe forma:
L1L2=[ xy | x! L1, y! L2}.
o L[emplos: z =[a,b,c}
! L1=[ab, ac, cb}, L2=[b, bba} " L1L2 = [abb,abbba,acb,acbba,cbb,
cbbba}
! L1 = [a, aa, aaa, ...}, L2=[ c, b, bb, bbb, ...} " L1L2=?
! Cue pasa sl L1 o L2es ###?
o ropledades de la concaLenacln
! Cerrada: L1$W(z), L2$W(z) " L1L2$W(z)
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

! AsoclaLlva: (L1L2)L3 = L1 (L2L3)
! no es conmuLaLlva: (%L1, L2: L1L2=L2L1)
! LlemenLo neuLro([\}): %L1: L1[ c }=[ c }L1=L1
! no es ldempoLenLe: (%L: LL=L)
oLencla
o La poLencla l-eslma de un lengua[e L conslsLe en el lengua[e resulLanLe de
concaLenar el lengua[e conslgo mlsmo l veces.
o Ll= LLL...L (l veces)
o ropledades de la poLencla
! Cerrada: L $ W(z) " Ll $ W(z)
L
l+1
= L
l
L = LL
l
(l>0)
L
l
L
[
= L
l+[
(l,[>0)
Cue pasa sl l, [ = 0?
! Se deflne L
0
= [ c }
L
0+1
= L
1
= L = [ c } L=L
0
L
L
0
L
0
= [ c }[ c } =[ c }=L
0
= L
0+0

o L
1
= [ c,ab, ac}
" L1
2
=[ c,ab,ac,abab,abac,acab,acac}
" L1
3
=[ c,ab,ac,abab,abac,acab,acac,ababab,ababac,abacab,abacac,
acabab, acabac,acacab,acacac}
o L
2
= [a, aa, aaa, ...}
" L2
2
= ?
" L2
3
= ?
unln:
o Sea el alfabeLo z y dos lengua[es L1$W(z) y L2$W(z). La unln de L1 y L2,
L1 & L2, es un lengua[e que se deflne de la slgulenLe forma:
! L1 & L2=[x|x! L1 o x! L2}.
o ropledades de la unln:
! Cperacln cerrada: L1$W(z), L2$W(z) " L1&L2$W(z) (la unln de
dos lengua[es sobre el mlsmo alfabeLo es Lamblen un lengua[e sobre
esLe alfabeLo)
! AsoclaLlva: (L1 & L2) & L3=L1 &(L2 & L3)
! LlemenLo neuLro: %L1, n & L1 = L1 Cue es n?
! ConmuLaLlva: L1 & L2 = L2 & L1
! ldempoLencla: L & L = L
Cerradura poslLlva de un lengua[e
o La cerradura poslLlva de un lengua[e L se deflne por: L
+
=u
~
l=1
Ll
o L[emplos:
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

L =[a,aa,aaa,aaaa,...} = [a
n
| n1}
" L2=[ aa,aaa,aaaa,...} = [a
n
a
m
| n,m1} = [a
n
| n2}
" L3=[ aaa,aaaa,...} = [a
n
a
m
| n1, m2} = [a
n
| n3}
" L
+
= u
~
l=1
Ll =[a,aa,aaa,aaaa,...} = L

z=[a,b}, z es un lengua[e sobre z, ya que z$W(z)
z
+
=u
~
l=1
= z
l
=[a,b,aa,ab,ba,bb,aaa,...} = W(z) - [\}
noLa: Sl \ ( L, enLonces \ ( L
+


Cerradura de leene
o La clausura de un lengua[e L se deflne por: L
*
=u
~
l=0
Ll
o noLa: % L: \!L
*
, ya que [\}=L
0

o ropledades
! Cerrada: L$W(z)" L
+
$W(z) , L
*
$W(z)
! L
*
=L
0
&(u
~
l=0
Ll)= L
0
&L
+
=[\}&L
+

! L
+
=LL*= L*L
eflexln de un lengua[e
o Sea L un lengua[e. Se llama lengua[e lnverso (lengua[e refle[o) de L, y se
represenLa por L-1al lengua[e: L-1=[x-1|x!L}.
o L[emplos:
! L =[ana,[ullo,[esus,norma} " L
-1
=[ana,ollu[,suse[,amron}
! L =[a,aa,aaa,...} " L
-1
?
! ropledades de la reflexln:
! Cerrada: L$W(z) " L
-1
$W(z)
lnLerseccln
o Sean dos lengua[es L1 y L2. La lnLerseccln de L1 y L2, L1! L2, es el lengua[e
que se deflne por: L1! L2=[x|x! L1 y x! L2}.
o ropledades Cerrada: L1$W(z) , L2$W(z) " L1!L2$W(z)
! AsoclaLlva: (L1!L2) !L3=L1! (L2!L3)
! ConmuLaLlva: L1!L2= L2!L1
! ldempoLencla: L!L=L L!#=#
ComplemenLo
o Sea L un lengua[e sobre el alfabeLo z. Ll complemenLo de L, denoLado con L
(o con c(L)) es el slgulenLe lengua[e L:=[x|x!W(z) y x(L}
o ropledades
! Cerrada: L$W(z) " L $W(z) W(z) =# L =LLLL
ulferencla
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

o Sean dos lengua[es L1 y L2. La dlferencla de L1 y L2, L1- L2(o L1L2) es el
lengua[e que se deflne por: L1- L2=[x|x! L1 y x( L2}.
o ropledades L1$W(z) , L2$W(z) " L1-L2$W(z)
! no es asoclaLlva: (% L1, L2: (L1-L2)-L3=L1-(L2-L3))
! no es conmuLaLlva: (% L1, L2: L1-L2=L2-L1)
! no es ldempoLenLe: % L: L-L=# A-#=A

C'H (IJ=@ F6 56789:;6@
Se reflere a con[unLos de lengua[es que comparLen una clerLa propledad dada. La
claslflcacln de lengua[es en clases de lengua[es esL dada por n. Chomsky, qulen propuso
una [erarqula de lengua[es, donde las clases ms comple[as lncluyen a las ms slmples.

La [erarqula esL propuesLa de la slgulenLe manera:
ramLlcas sln resLrlcclones (Llpo 0)
o Ls el Llpo de gramLlca ms general.
o Ls una gramLlca recurslvamenLe enumerable.
o LsLos Llpos de lengua[es se resuelven medlanLe maqulnas de 1urln.
o no Llene nlnguna resLrlccln solamenLe que del lado lzqulerdo debe haber
por lo menos un slmbolo no Lermlnal.
o .;6?J5=: La gramLlca sln resLrlcclones
! v= [S, A, C}
! S= [a,b,c}
! S " aAbc |c
! A " aAbC |c
! Cb " bC
! Cc " cc
! Con slmbolo lnlclal S genera el lengua[e [a
l
b
l
c
l
| l>=0}.
aAbc-abc
aAbc-aaAbCbc-aabCbc-aabbCc-aabbcc
aAbc-aaAbCbc-aaaAbCbCbc-aaabCbCbc-aaabCbCbc-aaabbCCbc-aaabbCbCc-
aaabbbCCc-aaabbbCcc-aaabbbccc
ramLlcas senslbles o dependlenLes del conLexLo (Llpo 1)
o LsLos Llpos de lengua[es se resuelven medlanLe auLmaLas llneales
llmlLados.
o una resLrlccln es que el numero de no Lermlnales del lado lzqulerdo de la
produccln debe ser menor o lgual al numero de slmbolos del lado derecho
o .;6?J5=K
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

! Con esLe Llpo de lengua[es se hacen los anallzadores slnLcLlcos para
un compllador.
! Ls una de las parLes de un compllador que Lransforma su enLrada en
un rbol de derlvacln.
! Ll anllsls slnLcLlco convlerLe el LexLo de enLrada en oLras
esLrucLuras (comunmenLe rboles), que son ms uLlles para el
posLerlor anllsls y capLuran la [erarqula lmpllclLa de la enLrada.
! S " aAbc | abc
! A " aAbC | abC |c
! C "acc |aA
S-aAbc-aaAbCbc-aaabCbCbc-aaabaccbaccbc
S-aAbc-aabCbc-aabaccbc
S-aAbc-aaAbCbc-aaaAbCbCbc-aaaabCbCbCbc-aaaabaccbCbCbc-
aaaabaccbaAbCbc-aaaabaccbaaAbCbCbc-aaaabaccbaabaccbaAbc-
aaaabaccbaabaccbabc
ramLlcas llbres o lndependlenLes del conLexLo (Llpo 2)
o LsLos Llpos de lengua[es se resuelven medlanLe auLmaLas descendenLes.
o uel lado derecho de cada produccln puede empezar con un slmbolo
Lermlnal o con un no Lermlnal.
o L[emplo: Con esLe Llpo de lengua[e se programa los parser (anallzador
slnLcLlco) en un compllador
! = (v, S , , S)
! v=[S,A}
! S=[a,b}
! : S " AA
! A " AAA | bA | Ab | a
! una derlvacln por la ILM9I6>F: es la slgulenLe:
S"AA"bAA"baA"baa
! una derlvacln por la F6>6NO:
S"AA"AbA"Aba"aba
lzq
S-AA-AAAA-bAAAA-bAbAAA-babAAA-babaAA-bababAA-bababAbA-
babababA-babababa
ramLlcas regulares (Llpo 3)
o LsLos Llpos de lengua[es se resuelven medlanLe auLmaLas flnlLos.
o uel lado derecho de cada produccln debe empezar con un slmbolo
Lermlnal
o L[emplo: Con esLe Llpo de lengua[e se hacen los scanners
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

! A " a
! A " a8
! A " l

noLa: se uLlllza el slmbolo para represenLar el lado lzqulerdo de una gramLlca y para
el lado derecho, enLonces para producclones se hace la prlmera descrlpcln de la
[erarqula de Chomsky para gramLlcas.
(IJ= "=?B>6 -6789:;6 $6@N>IJNIP7 4QM9I7: .;6?J5=
R Sln resLrlccln ecurslvame
nLe
enumerable
y son cadenas
arblLrarlas de slmbolos,
donde c.
Mqulna de
1urlng
SxS
Sc
xax
xa
aaaxba
C uependlenLes
del conLexLo
uependlenLe
o senslble al
conLexLo
debe Lener al menos
la mlsma longlLud de .
La forma normal de
esLas gramLlcas es

1
A
2

1

2,
con
c, se permlLe la
slLuacln de A por
solamenLe con el
conLexLo
1
-
2

Mqulna no
deLermlnlsLa -
llmlLada de
1urlng
Saxb
axbacb
E lndependlenLes
del conLexLo
Llbre de
conLexLo
es un no Lermlnal
es una cadena
arblLrarla
AuLmaLa de
plla (push-
down)
LL+L
LL*L
L(L)
L-L
L0.9
G egulares egulares es un solo no
Lermlnal.
Llene la forma Aw8
o Aw, donde A y 8 son
no Lermlnales y w es
una cadena (lncluslve
vacla) de Lermlnales,
enLonces se dlce que la
gramLlca es llneal por
la derecha. Sl Lodas las
producclones son de la
forma A8w o Aw de
dlce que la gramLlca es
llneal por la lzqulerda.
Las gramLlcas llneales
por la derecha o la
lzqulerda se conocen
como gramLlcas
regulares.
AuLmaLa
flnlLo de
esLado
AaA
AbA
Ab8
8a
8b8
8c
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo















C'S T6>>:?I67D:@ N=?J9D:NI=7:56@ 5I8:F:@ N=7 56789:;6@
Las herramlenLas de programacln, son aquellas que permlLen reallzar apllcaclones,
programas, ruLlnas, uLllerlas y slsLemas para que la parLe flslca de la compuLadora
funclone y pueda produclr resulLados.
Poy dla exlsLen mulLlples herramlenLas de programacln en el mercado, LanLo para
anallsLas experLos como para anallsLas lnexperLos. Las herramlenLas de programacln ms
comunes cuenLan con programas de depuracln o debugger, que son uLllerlas que nos
permlLen deLecLar los poslbles errores en Llempo de e[ecucln o corrlda de ruLlnas y
programas. Muchas herramlenLas de sofLware que manlpulan programas fuenLe reallzan
prlmero algun Llpo de anllsls. Algunas herramlenLas son:
:' .FID=>6@ F6 6@D>9ND9>:@K
Su enLrada una secuencla de rdenes para consLrulr un programa fuenLe.
eallza funclones de creacln y modlflcacln de LexLos de un edlLor de LexLos
ordlnarlo, y Lamblen anallza el LexLo del programa, lmponlendo al programa
fuenLe una esLrucLura [errqulca aproplada.
eallza Lareas adlclonales uLlles para la preparacln de programas. or
e[emplo:
l. uede comprobar sl la enLrada esL formada correcLamenLe, puede
proporclonar palabras claves de manera auLomLlca (por e[emplo,
cuando el usuarlo escrlbe whlle, el edlLor proporclona el
correspondlenLe do y le recuerda al usuarlo que enLre las dos palabras
debe lr un condlclonal).
ll. uede salLar desde un begln o un parenLesls lzqulerdo hasLa su
correspondlenLe end o parenLesls derecho.
1lpo 0: Sln resLrlcclones
1lpo 1: Senslbles o dependlenLes del conLexLo
1lpo 2: Llbres o lndependlenLes del
conLexLo
1lpo 3: egulares
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

La sallda de Lal edlLor suele ser slmllar a la sallda de la fase de anllsls de un
compllador.
B' #?J>6@=>:@ 6@DUDIN:@K
Anallza un programa y lo lmprlme de forma que la esLrucLura del programa
resulLe claramenLe vlslble.
or e[emplo, los comenLarlos pueden aparecer con un Llpo de leLra especlal, y
las proposlclones pueden aparecer con una lndenLacln proporclonal a la
profundldad de su anldamlenLo en la organlzacln [errqulca de las
proposlclones.
N' V6>I<IN:F=>6@ 6@DQDIN=@K
Lee un programa, lo anallza e lnLenLa descubrlr errores poLenclales sln e[ecuLar
el programa.
La parLe de anllsls a menudo es slmllar a la que se encuenLra en los
complladores de opLlmlzacln.
uede deLecLar sl hay parLes de un programa que nunca se podrn e[ecuLar o sl
clerLa varlable se usa anLes de ser deflnlda.
uede deLecLar errores de lglca, como lnLenLar uLlllzar una varlable real como
apunLador, empleando las Lecnlcas de verlflcacln de Llpos.
F' #7DU>J>6D6@K
Ln lugar de produclr un programa ob[eLo como resulLado de una Lraduccln, un
lnLerpreLe reallza las operaclones que lmpllca el programa fuenLe.
Muchas veces se usan para e[ecuLar lengua[es de rdenes, pues cada operador
que se e[ecuLa en un lengua[e de rdenes suele ser una lnvocacln de una
ruLlna comple[a, como un edlLor o un compllador.
Algunos lengua[es de muy alLo nlvel", normalmenLe son lnLerpreLados, porque
hay muchas cosas sobre los daLos, como el Lamano y la forma de las maLrlces,
que no se pueden deduclr en el momenLo de la compllacln.

C'W .@D>9ND9>: F6 97 D>:F9ND=>
Ls un sofLware que Loma como enLrada un programa escrlLo en un cdlgo llamado fuenLe
y genera como sallda oLro programa en un cdlgo llamado ob[eLo.
Algunos e[emplos de LraducLores son los complladores (Loma como enLrada cdlgo en alLo
nlvel y genera como sallda cdlgo en ba[o nlvel), los lnLerpreLes (Loma como enLrada
cdlgo en alLo nlvel y genera como sallda un cdlgo lnLermedlo), los preprocesadores
(Loma como enLrada cdlgo en alLo nlvel y genera como sallda cdlgo en alLo nlvel) y el
ensamblador (Loma como enLrada cdlgo en ensamblador y genera como sallda cdlgo en
ba[o nlvel).
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

La enLrada para un compllador puede produclrse por uno o varlos procesadores y pude
neceslLarse oLro procesamlenLo de la sallda que produce el compllador anLes de obLener
un cdlgo de mqulna e[ecuLable.



















:' X>6J>=N6@:F=>K
roducen la enLrada para un compllador y pueden reallzar las slgulenLes funclones:
LsLrucLura del programa fuenLe
reprocesador
rograma uenLe
Compllador
rograma Cb[eLo (ensamblador)
Lnsamblador
Cdlgo d mqulna relocallzable
LdlLor de carga y enlace
Cdlgo de mqulna absoluLo
8lblloLeca, archlvos ob[eLo
relocallzables
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

o rocesamlenLo de macros: permlLe a un usuarlo deflnlr macros que son
abrevlaLuras a consLrucclones grandes y expansln de funclones.
o lnclusln de archlvos (blblloLecas o llbrerlas): permlLe lnserLar archlvos de
encabezamlenLo en el LexLo del programa. #lnclude <sLdlo.h> en C.
o rocesadores raclonales: enrlquecen lengua[es anLlguos con recursos
modernos de flu[o de conLrol y de esLrucLura de daLos. ermlLe agregar
macros con lnsLrucclones que no exlsLan en el lengua[e como clclos.
o LxLenslones al legua[e: lnclusln de lnsLrucclones de oLros lengua[es, p.e
ensamblador en lengua[es como C o [ava.
B' +=?JI5:F=>
Ls aquel LraducLor que Llene como enLrada una senLencla en lengua[e formal y
como sallda Llene un archlvo e[ecuLable, es declr, hace una Lraduccln de alLo nlvel
a cdlgo mqulna.
ara cada lengua[e de programacln se requlere un compllador separado. Ll
compllador Lraduce Lodo el programa anLes de e[ecuLarlo.
Algunos complladores producen cdlgo ensamblador, oLros reallzan el Lraba[o del
ensamblador generando cdlgo relocallzable que se puede pasar dlrecLamenLe al
cargador y edlLor de enlace.
N' .7@:?B5:F=>
Ls el LraducLor que se encarga de converLlr lnsLrucclones de ba[o nlvel a
lnsLrucclones de una mqulna en general.
Ls una versln mnemoLecnlca del cdlgo de mqulna donde se usan nombres en
lugar de cdlgos blnarlos para operaclones y Lamblen se usan nombres para las
dlrecclones de memorla.
La forma ms slmple hace dos pasadas sobre el archlvo de enLrada:
o La prlmera pasada lee el archlvo de enLrada y encuenLra los elemenLos que
denoLan poslclones de memorla y los almacena en una Labla de slmbolos
dlferenLe a la del compllador.
! La prlmera vez que lee un ldenLlflcador le aslgna poslclones de
memorla, asl que despues de leer la Labla de slmbolos conLlene las
enLradas.
! Aslgna las poslclones de acuerdo a la canLldad de byLes, p.e. b=a+2.
lu ulLCClCn
a 0
b 4
o Ln la segunda pasada, examlna de nuevo el archlvo de enLrada
! 1raduce cada cdlgo de operacln en una secuencla de blLs que
represenLa esa operacln en lengua[e de mqulna.
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

! 1raduce cada ldenLlflcador que represenLa una operacln de
memorla a la dlreccln dada por ese ldenLlflcador en una Labla de
slmbolos.
! Ll resulLado de la segunda pasada normalmenLe es cdlgo de
mqulna relocallzable, lo que slgnlflca que puede cargarse
empezando en cualquler poslcln L de la memorla, es declr, se suma
L a Lodas las poslclones de memorla.
! Las lnsLrucclones se forman con 16 blLs donde los 4 prlmeros blLs
son el cdlgo de la lnsLruccln, los 2 blL slgulenLes un reglsLro, los 2
blLs slgulenLes el modo de dlrecclonamlenLo y los ulLlmos 8 blLs la
dlreccln de memorla.

Cdlgo de la lnsLruccln
LCAu 1rasladar de memorla a reglsLro 0001
S1CL 1rasladar de reglsLro a memorla 0010
Auu sumar 0011

eglsLro
01 eglsLro 1
02 eglsLro 2

Modo dlrecclonamlenLo
CulnAlC 00
lnMLulA1C 10

ulreccln de memorla b=a+2. Cdlgo relocallzable
Cdlgo de la eglsLro Modo de ulreccln de
lnsLruccln dlrecclonamlenLo memorla
0001 01 00 00000000*
0011 01 10 00000010
0010 01 00 00000100*

! Sl L=00001111 (13). a esLarla en la poslcln 13 y b en la 19. Cdlgo
absoluLo
0001 01 00 00001111
0011 01 10 00000010
0010 01 00 00010011

Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

F' +:>8:F=>6@ Y 6FID=>6@ F6 675:N6
Cargador: ConslsLe en Lomar el cdlgo de mqulna relocallzable, modlflca las
dlrecclones relocallzables y ublcar las lnsLrucclones y los daLos modlflcados en las
poslclones apropladas de memorla.
Ll edlLor de enlace: ermlLe formar un solo programa a parLlr de varlos archlvos de
cdlgo de mqulna relocallzable. ulcho archlvo puede ser el resulLado de la unln
de los archlvos generados en las dlferenLes eLapas.

1. ases de un compllador
Las fases se agrupan en eLapa lnlclal y eLapa flnal.
La eLapa lnlclal comprende aquellas fases que dependen del lengua[e fuenLe y que
son en gran parLe lndependlenLes de la mqulna ob[eLo.
o lncluye los anllsls lexlco, slnLcLlco y semnLlco, generacln de cdlgo
lnLermedlo y la Labla de slmbolos.
o eallza clerLa parLe de la opLlmlzacln de cdlgo.
La eLapa flnal lncluye las parLes del complldor que depende de la mqulna ob[eLo,
las parLes que no dependen del lengua[e fuenLe slno del cdlgo lnLermedlo.
o Ln esLa eLapa se encuenLran aspecLos de la fase de opLlmlzacln de cdlgo,
generacln de cdlgo, mane[o de errores y las operaclones con la Labla de
slmbolos.

Anallzaremos las fases usando como e[emplo la slgulenLe senLencla poslclon := lnlclal +
velocldad * 60
a. Anllsls lexlco
La cadena de enLrada se reclbe como una sucesln de caracLeres. Ll anllsls lexlco
agrupa los caracLeres en secuenclas con slgnlcado colecLlvo llamado componenLe
lexlcos (palabras o Loken"), con clerLos aLrlbuLos lexlcos.
o ldenLlcador poslclon
o operador de aslgnacln :=
o ldenLlcador lnlclal
o operador +
o ldenLlcador velocldad
o operador *
o consLanLe numerlca 60
b. Anllsls slnLcLlco
Los componenLes lexlcos se agrupan para formar frases. normalmenLe las frases se
represenLan medlanLe una esLrucLura de rbol slnLcLlco, slgulendo reglas que
descrlben el lengua[e.
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

c. Anllsls semnLlco
Ln esLa eLapa se revlsa el resulLado del anllsls slnLcLlco, recopllando por e[emplo
lnformacln de Llpos y consLruyendo una represenLacln aun ms absLracLa.
d. eneracln de cdlgo lnLermedlo
Se genera en esLa fase un cdlgo lnLermedlo para una mqulna absLracLa, y es
poslble que expllclLamenLe. LsLa represenLacln debe ser fcll de produclr y fcll
de Lraduclr al programa ob[eLo.
uede Lener dlversas formas. una poslble es la llamada cdlgo de Lres dlrecclones,
que conslsLe en una secuencla de lnsLrucclones, cada una de las cuales lnvolucra a
lo sumo un operador (unarlo o blnarlo), adems de la aslgnacln Lres dlrecclones a
lo sumo (las de los operandos y la del resulLado).
Adems, deber generar nombres Lemporales para almacenar los resulLados
lnLermedlos.
ara el e[emplo, la sallda de esLa fase podrla ser:
Lemp1 := ln1oeal(60)
Lemp2 := ld26 * Lemp1
Lemp3 := ld24 + Lemp2
ld23 := Lemp3
e. CpLlmlzacln de cdlgo
Se LraLa de me[orar el cdlgo, en el senLldo de reduclr la canLldad de recursos
(Llempo y memorla) necesarlos. Algunas opLlmaclones son Lrlvlales, como por
e[emplo hacer algunas Lransformaclones dlrecLamenLe en la compllacln, en lugar
de de[arlo para la e[ecucln (susLlLulr ln1oeal(60) por 60.0). CLras pueden
requerlr un Lraba[o mucho mayor, pero me[orar slgnlcaLlvamenLe la eclencla,
normalmenLe a cosLa de ale[arse basLanLe del cdlgo orlglnal, como ellmlnar
cdlgo lnacLlvo (lnacceslble), ellmlnar varlables lnLermedlas o reslLuar senLenclas
lndependlenLes de un bucle fuera de esLe.
Muchos complladores permlLen eleglr la canLldad de opLlmacln a reallzar o no
hacerla. ara el e[emplo, una me[ora sencllla lo converLlrla en:
Lemp1 := ld26 * 60.0
ld23 := ld24 + Lemp2
f. enerador de cdlgo
Ln esLa fase nal se genera el cdlgo ob[eLo, normalmenLe cdlgo mqulna
relocallzable o ensamblador.
Se selecclonan poslclones de memorla relaLlvas o reglsLros para las varlables y cada
senLencla del cdlgo lnLermedlo se Lraduce a una secuencla de lnsLrucclones que
e[ecuLan la Larea.
g. 1abla de slmbolos
Lengua[es y AuLmaLas l lng. nelly !aneLh velasco Lscobedo

Ls una esLrucLura de daLos que conLlene un reglsLro por cada ldenLlflcador con
campos para aLrlbuLos de ldenLlflcadores.
ermlLe enconLrar rpldamenLe el reglsLro de cada ldenLlflcador y almacenar o
consulLar daLos de esLe reglsLro.
eglsLrar los ldenLlflcadores uLlllzados en el programa fuenLe
lnformacln de los aLrlbuLos de cada ldenLlflcador (Llpo, canLldad de memorla,
mblLo, argumenLo, eLc.).
La lnformacln se almacena en cada eLapa de compllacln.
h. Mane[o de errores
Los errores se locallzan y se LraLan en cada fase.
Ln lexlco, errores que lmplden formar un componenLe lexlco, en slnLaxls, errores
de reglas de esLrucLura, en semnLlca, consLrucclones que no Llenen slgnlflcado
para la operacln lmpllcada, eLc.

También podría gustarte