Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de...

39
Nov 12, Lunes

Transcript of Nov 12, Lunes 2018... · 2020-03-04 · Especificación de Sintaxis y Semán?ca en Estándares de...

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

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

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

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

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

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

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

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

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
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

�  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

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
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

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

¿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

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
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

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

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

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
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

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

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

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

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

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

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

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

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

�  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

�  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

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

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

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

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

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

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

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
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