Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Lenguaje estructurado en forma sintáctica ascendente
1. Michael MielesCaballero
S7l
Compiladores 24/01/2015
Lenguaje estructurado en forma sintáctica Ascendente
Ejemplo
Entrada: Id.*.Id.+.Id
Gramática:
Expresión::=Expresión.*.Término|Expresión.+.Término|Término
Término::= Id | Número
Derivación:
Expresión Expresión.+.Término
Expresión.*.Término.+.Término
Término.*.Término.+.Término
Id.*.Término.+.Término
Definición:Pivote
Secuenciamáslargade símbolosenlaparte másizquierdade laentradaque se puedeencontrar
enla parte derechade una producción ytal que todoslossímbolosa su derechasonterminales
Ejemplo:
Si entrada es:Expresión.*.Término.+.Id
el pivote es:Expresión.*.Término
Algoritmo
1.Empezarcon la cadenade entrada
2. Intentarllegarhastael axioma,encontrandoel pivote yreduciéndolo
con la produccióncorrespondiente
Expresión.*.Término.+.IdExpresión.+.Id
Expresión.+.Término Expresión
begin
if car= i then begin scan;
if car = asig then scan else error;
B
end
elseif car= if then begin scan;
B;
if car= then scan else error;
S;
end
elseif car=write then begin scan;
B
end
else error
end;
ProcedureB;
Begin
if car= i then begin scan;
if car in [igual,noigual] then scan else
error;
if car = i then scan else error;
end
elseif car = in [true,false] then
scan
else
error
end;
2. Michael MielesCaballero
S7l
Compiladores 24/01/2015
Lenguaje estructurado en forma Léxica
Análisisléxico: Implementación deun AL
– Ejemplo:IdentificadorId::=letra(letra|digito)*
Pseudocódigo:
c :=GetChar();
if IsLetter(c) then
identificador:= “”
repeat
identificador:= identificador+ c
c :=GetChar()
until not(IsLetter(c) orIsDigit(c))
Retract()
token:=(Id,InstallName(identificador))
Accept()
Return(token)
else
fail()
– Quéocurre con x1,temp,102?? Compiladoreseintérpretes10 Análisis léxico:Implementación
de un AL – Ejemplo:constanteentera entero::=digito+
Pseudocódigo:
c :=GetChar();
if IsDigit(c) then
valor:= convertir( c)
c :=GetChar()
while IsDigit(c ) do
valor:= valor*10+ convertir(c)
c :=GetChar()
endWile
Retract()
token:=(entero,valor)
Accept()
Return(token)
else
fail()
3. Michael MielesCaballero
S7l
Compiladores 24/01/2015
Lenguaje estructurado en forma Semántica
Funcion E (VAR Arbol: Arbol)
(
E::= Identificador := E’)
c:= GetToken;
If c=´Identificador´ Then
nodo:= CreaHoja(´Identificador´, token.puntero(c));
c:=GetToken;
If c=´:=´ Then
Arbol:= CreaNodo(´:=´, nodo, NIL);
E´(nodo.dcha(Arbol))
else
Fail; error
else
Fail; error
char Semantico::operar(char tipo1, char tipo2, char operador)
{
cout<<"ttSemantico: "<<tipo1<<" "<<operador<<"
"<<tipo2<<endl;
if (tipo1 == 'I' && tipo2 == 'I')
if (operador == '/')
return 'F';
else
return 'I';
if (tipo1 == 'C' && tipo2 == 'C')
return 'C';
if (tipo1 == 'F' && tipo2 == 'F')
if (operador == '%')
return 'I';
else
return 'F';
if ( (tipo1 == 'C' && tipo2 != 'C') || (tipo2 == 'C' &&
tipo1 != 'C')) {
cout<<"Error semántico: Tipos incompatibles:
"<<tipo1<<" "<<tipo2<<" "<<operador;
}
if (tipo1 == 'I' && tipo2 == 'F') {
switch (operador) {