Diferencia entre revisiones de «Usuario:ManuelRomero/preferencias/compiladores/analisisSemático»
De WikiEducator
(→declaracion) |
|||
Línea 63: | Línea 63: | ||
===declaracion=== | ===declaracion=== | ||
<br><br/> | <br><br/> | ||
− | + | {{Definicion|'''declaracion de una variable''' es un tipo de variable seguido de una serie de identificadores que representan las variables}} | |
*Una declaracion puede ser de variables simple o un variables compuesta | *Una declaracion puede ser de variables simple o un variables compuesta | ||
*La forma de daclarar es decir el tipo de variable y luego una lista (1 o mas) de identificadores | *La forma de daclarar es decir el tipo de variable y luego una lista (1 o mas) de identificadores | ||
*Acciones a realizar | *Acciones a realizar | ||
#ninguna ya que no tenemos ninún terminal solo producciones | #ninguna ya que no tenemos ninún terminal solo producciones | ||
+ | ;Producción | ||
[[imagen:declaracion.png]] | [[imagen:declaracion.png]] | ||
;codigo en yacc | ;codigo en yacc | ||
− | variable_simple | + | variable_simple lista_identificadores |
− | | | + | |variable_compuesta identificadores_variable_compuesta |
; | ; | ||
Línea 77: | Línea 78: | ||
===identificadores=== | ===identificadores=== | ||
===variable_compuesta=== | ===variable_compuesta=== | ||
+ | *Esta producción es un poco complicada ya que puede darse dos casos en la variable compuesta | ||
+ | #Vector | ||
+ | #Matriz | ||
+ | *Esto lo detectaremos si hay un rango (vector) o si hay dos rangos (matriz) | ||
+ | |||
+ | ;Producción | ||
+ | [[imagen:variableCompuesta.png]] | ||
+ | ;codigo en yacc | ||
+ | |||
+ | |||
+ | |||
===identificadores_variable_compuesta=== | ===identificadores_variable_compuesta=== | ||
Revisión de 12:50 17 ago 2012
Contenido
PROGRAMA
- primera producción
- Producción obligatoria
- define de qué consta un programa
programa : tPROGRAMA tIDENTIFICADOR ';' declaracion_variables declaracion_acciones bloque_instrucciones
- Acciones a realizar
- Dar de alta el identificador del programa para no volver a usarlo
- Después de la última instrucción eliminamos items de la tabla de símbolos
- Para crear el XML del programa, cada vez que hay un identificador creo un tag diciendo lo que es y lo cierro al final de su ámbito
programa: tPROGRAMA tIDENTIFICADOR ';' { nivel = 0; inicializar_tabla (tabsim); /*El identificador del programa Es el primer símbolo y por lo tanto seguro que no va a exixtir, por lo que no lo buscamos*/ introducir_programa(tabsim,$2.NId,0); AbreTag(xmlin,$2.NId,nivel-1); } declaracion_variables declaracion_acciones bloque_instrucciones { eliminar_variables (tabsim, nivel); eliminar_parametros_ocultos(tabsim,nivel+1); eliminar_acciones (tabsim, nivel); eliminar_programa(tabsim); CierraTag(xmlin,$2.NId,nivel-1); } ;
declaracion_variables
- produccion optativa (puede haber o no variables en un programa)
- lista de variables que puede tener un programa
- Acciones a realizar
- ninguna ya que no tenemos ninún terminal solo producciones
- Produccion para yacc
Vemos que puede estar vacía (épsidon) o que puede contener lista de declaraciones seguido del token punto y coma ;
- Código en yaac
declaracion_variables: | lista_declaraciones ';' ;
lista_declaraciones
- En este caso va a ser una lista de declaraciones: una (declaracion) o varias declaraciones (lista_declaraciones)
- En yacc siempre usaremos una recursividad por la izquierda (ver producción)
- Acciones a realizar
- ninguna ya que no tenemos ningún terminal solo producciones
lista_declaraciones ';' declaracion | declaracion ;
declaracion
declaracion de una variable es un tipo de variable seguido de una serie de identificadores que representan las variables |
- Una declaracion puede ser de variables simple o un variables compuesta
- La forma de daclarar es decir el tipo de variable y luego una lista (1 o mas) de identificadores
- Acciones a realizar
- ninguna ya que no tenemos ninún terminal solo producciones
- Producción
- codigo en yacc
variable_simple lista_identificadores |variable_compuesta identificadores_variable_compuesta ;
variable_simple
identificadores
variable_compuesta
- Esta producción es un poco complicada ya que puede darse dos casos en la variable compuesta
- Vector
- Matriz
- Esto lo detectaremos si hay un rango (vector) o si hay dos rangos (matriz)
- Producción
- codigo en yacc