Nov12,Lunes
Agendaparaestaclase� JerraquíadeChomsky� Sintaxis,RestriccionesSemánticas,ySemántica� ÁrboldeSintaxisConcreta&ÁrboldeSintaxisAbstracta� AmbigüedadesSintácticas� SintaxisdeC–UnidaddeTraducción� SintaxisdeC–Sentencias� IntregraciónLex/Yacc� ResolucióndelÚltimoFinal
Prof. Esp. Ing. José María Sola 395
Prof. Esp. Ing. José María Sola 396
JerarquíadeChomskyLenguaje Gramática Autómat
aOtros Aplicación
Regular GR AF ERàRegExàLex
AnálisisLéxico
IndependientedelContexto
GIC APD BNFàEBNFàYacc
AnálisisSintáctico
SensiblealContexto
GSC MT(Autómatalinearmenteacotado)
- -
Irrestrictico GI MT - -
Prof. Esp. Ing. José María Sola 397
EspecificacióndeSintaxisySemánticaenEstándaresdeLenguajesdeProgramación
EspecificacióndeSintaxisySemán?caenEstándaresdeLenguajesdeProgramación1. Sintaxis
� ReglasSintácticas� Espeficiacióndelconstructosintácticoennotaciónbasadaen
GIC,porejemplo,K&RyBNF2. Restriccionesparaquetengasemántica
� Reglassemánticas� Restriccionessemánticassensiblesalcontextoparaqueel
constructosintácticotengansemántica,expresadasenlenguajenatural,conreferenciaaloselementossintácticosdelconstructo
3. Semántica� Definicióndelcomportamientoobservable,expresadoen
lenguajenatural
Prof. Esp. Ing. José María Sola 399
EjemplodeSintaxisySemán?ca:SentenciadeSelección
Prof. Esp. Ing. José María Sola 400
EjemplodeSintaxisySemán?ca:SentenciaIf
� Sintaxisconcreta� ArbóldeSintaxisConcreto
� EspecíficaparaunLP� Conreta� Contokens� Forma� Produectodeladerivaciónsegúnreglassintáticas
� Sintaxisabstracta� ÁrboldeSintaxisAbstracto
� GeneralparavariosLP� Conceptual� Sintokens� Semátinca� Necesariaparaelanálisissemántico
SintaxisConcretayAbstracta
if ( a ) f();
if ( b ); g(); else h();
� ASC:� ASA:
� ASC:� ASA:
Ejercicio:ObtenerlosÁrbolesdeSintaxisConcretayAbstracta
if ( a ) if( b ) g(); else h();
if ( a ) if( b ) g(); else h();
Ejercicio:DibujecadaÁrboldeDerivaciónSintác?ca
if ( a ) { if( b ){ g(); } } else { h(); }
if ( a ) { if( b ) g(); } else h();
if ( a ) { if( b ){ g(); } else { h(); } }
if ( a ) { if( b ) g(); else h(); }
¿Conclusión?� Dosderivacionesposibles� Dossemánticasposibles� Ambigüedad:
� Unasintaxisesambiguacuandopermitemásdeunárboldederivación
� ¿Quépasaenotroslenguajes?� ¿Soluciones?
� Estilo� Llavessiempre� Llavescuandoselasrequiere
� CorreccióndelaS&Sdelasentenciaif
Ejemplo:ResolucióndelaÚnicaAmbigüedadenC
Prof. Esp. Ing. José María Sola 408
AxiomadeunProgramaC
ReglasdeSintaxisparaCualquierProgramaC� ¿Quéesun“programa”?� ¿Quéincluir?� ¿Dóndecomenzar?� ¿Cúaleslaformageneral?
Prof. Esp. Ing. José María Sola 411
unidad-de-traducción declaración-externa unidad-de-traducción declaración-externa
declaración-externa
definición-de-función declaración
definición-de-función
especificadores-de-declaración? declarador sentencia-compuesta
Unidaddetraducciónydefinicióndefunción
sentencia: sentencia-expresión sentencia-compuesta sentencia-de-selección sentencia-de-iteración sentencia-etiquetada sentencia-de-salto
sentencia-expresión:
expresión? ;
Sentencia
sentencia-compuesta: { lista-de-declaraciones? lista-de-sentencias? }
lista-de-declaraciones:
declaración lista-de-declaraciones declaración
lista-de-sentencias:
sentencia lista-de-sentencias sentencia
Sentenciacompuesta(¿C11?)
sentencia-de-selección: if ( expresión ) sentencia if ( expresión ) sentencia else sentencia switch ( expresión ) sentencia
Sentenciadeselección
sentencia-de-iteración: while ( expresión ) sentencia do sentencia while ( expresión ) ; for ( expresión? ; expresión? ; expresión? ) sentencia
Sentenciadeiteración(¿C11?)
sentencia-etiquetada: case expresión-constante : sentencia default : sentencia identificador : sentencia sentencia-de-salto: continue ; break ; return expresión? ; goto identificador ;
Sentenciae?quetadaydesalto
Prof. Esp. Ing. José María Sola 419
Prof. Esp. Ing. José María Sola 420
Lex&Yacc:%token&y.tab.h� %tokenindicalosterminalesotokensdelagramática� Elheadery.tab.hlogenerayacccuandoseindicalaopción–ddesdelalíneadecomando,ycontienelasdeclaracionesdetokens
� Elheaderlodebeincluirelprogramaresultantedelex
Prof. Esp. Ing. José María Sola 421
� Scanner.l
� Lex� Scanner.c
� CC� Scanner.obj
� Parser.y
� Yacc� Parser.tab.c� Parser.tab.h
� CC� Parser.tab.obj
� Prog.c
� CC� Prog.obj+� Parser.tab.obj� Scanner.obj
� Link� Prog.exe
� Funciones� yyacc()� yylex()
GeneracióndeProgramadesdeespeificacionesLexyYacc
Prof. Esp. Ing. José María Sola 422
� Ejercicios:� DefinaformlemantelaGIC� ¿HayAF?� DefinaformalmenteelAPD
� Escribirunprogramaqueinformeelvalorycuántosparéntesislorodean:� Makefile� main.c� Yacc.y� Scanner.l
LenguajeEjemplo
Prof. Esp. Ing. José María Sola 423
ExtractodeEspecificaciónLex%% [ \t\n] ; [0-9]+ {yylval = atoi(yytext);return NUMBER;} "(" {yylval = *yytext; return LPAR;} ")" {yylval = *yytext; return RPAR;} . {printf("Lex error.\n");exit(EXIT_FAILURE);} %%
Prof. Esp. Ing. José María Sola 424
ExtractodeEspecificaciónYacc%% S : NUMBER {n=$1;} | LPAR S RPAR {++ns;} ; %%
Prof. Esp. Ing. José María Sola 425
ProgramaCompleto–MakefileCFLAGS = -std=c11 -Weverything YACC = bison RM = rm -f .PHONY: clean all
all: prog prog: main.o Parser.tab.o Scanner.o $(CC) -o $@ $^ $(RM) main.o Parser.tab.h Parser.tab.o Scanner.o Scanner.c
%.tab.c %.tab.h: %.y $(YACC) -d $<
Scanner.c : Parser.tab.h clean: $(RM) prog main.o Parser.tab.h Parser.tab.o Scanner.o Scanner.c
Prof. Esp. Ing. José María Sola 426
ProgramaCompleto–main.c#include <stdio.h> int main(void){ int yyparse(void); switch(yyparse()){ case 0:{ extern unsigned ns; extern int n; printf("Se encontró %d rodeado de %d paréntesis.\n",n,ns); return 0; } case 1: printf("Error sintático.\n"); return 1; default: printf("Otro error.\n"); return 2; }
}
Prof. Esp. Ing. José María Sola 427
ProgramaCompleto–Parser.y%{ #include <stdio.h> unsigned ns; int n; int yyerror(const char *); %} %token NUMBER LPAR RPAR %% S : NUMBER {n=$1;} | LPAR S RPAR {++ns;} ; %% int yyerror(const char *s){}
Prof. Esp. Ing. José María Sola 428
ProgramaCompleto–Scanner.l%option noyywrap %{ #include <stdlib.h> #include "Parser.tab.h" %} %% [ \t\n] ; [0-9]+ {yylval = atoi(yytext);return NUMBER;} "(" {yylval = *yytext; return LPAR;} ")" {yylval = *yytext; return RPAR;} . {printf("Lex error.\n");exit(EXIT_FAILURE);} %%
Prof. Esp. Ing. José María Sola 429
PrácticayAutodiagnósticohttps://josemariasola.wordpress.com/ssl/exams/
Prof. Esp. Ing. José María Sola 430
Top Related