nov 12, lunes 2018... · 2020-03-04 · especificación de sintaxis y semán?ca en estándares de...
TRANSCRIPT
![Page 1: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/1.jpg)
Nov12,Lunes
![Page 2: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/2.jpg)
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
![Page 3: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/3.jpg)
Prof. Esp. Ing. José María Sola 396
![Page 4: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/4.jpg)
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
![Page 5: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/5.jpg)
EspecificacióndeSintaxisySemánticaenEstándaresdeLenguajesdeProgramación
![Page 6: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/6.jpg)
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
![Page 7: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/7.jpg)
EjemplodeSintaxisySemán?ca:SentenciadeSelección
Prof. Esp. Ing. José María Sola 400
![Page 8: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/8.jpg)
EjemplodeSintaxisySemán?ca:SentenciaIf
![Page 9: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/9.jpg)
![Page 10: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/10.jpg)
� Sintaxisconcreta� ArbóldeSintaxisConcreto
� EspecíficaparaunLP� Conreta� Contokens� Forma� Produectodeladerivaciónsegúnreglassintáticas
� Sintaxisabstracta� ÁrboldeSintaxisAbstracto
� GeneralparavariosLP� Conceptual� Sintokens� Semátinca� Necesariaparaelanálisissemántico
SintaxisConcretayAbstracta
![Page 11: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/11.jpg)
if ( a ) f();
if ( b ); g(); else h();
� ASC:� ASA:
� ASC:� ASA:
Ejercicio:ObtenerlosÁrbolesdeSintaxisConcretayAbstracta
![Page 12: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/12.jpg)
![Page 13: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/13.jpg)
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(); }
![Page 14: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/14.jpg)
¿Conclusión?� Dosderivacionesposibles� Dossemánticasposibles� Ambigüedad:
� Unasintaxisesambiguacuandopermitemásdeunárboldederivación
� ¿Quépasaenotroslenguajes?� ¿Soluciones?
� Estilo� Llavessiempre� Llavescuandoselasrequiere
� CorreccióndelaS&Sdelasentenciaif
![Page 15: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/15.jpg)
Ejemplo:ResolucióndelaÚnicaAmbigüedadenC
Prof. Esp. Ing. José María Sola 408
![Page 16: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/16.jpg)
![Page 17: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/17.jpg)
AxiomadeunProgramaC
![Page 18: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/18.jpg)
ReglasdeSintaxisparaCualquierProgramaC� ¿Quéesun“programa”?� ¿Quéincluir?� ¿Dóndecomenzar?� ¿Cúaleslaformageneral?
Prof. Esp. Ing. José María Sola 411
![Page 19: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/19.jpg)
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
![Page 20: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/20.jpg)
![Page 21: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/21.jpg)
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
![Page 22: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/22.jpg)
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?)
![Page 23: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/23.jpg)
sentencia-de-selección: if ( expresión ) sentencia if ( expresión ) sentencia else sentencia switch ( expresión ) sentencia
Sentenciadeselección
![Page 24: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/24.jpg)
sentencia-de-iteración: while ( expresión ) sentencia do sentencia while ( expresión ) ; for ( expresión? ; expresión? ; expresión? ) sentencia
Sentenciadeiteración(¿C11?)
![Page 25: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/25.jpg)
sentencia-etiquetada: case expresión-constante : sentencia default : sentencia identificador : sentencia sentencia-de-salto: continue ; break ; return expresión? ; goto identificador ;
Sentenciae?quetadaydesalto
![Page 26: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/26.jpg)
Prof. Esp. Ing. José María Sola 419
![Page 27: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/27.jpg)
Prof. Esp. Ing. José María Sola 420
![Page 28: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/28.jpg)
Lex&Yacc:%token&y.tab.h� %tokenindicalosterminalesotokensdelagramática� Elheadery.tab.hlogenerayacccuandoseindicalaopción–ddesdelalíneadecomando,ycontienelasdeclaracionesdetokens
� Elheaderlodebeincluirelprogramaresultantedelex
Prof. Esp. Ing. José María Sola 421
![Page 29: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/29.jpg)
� 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
![Page 30: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/30.jpg)
� Ejercicios:� DefinaformlemantelaGIC� ¿HayAF?� DefinaformalmenteelAPD
� Escribirunprogramaqueinformeelvalorycuántosparéntesislorodean:� Makefile� main.c� Yacc.y� Scanner.l
LenguajeEjemplo
Prof. Esp. Ing. José María Sola 423
![Page 31: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/31.jpg)
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
![Page 32: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/32.jpg)
ExtractodeEspecificaciónYacc%% S : NUMBER {n=$1;} | LPAR S RPAR {++ns;} ; %%
Prof. Esp. Ing. José María Sola 425
![Page 33: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/33.jpg)
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
![Page 34: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/34.jpg)
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
![Page 35: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/35.jpg)
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
![Page 36: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/36.jpg)
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
![Page 37: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/37.jpg)
PrácticayAutodiagnósticohttps://josemariasola.wordpress.com/ssl/exams/
Prof. Esp. Ing. José María Sola 430
![Page 38: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/38.jpg)
![Page 39: Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de Lenguajes de Programación 1. Sintaxis Reglas Sintácticas Espeficiación del constructo](https://reader033.vdocuments.mx/reader033/viewer/2022042112/5e8d561f06a04452b2290ff6/html5/thumbnails/39.jpg)