<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://es.wikieducator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://es.wikieducator.org/index.php?action=history&amp;feed=atom&amp;title=Usuario%3AManuelRomero%2Fcompiladores%2FAS%2FdeclaracionVariables</id>
		<title>Usuario:ManuelRomero/compiladores/AS/declaracionVariables - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://es.wikieducator.org/index.php?action=history&amp;feed=atom&amp;title=Usuario%3AManuelRomero%2Fcompiladores%2FAS%2FdeclaracionVariables"/>
		<link rel="alternate" type="text/html" href="https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;action=history"/>
		<updated>2026-06-19T22:11:09Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.23.14</generator>

	<entry>
		<id>https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;diff=16433&amp;oldid=prev</id>
		<title>ManuelRomero: /* lista_declaraciones */</title>
		<link rel="alternate" type="text/html" href="https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;diff=16433&amp;oldid=prev"/>
				<updated>2015-01-07T18:24:11Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;lista_declaraciones&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revisión de 18:24 7 ene 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==lista_declaraciones==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==lista_declaraciones==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Definicion|'''Una lista''' de elementos &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;uno o varios elementos}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Definicion|'''Una lista''' de elementos &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;consite en '''''&lt;/ins&gt;uno&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''''' &lt;/ins&gt;o &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''''&lt;/ins&gt;varios&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''''' &lt;/ins&gt;elementos}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*En este caso va a ser una lista de declaraciones: '''una (declaracion) o varias declaraciones (lista_declaraciones)'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*En este caso va a ser una lista de declaraciones: '''una (declaracion) o varias declaraciones (lista_declaraciones)'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*En yacc siempre usaremos&amp;#160; una recursividad por la izquierda (ver producción)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*En yacc siempre usaremos&amp;#160; una recursividad por la izquierda (ver producción)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 28:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 28:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==declaracion==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==declaracion==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ManuelRomero</name></author>	</entry>

	<entry>
		<id>https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;diff=12221&amp;oldid=prev</id>
		<title>ManuelRomero en 09:58 23 abr 2013</title>
		<link rel="alternate" type="text/html" href="https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;diff=12221&amp;oldid=prev"/>
				<updated>2013-04-23T09:58:28Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revisión de 09:58 23 abr 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{:Usuario:ManuelRomero/compiladores/AS/nav}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==declaracion_variables==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==declaracion_variables==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*produccion optativa (puede haber o no variables en un programa)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*produccion optativa (puede haber o no variables en un programa)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ManuelRomero</name></author>	</entry>

	<entry>
		<id>https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;diff=8597&amp;oldid=prev</id>
		<title>ManuelRomero: Página creada con '==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 q…'</title>
		<link rel="alternate" type="text/html" href="https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/compiladores/AS/declaracionVariables&amp;diff=8597&amp;oldid=prev"/>
				<updated>2012-08-18T23:44:18Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con &amp;#039;==declaracion_variables== *produccion optativa (puede haber o no variables en un programa) *&amp;#039;&amp;#039;lista de variables&amp;#039;&amp;#039; que puede tener un programa *Acciones a realizar #ninguna ya q…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==declaracion_variables==&lt;br /&gt;
*produccion optativa (puede haber o no variables en un programa)&lt;br /&gt;
*''lista de variables'' que puede tener un programa&lt;br /&gt;
*Acciones a realizar&lt;br /&gt;
#ninguna ya que no tenemos ninún terminal solo producciones&lt;br /&gt;
*Produccion para yacc&lt;br /&gt;
 [[Archivo:declaracionVariables.png]]&lt;br /&gt;
Vemos que puede estar vacía (épsidon) o que puede contener '''lista de declaraciones''' seguido del token  '''punto y coma'''  ''';'''&lt;br /&gt;
;Código en yaac &lt;br /&gt;
 declaracion_variables:&lt;br /&gt;
 |    lista_declaraciones ';'&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
==lista_declaraciones==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Definicion|'''Una lista''' de elementos  uno o varios elementos}}&lt;br /&gt;
*En este caso va a ser una lista de declaraciones: '''una (declaracion) o varias declaraciones (lista_declaraciones)'''&lt;br /&gt;
*En yacc siempre usaremos  una recursividad por la izquierda (ver producción)&lt;br /&gt;
*Acciones a realizar&lt;br /&gt;
#ninguna ya que no tenemos ningún terminal solo producciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
   lista_declaraciones ';' declaracion&lt;br /&gt;
|    declaracion&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==declaracion==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Definicion|'''declaracion de una variable''' es un tipo de variable seguido de una serie de identificadores que representan las variables}}&lt;br /&gt;
*Una declaracion puede ser de variables simple o un variables compuesta&lt;br /&gt;
*La forma de daclarar es decir el tipo de variable y luego una lista (1 o mas) de  identificadores&lt;br /&gt;
*Acciones a realizar&lt;br /&gt;
#ninguna ya que no tenemos ninún terminal solo producciones&lt;br /&gt;
;Producción &lt;br /&gt;
[[imagen:declaracion.png]]&lt;br /&gt;
;codigo en yacc&lt;br /&gt;
  variable_simple lista_identificadores&lt;br /&gt;
 |variable_compuesta identificadores_variable_compuesta&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
==variable_simple==&lt;br /&gt;
;Producción&lt;br /&gt;
[[imagen:variableSimple.png]]&lt;br /&gt;
;Atributos&lt;br /&gt;
 %type&amp;lt;tipo&amp;gt; variable_simple &lt;br /&gt;
&amp;lt;source lang=c&amp;gt; &lt;br /&gt;
TIPO_VARIABLE tipo;&lt;br /&gt;
 typedef enum {&lt;br /&gt;
        DESCONOCIDO,&lt;br /&gt;
        ENTERO,&lt;br /&gt;
        BOOLEANO,&lt;br /&gt;
        CHAR,&lt;br /&gt;
        CADENA,&lt;br /&gt;
	ENUMERATIVO&lt;br /&gt;
  } TIPO_VARIABLE;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
;Acción&lt;br /&gt;
*Asignar al atributo el valor de tipo de variable&lt;br /&gt;
;Código Yacc&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
variavariable_simple:&lt;br /&gt;
     tENTERO{&lt;br /&gt;
          DEBUGA(&amp;quot;variable_simple: tipo entero\n&amp;quot;,DVARIABLES,debug);&lt;br /&gt;
          $$=ENTERO;&lt;br /&gt;
     }&lt;br /&gt;
|    tCARACTER{&lt;br /&gt;
          DEBUGA(&amp;quot;variable_simple: tipo caracter\n&amp;quot;,DVARIABLES,debug);&lt;br /&gt;
          $$=CHAR;&lt;br /&gt;
     }&lt;br /&gt;
|    tBOOLEANO{&lt;br /&gt;
          DEBUGA(&amp;quot;variable_simple: tipo booleano\n&amp;quot;,DVARIABLES,debug);&lt;br /&gt;
          $$=BOOLEANO;&lt;br /&gt;
        &lt;br /&gt;
     }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lista_identificadores==&lt;br /&gt;
;Producción&lt;br /&gt;
[[Image:ListaIdentificadores.png]]&lt;br /&gt;
;Atributos&lt;br /&gt;
&lt;br /&gt;
;Acción&lt;br /&gt;
:Análisis semántico: Verificar que no existe dicho identificador en la tabla de símbolos a ese nivel&lt;br /&gt;
:Tabla de simbolos: Dar de alta el identificador con el tipo de variable heredado o sintetizado&lt;br /&gt;
;Código Yacc&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
lista_identificadores:&lt;br /&gt;
     tIDENTIFICADOR{&lt;br /&gt;
        if (($1.PSimbolo==NULL)||($1.PSimbolo-&amp;gt;nivel!=nivel)){&lt;br /&gt;
            char msg[200];&lt;br /&gt;
            introducir_variable(tabsim,$1.NId,$&amp;lt;tipo&amp;gt;0,nivel,0);&lt;br /&gt;
            &lt;br /&gt;
            sprintf(msg,&amp;quot;identificadores:tIDENTIFICADOR -&amp;gt;introducir_variable &amp;lt;%s&amp;gt;&amp;quot;,$1.NId);&lt;br /&gt;
            DEBUGA(msg,DVARIABLES,debug);&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
             char msg[100];&lt;br /&gt;
             sprintf(msg,&amp;quot;Identificador %s ya utilizado&amp;quot;,$1.NId);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
        }&lt;br /&gt;
       AbreTag(xmlin,$1.NId,nivel);&lt;br /&gt;
       CierraTag(xmlin,$1.NId,nivel);   &lt;br /&gt;
     }&lt;br /&gt;
|    lista_identificadores ',' tIDENTIFICADOR{&lt;br /&gt;
        if (($3.PSimbolo==NULL)||$3.PSimbolo-&amp;gt;nivel!=nivel){&lt;br /&gt;
            char msg[200];&lt;br /&gt;
            introducir_variable(tabsim,$3.NId,$&amp;lt;tipo&amp;gt;0,nivel,0);&lt;br /&gt;
            sprintf(msg,&amp;quot;identificadores: identificadores ',' tIDENTIFICADOR -&amp;gt;introducir_variable &amp;lt;%s&amp;gt;&amp;quot;,$3.NId); &lt;br /&gt;
            DEBUGA(msg,DVARIABLES,debug);&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
             char msg[100];&lt;br /&gt;
             sprintf(msg,&amp;quot;Identificador %s ya utilizado&amp;quot;,$3.NId);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
        }&lt;br /&gt;
       AbreTag(xmlin,$3.NId,nivel);&lt;br /&gt;
       CierraTag(xmlin,$3.NId,nivel);   &lt;br /&gt;
     }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==variable_compuesta==&lt;br /&gt;
;Producción &lt;br /&gt;
[[imagen:variableCompuesta.png]]&lt;br /&gt;
&lt;br /&gt;
*Esta producción es un poco complicada ya que puede darse dos casos en la variable compuesta&lt;br /&gt;
#Vector&lt;br /&gt;
#Matriz&lt;br /&gt;
*Esto lo detectaremos si hay un rango (vector) o si hay dos rangos (matriz)&lt;br /&gt;
*Vamos a crear la produccion '''resto_variable_compuesta''' la cual puede o no empeza por rango como veremos&lt;br /&gt;
*Ademas a la produccion '''resto_variable_compuesta''' le vamos a asignar el siguiente atributo atributo&lt;br /&gt;
;Atributo&lt;br /&gt;
 '''ESTRUCTURA_VECTOR vector'''&lt;br /&gt;
 '''%type &amp;lt;vector&amp;gt; variable_compuesta resto_variable_compuesta'''&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
      	int limiteInferior;&lt;br /&gt;
      	int limiteSuperior;&lt;br /&gt;
	TIPO_VARIABLE tipoIndice;&lt;br /&gt;
}RANGO_VECTOR;&lt;br /&gt;
typedef union{&lt;br /&gt;
        RANGO_VECTOR vector;&lt;br /&gt;
	RANGO_VECTOR matriz[2];&lt;br /&gt;
}INDEX;&lt;br /&gt;
typedef struct{&lt;br /&gt;
	TIPO_VARIABLE_COMPUESTA tipoCompuesto;//si es vector o matriz&lt;br /&gt;
	TIPO_VARIABLE tipo;&lt;br /&gt;
      	INDEX indice;&lt;br /&gt;
}ESTRUCTURA_VECTOR;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
;Accion&lt;br /&gt;
*La acción '''{$$=$5;}''' preciamente pasa el valor de dicho atributo de la producción '''' resto_variable_compuesta''' a la producción '''variable_compuesta'''&lt;br /&gt;
;Código en yacc&lt;br /&gt;
 variable_compuesta:&lt;br /&gt;
 tVECTOR '[' rango']' resto_variable_compuesta{$$=$5;}&lt;br /&gt;
 ;&lt;br /&gt;
==Resto_variable_compuesta==&lt;br /&gt;
&lt;br /&gt;
;Producción&lt;br /&gt;
[[imagen:RestoVariableCompuesta.png]]&lt;br /&gt;
;Atributos&lt;br /&gt;
*Vemos los mismos que en ''''variable_compuesta''''&lt;br /&gt;
  '''ESTRUCTURA_VECTOR vector'''&lt;br /&gt;
 '''%type &amp;lt;vector&amp;gt; variable_compuesta resto_variable_compuesta'''&lt;br /&gt;
&lt;br /&gt;
;Acción&lt;br /&gt;
*Aqui sabemos si en el ''''resto_variable_compuesta'''' tenemos uno o dos rangos de índices&lt;br /&gt;
*También sabemos  cuál es el tipo base de la estructura compuesta&lt;br /&gt;
*Y recogemos el /los rangos y los cargamos en el atributo de la producción&lt;br /&gt;
*No se detectan errores semánticos&lt;br /&gt;
;Código Yacc&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
resto_variable_compuesta:&lt;br /&gt;
tDE variable_simple&lt;br /&gt;
                         {&lt;br /&gt;
			 $$.tipo=$2;&lt;br /&gt;
			 $$.tipoCompuesto=VECTOR;&lt;br /&gt;
			 $$.indice.vector=$&amp;lt;indice&amp;gt;-1;&lt;br /&gt;
			 //Aqui introduzco la variable compuesta en la tabla de simbolos sabiendo que es vector&lt;br /&gt;
                         }&lt;br /&gt;
|'[' rango']'   tDE variable_simple&lt;br /&gt;
                         {&lt;br /&gt;
                         $&amp;lt;vector&amp;gt;-1.tipo=$5;&lt;br /&gt;
			 //Aqui introduzco la variable compuesta en la tabla de simbolos sabiendo que es matriz&lt;br /&gt;
			 $$.indice.matriz[0]=$&amp;lt;indice&amp;gt;-1;&lt;br /&gt;
			 $$.indice.matriz[1]=$2;&lt;br /&gt;
			 $$.tipoCompuesto=MATRIZ;&lt;br /&gt;
                         }&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==rango==&lt;br /&gt;
;Producción &lt;br /&gt;
[[imagen:rango.png]]&lt;br /&gt;
&lt;br /&gt;
*Esta producción va a aportar información de los valores del rango así como de qué tipo son&lt;br /&gt;
&lt;br /&gt;
;Atributos&lt;br /&gt;
*Para ello hemos creado el atributo '''indice''' de tipo RANGO_VECTOR cuya composición podemos ver:&lt;br /&gt;
 RANGO_VECTOR indice;&lt;br /&gt;
 %type&amp;lt;indice&amp;gt; rango &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
      	int limiteInferior;&lt;br /&gt;
      	int limiteSuperior;&lt;br /&gt;
	TIPO_VARIABLE tipoIndice;&lt;br /&gt;
}RANGO_VECTOR;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tipoIndice puede ser '''ENTERO, CARACTER o BOOLEANO'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Acciones&lt;br /&gt;
#Comprobaciones&lt;br /&gt;
#Almacenar los valores para poderlos llevar a la tabja de símbolos&lt;br /&gt;
;Comprobaciones&lt;br /&gt;
*Como vemos el rango especifica dos valores&lt;br /&gt;
*Aquí hay que hacer comprobaciones, dando error semántico en caso de no ser respetadas&lt;br /&gt;
#Que los dos valores del rango no sean del mismo tipo  es un error sintáctico (no existe esa producción)&lt;br /&gt;
#Que el valor izquierdo sea estrictamente menor que el derecho hay que comprobarlo&lt;br /&gt;
#En caso de haber un sólo valor que sea entero en este caso el límite inferior lo tomaremos como 0 (DUDA A CONSULTAR)&lt;br /&gt;
;tabla de símbolos&lt;br /&gt;
*Necesitamos los valores de límite inferior y superior &lt;br /&gt;
*También necesitamos saber de qué tipo son los índices ('''ENTERO, BOOLEANO, CARACTER''') son los permitidos&lt;br /&gt;
;Código de yacc con las comprobaciones realizadas es el siguiente&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rango:  tCONSTENTERA     tPTO tPTO   tCONSTENTERA&lt;br /&gt;
        {&lt;br /&gt;
         $$.tipoIndice=ENTERO;&lt;br /&gt;
          //verificar rangos correctos&lt;br /&gt;
            if ($1&amp;gt;$4){//Rango incorrecto&lt;br /&gt;
                char msg[100];&lt;br /&gt;
                sprintf(msg,&amp;quot;Rango incorrecto %d debe ser menor que %d&amp;quot;,$1,$4);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
                error_semantico(msg);&lt;br /&gt;
                CuentaErrores();&lt;br /&gt;
                $$.limiteInferior=$1;&lt;br /&gt;
                $$.limiteSuperior=$1+1;//Asigno un rango valido&lt;br /&gt;
           }else{&lt;br /&gt;
                $$.limiteInferior=$1;&lt;br /&gt;
                $$.limiteSuperior=$4;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
          &lt;br /&gt;
        | tCONSTCHAR tPTO tPTO tCONSTCHAR &lt;br /&gt;
        &lt;br /&gt;
        {&lt;br /&gt;
          $$.tipoIndice=CHAR;&lt;br /&gt;
          //verificar rangos correctos&lt;br /&gt;
	  //Verifico caracteres entre 32 y 126&lt;br /&gt;
	  //primero verifico limite inferior&lt;br /&gt;
          if (($1&amp;lt;32)||($1&amp;gt;125){&lt;br /&gt;
              char msg[100];&lt;br /&gt;
	      sprintf(msg,&amp;quot;Caracteres limite inferior no permitidos solo de a..z A..Z y no %c&amp;quot;,$1);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
             $$.limiteInferior=32; //Asigno el caracter  'a'  como limite inferior&lt;br /&gt;
          }else{&lt;br /&gt;
	   $$.limiteInferior=$1;&lt;br /&gt;
	  }&lt;br /&gt;
	  //Ahora verificamos el limite superior&lt;br /&gt;
	  &lt;br /&gt;
	   if (($4&amp;lt;33)||($4&amp;gt;126){&lt;br /&gt;
              char msg[100];&lt;br /&gt;
	      sprintf(msg,&amp;quot;Caracteres limite superior no permitidos solo de a..z A..Z y no %c&amp;quot;,$4);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
             $$.limiteSuperior=126; //Asigno el caracter  'z'  como limite inferior&lt;br /&gt;
          }else{&lt;br /&gt;
	   $$.limiteInferior=$1;&lt;br /&gt;
	  }&lt;br /&gt;
	  //Ahora verifico los rangos que el inferior sea mayor que el superior&lt;br /&gt;
          if ($1&amp;gt;=$4){//Rango incorrecto&lt;br /&gt;
             char msg[100];&lt;br /&gt;
             sprintf(msg,&amp;quot;Rango de caracteres incorrecto %c debe ser menor que %c&amp;quot;,$1,$4);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
             $$.limiteInferior=$1;&lt;br /&gt;
             $$.limiteSuperior=$1+1;//Asigno un rango valido&lt;br /&gt;
          }&lt;br /&gt;
          else{&lt;br /&gt;
            $$.limiteInferior=$1;&lt;br /&gt;
            $$.limiteSuperior=$4;&lt;br /&gt;
          }&lt;br /&gt;
        } &lt;br /&gt;
        | cBooleana tPTO tPTO cBooleana&lt;br /&gt;
        {   &lt;br /&gt;
            $$.tipoIndice=BOOLEANO;	&lt;br /&gt;
	    if ($1==$4){&lt;br /&gt;
             char msg[100];&lt;br /&gt;
             sprintf(msg,&amp;quot;Rango incorrecto, los extremos no pueden tener el mismo valor&amp;quot;);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
             $$.limiteInferior=0;&lt;br /&gt;
             $$.limiteSuperior=1;//Asigno un rango valido&lt;br /&gt;
	    &lt;br /&gt;
	    }else{&lt;br /&gt;
                if ($1==tTRUE){&lt;br /&gt;
                   $$.limiteInferior=1;&lt;br /&gt;
		   $$.limiteSuperior=0;&lt;br /&gt;
		}&lt;br /&gt;
                else{&lt;br /&gt;
                   $$.limiteInferior=0;&lt;br /&gt;
		   $$.limiteSuperior=1;&lt;br /&gt;
		   }&lt;br /&gt;
	     }&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
	|tCONSTENTERA{&lt;br /&gt;
	&lt;br /&gt;
	 $$.tipoIndice=ENTERO;&lt;br /&gt;
          //verificar rangos correctos&lt;br /&gt;
	  if ($1==0){&lt;br /&gt;
	            char msg[100];&lt;br /&gt;
                    sprintf(msg,&amp;quot;Indice no puede ser 0 (Cambiamos valor (+1))&amp;quot;);&lt;br /&gt;
            			/*Cambio el signo de este limite y continuo*/&lt;br /&gt;
		            error_semantico(msg);&lt;br /&gt;
	            CuentaErrores();&lt;br /&gt;
               	    $$.limiteInferior=0;&lt;br /&gt;
                    $$.limiteSuperior=1;//Asigno un rango valido&lt;br /&gt;
	          }else{&lt;br /&gt;
	               $$.limiteInferior=0;&lt;br /&gt;
                       $$.limiteSuperior=$1;&lt;br /&gt;
		   }&lt;br /&gt;
           }&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==cBooleano==&lt;br /&gt;
;Producción &lt;br /&gt;
[[imagen:cBooleano.png]]&lt;br /&gt;
;Atributos&lt;br /&gt;
 &lt;br /&gt;
 '''VALOR_BOOLEANO bool;'''&lt;br /&gt;
 '''%type&amp;lt;bool&amp;gt; cBooleana'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define TRUE            1&lt;br /&gt;
#define FALSE           0&lt;br /&gt;
&lt;br /&gt;
typedef enum{&lt;br /&gt;
        FALSE,&lt;br /&gt;
	TRUE&lt;br /&gt;
        } VALOR_BOOLEANO;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
;Acción&lt;br /&gt;
Asignamos el valor al atributo (ver código yacc)&lt;br /&gt;
;Código Yacc&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
cBooleana:&lt;br /&gt;
        tFALSE&lt;br /&gt;
        {&lt;br /&gt;
          $$=tFALSE;&lt;br /&gt;
        }&lt;br /&gt;
        |tTRUE          &lt;br /&gt;
        {$$=tTRUE;&lt;br /&gt;
        }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lista_identificadores_VC==&lt;br /&gt;
;Producción &lt;br /&gt;
[[imagen:ListaIdentificadoresVC.png]]&lt;br /&gt;
;Atributos&lt;br /&gt;
&lt;br /&gt;
;Acción&lt;br /&gt;
:Analisis semántica: Verificar que el identificador no existe en este nivel  en la tabla de símbolos&lt;br /&gt;
;Tabla de simbolos : ''Dar de alta dicho identificador con todos los atributos heredados de Vector/Matriz y rangos correspondientes''&lt;br /&gt;
Código Yacc&lt;br /&gt;
&amp;lt;source lang=C&amp;gt;&lt;br /&gt;
lista_identificadores_VC:&lt;br /&gt;
    tIDENTIFICADOR{&lt;br /&gt;
        if (($1.PSimbolo==NULL)||$1.PSimbolo-&amp;gt;nivel!=nivel){&lt;br /&gt;
	    if ($&amp;lt;vector&amp;gt;0.tipoCompuesto==VECTOR)&lt;br /&gt;
                introducir_variable_vector(tabsim,$1.NId,$&amp;lt;vector&amp;gt;0,nivel,0);&lt;br /&gt;
	    else	&lt;br /&gt;
	        introducir_variable_matriz(tabsim,$1.NId,$&amp;lt;vector&amp;gt;0,nivel,0);&lt;br /&gt;
		        }&lt;br /&gt;
        else{&lt;br /&gt;
             char msg[100];&lt;br /&gt;
             sprintf(msg,&amp;quot;Identificador %s ya utilizado&amp;quot;,$1.NId);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
        }&lt;br /&gt;
       AbreTag(xmlin,$1.NId,nivel);&lt;br /&gt;
       CierraTag(xmlin,$1.NId,nivel);   &lt;br /&gt;
     }&lt;br /&gt;
|    lista_identificadores_VC ',' tIDENTIFICADOR{&lt;br /&gt;
        if (($3.PSimbolo==NULL)||$3.PSimbolo-&amp;gt;nivel!=nivel){&lt;br /&gt;
	 if ($&amp;lt;dimension&amp;gt;0==VECTOR)&lt;br /&gt;
                introducir_variable_vector(tabsim,$3.NId,$&amp;lt;vector&amp;gt;0,nivel,0);&lt;br /&gt;
	    else	&lt;br /&gt;
	        introducir_variable_matriz(tabsim,$3.NId,$&amp;lt;vector&amp;gt;0,nivel,0);&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
             char msg[100];&lt;br /&gt;
             sprintf(msg,&amp;quot;Identificador %s ya utilizado&amp;quot;,$3.NId);&lt;br /&gt;
             /*/Aunque ya estÃ© usado ese identificador, lo incluyo en XML*/&lt;br /&gt;
             error_semantico(msg);&lt;br /&gt;
             CuentaErrores();&lt;br /&gt;
        }&lt;br /&gt;
       AbreTag(xmlin,$3.NId,nivel);&lt;br /&gt;
       CierraTag(xmlin,$3.NId,nivel);   &lt;br /&gt;
     }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==identificadores_variable_compuesta==&lt;br /&gt;
;Producción &lt;br /&gt;
[[imagen:IdentificadoresVariableCompuesta.png]]&lt;br /&gt;
&lt;br /&gt;
== declaracion_acciones==&lt;br /&gt;
== bloque_instrucciones==&lt;/div&gt;</summary>
		<author><name>ManuelRomero</name></author>	</entry>

	</feed>