Académique Documents
Professionnel Documents
Culture Documents
Objetivos
El significado (semntica) de una frase est directamente relacionado con su estructura sintctica Se inserta en la especificacin sintctica
Especificacin semntica
Recoge toda la informacin sintctica y semntica Elimina los smbolos que no aportan significado
Ejemplo
a=b+c;
Gramticas atribuidas
Atributos:
Reglas semnticas
Gramticas atribuidas
Tipos de atributos:
Atributos sintetizados:
Aquellos cuyo valor se calcula a partir de la informacin de los nodos hijos. Representan un flujo de informacin ascendente en el rbol Ej.: <A> <B> <C> <D> { A.a = B.b + C.c + D.d }
Atributos heredados:
Aquellos cuyo valor se calcula a partir de la informacin del nodo padre o de los hermanos
Representan un flujo de informacin descendente
Especificacin de un traductor
Definiciones dirigidas por la sintaxis (DDS) Esquemas de traduccin dirigidos por la sintaxis (ETDS)
Se asocia una regla semntica a cada regla de produccin No impone un orden en la ejecucin de las reglas semnticas
Son una extensin de las gramticas atribuidas en las que las reglas
Los atributos heredados se calculan exclusivamente a partir de los smbolos a la izquierda del atributo
Cualquier informacin heredada est disponible en el momento de ejecutar la reglas de produccin correspondiente Los flujos de informacin en el rbol de sintaxis abstracta se producen de izquierda a derecha, de arriba hacia abajo o de abajo hacia arriba. Nunca de derecha a izquierda Permiten definir traductores de una sola pasada
Son un formalismo para construir traductores de una sola pasada Emplean gramticas con atributos por la izquierda Incluyen acciones semnticas encerradas entre llaves ( { ... } ) en cualquier punto de las reglas de produccin Las acciones semnticas incluyen fragmentos de cdigo en un lenguaje de programacin
Las acciones semnticas pueden incluir instrucciones que no se refieran al clculo de atributos
Los atributos sintetizados de cada smbolo S se almacenan en la estructura de datos (objeto) que devuelve la funcin asociada al smbolo S Los atributos heredados de cada smbolo S se describen como parmetros de la funcin asociada al smbolo S Las acciones semnticas incluidas en las reglas de produccin de un smbolo S se aaden directamente al cdigo de la funcin asociada al smbolo S
A cada estado de la tabla se le puede asociar un smbolo (terminal o no terminal) que corresponde al smbolo que provoca la transicin a ese estado. Los atributos sintetizados de cada smbolo S se almacenan en una estructura de datos (objeto)
Se utiliza una pila de atributos, paralela a la pila de estados, para almacenar estas estructuras
Las acciones semnticas situadas al final de una regla se ejecutan al reducir la regla
Las acciones semnticas situadas en puntos intermedios se sustituyen por smbolos ficticios (marcadores) a los que se asocia una regla de produccin seguida de la accin semntica
Conocida la longitud de una regla, se puede saber la posicin de cada estructura de datos tomando como base la cima de la pila Los atributos heredados de un smbolo no se pueden tratar directamente, sino que se introducen como atributos sintetizados del smbolo anterior
El diseo de analizadores semnticos es una herramienta muy til dentro del desarrollo de software:
Para procesar cualquier fichero de datos almacenado en un formato descrito por un lenguaje formal se necesita un analizador semntico.
TEX (documentos)
...
Para almacenar los diseos de una herramienta CAD Para importar datos de versiones anteriores o de herramientas externas Cualquier transaccin de datos descrita por medio de un lenguaje formal
El diseo de compiladores es el origen de los analizadores semnticos. En un compilador, la entrada a analizar es un fichero escrito en un lenguaje de programacin.
El objetivo del analizador semntico, dentro de la estructura del compilador, es generar el rbol de sintaxis abstracta con toda la informacin del fichero analizado. Las etapas posteriores del compilador convierten esta estructura de datos en una descripcin en cdigo ensamblador.
Imperativos / declarativos
Expresiones
Expresiones
Caractersticas:
Definen un proceso que permite calcular un valor mediante una sucesin de operaciones bsicas.
Expresiones
Ejemplo de expresiones:
Estructura nica con todos los campos posibles y un cdigo para expresar el tipo de expresin
typedef struct { int code; int integerLiteral; float floatLiteral; Expr* left; Expr* right; ... } Expr;
Unin de varias estructuras, cada una de ellas con los campos necesarios y un cdigo para expresar el tipo de expresin.
typedef struct { int code; int intLiteral; } IntegerLiteral; typedef struct { int code; float floatLiteral; } FloatLiteral;
Expresiones Gramticas
CompExpr AritExpr1 { CompExpr.s = AritExpr1.s; } ( CompOp AritExpr2 { CompExpr.s = new Binary(Comp.s, CompExpr.s, AritExpr2.s); } )? CompOp EQ { CompOp.s = EQ }
| GT { CompOp.s = GT; }
|...
Expresiones Gramticas
Expresiones Gramticas
Expresiones Gramticas
Expresiones
Verificaciones semnticas:
Instrucciones
Describen el flujo de control de las operaciones que se llevan a cabo en una funcin.
Tipos de instrucciones:
Declaraciones Asignaciones
Estructura nica con todos los campos posibles y un cdigo para expresar el tipo de instruccin
typedef struct { int code; Expr cond; Statement* next; Statement* body; Statement* elseStm; ... } Statement;
Unin de varias estructuras, cada una de ellas con los campos necesarios y un cdigo para expresar el tipo de expresin.
typedef struct { int code; Expr cond; Statement* thenStm; Statement* elseStm; } IfStatement;
public class IfStatement extends Statement { private Expr cond; private Statement thenStm; private Statement elseStm;
Instrucciones
Instrucciones (gramtica)
Instruccion Decl | Asign | IfThen | SwitchCase | While | DoWhile | For | Break | Continue | Return | Bloque
Instrucciones (atributos)
Tabla de smbolos (ToS): es un atributo heredado en todas las instrucciones. Almacena las variables declaradas, los argumentos de las funciones, las variables y constantes globales, etc. Instruccin (inst): es un atributo sintetizado que contiene la estructura de datos asociada a la instruccin reconocida
Instrucciones Declaraciones
Gramtica:
Decl Tipo ID { Var v = Decl.ToS.add(Tipo.t,ID.lexema); Decl.inst = new Block(); } ( EQ Expr { Decl.inst.add( new AssigStm(v,Expr.s) ); } )? ( COMMA ID { v = Decl.ToS.add(Tipo.t,ID.lexema); } ( EQ Expr { Decl.inst.add( new AssigStm(v,Expr.s) ); } )? )* PYC
Instrucciones Declaraciones
Verificaciones semnticas
Acciones semnticas
Si se admite la declaracin con asignacin, el atributo inst debe contener la instruccin de asignacin. Si se admite la declaracin de una lista de variables, las asignaciones formarn un bloque de instrucciones.
Instrucciones Asignaciones
Gramtica:
Asign ID { Var v = Asign.ToS.search(ID.lexema); } EQ Expr { Asign.inst. = new AssignStm(v,Expr.s); } PYC
Verificaciones semnticas:
Gramtica:
IfThen IF LPAREN Expr RPAREN Instruccin { IfThen.inst = new IfStm(Expr.s,Instruccin.inst); } (ELSE Instruccin { IfThen.inst.setElse(Instruccin.inst); } )?
Verificaciones semnticas
Gramtica:
SwitchCase SWITCH LPAREN Expr RPAREN LBRACE { SwitchCase.inst = new SwitchCaseStm(Expr.s); } ( Case { SwitchCase.inst.addCase(Case.clause); } | Default { SwitchCase.inst.addDefault(Default.clause); } )* RBRACE
Case CASE Valor DOSP { Case.clause = new CaseClause(Valor.v); } ( Instruccion { Case.clause.add( Instruccin.inst ); } )* Default DEFAULT DOSP { Default.clause = new DefaultClause(); }
Verificaciones semnticas:
La expresin debe ser entera Los valores de las clusulas CASE no se pueden repetir No puede haber ms de una clusula DEFAULT
Gramtica:
Verificaciones semnticas
Gramtica:
DoWhile DO Instruccin WHILE LPAREN Expr RPAREN PYC { DoWhile.inst = new DoWhileStm(Expr.s,Instruccin.inst); }
Verificaciones semnticas