Sie sind auf Seite 1von 6

UNIVERSIDAD TECNOLOGICA NACIONAL

Facultad Regional La Plata


Sintaxis y Semntica del Lenguaje-2012

Sintaxis y Semntica del Lenguaje


Prctica N6
Esta prctica deber resolverse en la semana del 09/05/12.
1) Escribir una gramtica para verificar la declaracin de variables en un programa
Pascal.
2) Escribir una gramtica para las siguientes sentencias de Pascal:
a) la sentencia record.
b) la sentencia while.
c) la sentencia case.
3) Escribir una gramtica para definir el encabezamiento de un procedimiento Pascal.
4) Escribir una gramtica que me permita definir esta instruccin del lenguaje C:
for (lista de expresiones; una expresin; lista de expresiones)
{
cuerpo (conjunto de sentencias)
}
donde todas las expresiones y el cuerpo pueden ser opcionales.
Algunos ejemplos de su uso son:
for (i=0 , x=0 ; i<4 ; i=i+1 )
x=x + i;
...........
for( ; i<4 ; )
{
x= x + i;
i= i + 1;
}
...........
for ( ; ; ) ; -> loop infinito
5) Escribir una gramtica para la declaracin de variables en C.
En el lenguaje C, una variable se declara:
tipo nombre_variable;
Resuelto por Infinite Visions

UNIVERSIDAD TECNOLOGICA NACIONAL


Facultad Regional La Plata
Sintaxis y Semntica del Lenguaje-2012

tipo nombre_variable1, nombre_variable2;


y adems es posible inicializarlas en la declaracin:
tipo var1= valor1;
tipo var2, var3= valor3; -> Slo se inicializa la variable 3
tipo var4= valor4, var5= valor5;

Gramtica

Abreviaturas:
id: identificador.
decl: declaracin.
para: parmetro.
sent: sentencia.
1. Declaracin de variables en Pascal
<decl>::= Var <listadedecl>
<listadedecl>::= <listadedecl> <unadecl> | <unadecl>
<unadecl>::= <listadeid> : <tipo>
<listadeid>::= <listadeid> <id> | <id>
<id>::= <id> <letra> | <id> <dgito> | <letra>
<tipo>::= real | string | ...
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
2. Registro
Ej:
Type
alumno=record
nombre:string;
legajo,cantMaterias:integer;
prom:real;
dni:integer;
end;
<registro>::= Type <id> = record <listadedecl> end;
Resuelto por Infinite Visions

UNIVERSIDAD TECNOLOGICA NACIONAL


Facultad Regional La Plata
Sintaxis y Semntica del Lenguaje-2012

<id>::= <id> <letra> | <id> <dgito> | <letra>


<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
<listadedecl>::= <listadedecl> <unadecl> | <unadecl>
<unadecl>::= <listadeid> : <tipo>;
<listadeid>::= <listadeid>, <id> | <id>
<tipo>::= real | string | ...
3. Procedimiento en Pascal
<procedimiento>::= Procedure <id> | Procedure <id> (<listadepara>);
<id>::= <id> <letra> | <id> <dgito> | <letra>
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
<listadepara>::= <unpara> | <unpara>; <listadepara>
<unpara>::= <listadeid> : <tipo> | var <listadeid> : <tipo>
<listadeid>::= <id>, <listadeid> | <id>
<tipo>::= real | string | ...
4. Encabezamiento de una funcin en Pascal
<funcin>::= Function <id> : <tipo>; | Function <id> (<listadepara>) : <tipo>;
<id>::= <id> <letra> | <id> <dgito> | <letra>
<listadepara>::= <unpara> | <unpara>; <listadepara>
<unpara>::= <listadeid> : <tipo> | var <listadeid> : <tipo>
<listadeid>::= <id>, <listadeid> | <id>
<tipo>::= real | string | ...
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
5. While en Pascal
<mientras>::= While (<condicin>) do <sentencias>
<condicin>::= <simple> | <compuesta>
<compuesta>::= <simple> <conector> <simple>
<conector>::= and | or
<simple>::= <cond> | not <cond>
<cond>::= <id> <comparacin> <id>
<comparacin>::= > | >= | < | <= | = | <>
<sentencias>::= <sent> | Begin <listadesent> end;
<listadesent>::= <listadesent> <sent> | <sent>
<sent>::= <sent> | <asignacin> | while | for | case | if
Resuelto por Infinite Visions

UNIVERSIDAD TECNOLOGICA NACIONAL


Facultad Regional La Plata
Sintaxis y Semntica del Lenguaje-2012

<id>::= <id> <letra> | <id> <dgito> | <letra>


<tipo>::= real | string | ...
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9

6. Llamada a una funcin


<llamada>::= <id>:= <id> | <id>:= <id> (<listadepara>)
<listadepara>::= <unpara> | <unpara>; <listadepara>
<unpara>::= <unpara> <id> | <id>
<id>::= <id> <letra> | <id> <dgito> | <letra>
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
7. Case
ej:Caseof<id>
<opciones>
else
<sentencia>
<opciones> ::= <condicion>:<sentencia> ; |<opciones><condicion><sentencia>;
<condicion>::='<palabra>' | <entero>| <intervalo> |<lista>
<palabra>::= <letra> | <palabra> <letra>
<intervalo>::=<entero> .. <entero> | <letra> .. <letra>
<sentencia>::= <expresion> | <for> | <case> | <if> | ..
<listadepal>::= '<palabra>' | <listadepal> , '<palabra>'
<listadeent>::= <entero> | <listadeent> , <entero>
<listadeint>::= <intervalo> | <listadeint> , <intervalo>
<lista>::= <listadepal> | <listadeent> | <listadeint> | <lista> , <listadepal> | <lista> ,
<listadeent> | <lista> , <listadeint>
8. Expresion
<expresion>::=<expresion> + <termino> | .. | <expresion> | <termino>
<termino>::= <termino> + <id> | .. | <termino> | <id>
<id>::= <id> <letra> | <id> <dgito> | <letra>
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9

Resuelto por Infinite Visions

UNIVERSIDAD TECNOLOGICA NACIONAL


Facultad Regional La Plata
Sintaxis y Semntica del Lenguaje-2012

9. Asignacion
<asignacion>::= <id> := <expresion>
<expresion>:= <expresion> <conector><termino> | <termino>
<termino>::= <termino><conector><id> | <id> | <digito>
<conector>::=<id><letra> | <id><digito> | <letra>
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
10. Puntero
<tipopuntero>::= Type <id> = ^ <id> ;
<id>::= <id> <letra> | <id> <dgito> | <letra>
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
11. Archivo
<archivo>::= Type <id> = file of <tipodedato> ;
<id>::= <id> <letra> | <id> <dgito> | <letra>
<letra>::= a | ... | z
<dgito>::= 0 | ... | 9
<tipodedato>::= <tiposimple> | <tipoestructurado>
<tiposimple>::= <tipoordinal> | <tiporeal> | <tipopuntero>
<tipoordinal>::=<tipoordinalpredefinido> | <tipoenumerado> |<tiposubrango>
<tipopredefinido>::=<tipoentero> | char | boolean
<tipoentero>::=integer | longint
<tipoenumerado>::= <id>
<tiposubrango>::=<id>
<tiporeal>::= real
<tipopuntero>::= ^ <id>
<tipoestructurado>::= <tipoaarreglo> | <tiporegistro> | <tipofichero> | <tipostring>
<tipoconjunto>
12. declaracin de Tipos
ej:
Type

lista=^nodo;
reg=record
nombre:string;
legajo,cantMaterias:integer;
prom:real;
dni:integer;
end;

Resuelto por Infinite Visions

UNIVERSIDAD TECNOLOGICA NACIONAL


Facultad Regional La Plata
Sintaxis y Semntica del Lenguaje-2012

nodo=record
c:reg;
psig:lista;
end;
vector=array[1..30]ofinteger;
matriz=array[1..2,1..3]ofinteger;
archivo=fileofreg;
<decl>::=Type<listadedecl>;
<listadedecl>::=<listadedecl><unadecl>|<unadecl>
<unadecl>::=<listaid>=<tipo>;
<listaid>::=<listaid>,<id>|<id>
<id>::= <id> <letra> | <id> <dgito> | <letra>
<letra>::= a | ... | z
<dgito>::=0|...|9
<tipo>::=^<id>|<record>|<array>|fileof<id>|string

13. declaracin de Constantes


<decl>::= const <listadecl> ;
<listadecl>::= <listadecl>>unadecl> | <unadecl>
<unadecl>::=<listaid> = <literal> ;
<listaid>::= <listaid> , <id> | <id>
<literal>::=<literaltipopuntero> | <literaltiporeal> | <literaltipocaracter> |
<literaltipoboolean> | <literaltipostring> |<literaltipoconjunto> | <literaltipopuntero> |
<literaltipoenumerado>
---------------------------------------------------------------------------------------------------------Practica resuelta por: Infinite Visions
e-mail: infiniteutn@gmail.com
** si desean aclarar algun punto de esta practica pueden enviar un mail o para
adjuntar mas ejercicios o variantes**

Utilicemos Software Libre!!! Distribuciones Linux y LibreOffice

Resuelto por Infinite Visions

Das könnte Ihnen auch gefallen