Está en la página 1de 5

SINTAXIS DE MODULA2

METASIMBOLOS
Utilizaremos la notacin BNF (Backus-Naur Form) para definir las reglas sintctivas que definen el lenguaje Modula-2. En esta notacin se emplean los cinco metasimbolos siguientes: = Metasimbolo de definicin. El elemento a su izquierda se puede desarrollar segun el esquema de la derecha. x Metasimbolo de alternativa. Puede elegirse uno y slo uno de los elementos separados por este metasimbolo. Metasimbolos de repeticin. Los elementos incluidos dentro de ellos se pueden repetir cero o ms veces. [ ] Metasimbolos de opcin. Los elementos incluidos dentro de ellos pueden ser utilizados o no. ( ) Metasimbolos de agrupacin. Agrupan los elementos incluidos en su interior.

UNIDAD DE COMPILACIN
Unidad_de_compilacin ::= Mdulo_programa | Mdulo_definicin | Mdulo_implementacin Cabecera_mdulo Bloque Identificador . Cabecera_definicin {Definicin_de_mdulo} END Identificador . IMPLEMENTATION Mdulo_programa MODULE Identificador [Prioridad] ; {Lista_importados ;} DEFINITION MODULE Identificador ; {Lista_importados ;} [Lista_exportados ;] [FROM Identificador] IMPORT Lista_de_identificadores EXPORT [QUALIFIED] Lista_de_identificadores Expresin_constante Parte_declarativa Parte_ejecutiva END Declaracin_de_constantes | TYPE { Identificador [ = Esquema_de_tipo] ; } | Declaracin_de_variables | Cabecera_subprograma {Declaracin} Declaracin_de_constantes | Declaracin_de_tipos | Declaracin_de_variables | Declaracin_subprograma | Declaracin_mdulo CONST {Asociacin_constante ;} Identificador = Expresin_constante

Mdulo_programa ::=

Mdulo_definicin ::=

Mdulo_implementacin ::= Cabecera_mdulo ::=

Cabecera_definicin ::=

Lista_importados ::=

Lista_exportados ::= Prioridad ::= Bloque ::=

Definicin_de_mdulo ::=

DECLARACIONES
Parte_declarativa ::= Declaracin ::=

Declaracin_de_constantes ::= Asociacin_constante ::=

- 1 -

SINTAXIS DE MODULA2
Declaracin_de_tipos ::= Definicin_de_tipo ::= Esquema_de_tipo ::= TYPE {Definicin_de_tipo ;} Identificador = Esquema_de_tipo Tipo_simple | Tipo_conjunto | Tipo_formacin | Tipo_registro | Tipo_puntero | Tipo_subprograma Identificador_de_tipo | Tipo_enumerado | Tipo_subrango (Lista_de_identificadores) [Identificador_de_tipo] [Expresin_constante .. Expresin_contante] SET OF Tipo_simple ARRAY Tipo_simple{,Tipo simple} OF Esquema_de_tipo RECORD Secuencia_de_listas_de_campos END

Tipo_simple ::=

Tipo_enumerado ::= Tipo_subrango ::=

Tipo_conjunto ::= Tipo_formacin ::= Tipo_registro ::=

Secuencia_de_listas_de_campos ::= Lista_de_campos {; Lista_de_campos} Lista_de_campos ::= [Lista_de_identificadores : Esquema_de_tipo | Parte_variante] CASE [Identificador] : Identificador_de_tipo OF Variante { | Variante} [ELSE Secuencia_de_listas_de_campos] END Lista_de_valores : Secuencia_de_listas_de_campos POINTER TO Esquema_de_tipo PROCEDURE [Lista_de_tipos_formales]

Parte_variante ::=

Variante ::= Tipo_puntero ::= Tipo_subprograma ::=

Lista_de_tipos_formales ::=([[VAR] Tipo_formal{, [VAR] Tipo_formal}) [: Identificador_de_tipo] Declaracin_de_variables ::= Lista_de_variables ::= VAR {Lista_de_variables ;} Lista_de_identificadores : Esquema_de_tipo

Declaracin_subprograma ::=Cabecera_subprograma ; Bloque Identificador ; Cabecera_subprograma ::= Parmetros_formales ::= PROCEDURE Identificador [Parmetros_formales] ([Grupo_de_parmetros {; Grupo_de_parmetros}]) [: Identificador_de_tipo] [VAR] Lista_de_identificadores : Tipo_formal MODULE Identificador [Prioridad] ; {Lista_importados ;} [Lista_exportados ;] Bloque Identificador ;

Grupo_de_parmetros ::= Declaracin_mdulo ::=

- 2 -

SINTAXIS DE MODULA2
SENTENCIAS EJECUTABLES
Parte ejecutiva ::= [BEGIN Secuencia_de_sentencias] Sentencia {; Sentencia} [Sentencia_de_asignacin| Sentencia_de_llamada_a_procedimiento | Sentencia_IF | Sentencia_CASE | Sentencia_WHILE | Sentencia_REPEAT | Sentencia_LOOP | Sentencia_FOR | Sentencia_WITH | Sentencia_RETURN | Sentencia EXIT] Variable := Expresin

Secuencia_de_sentencias ::= Sentencia ::=

Sentencia_de_asignacin ::=

Sentencia_de_llamada_a_procedimiento ::=(Identificador_de_procedimiento | Variable) [Parametros_de_llamada] Sentencia_IF ::= IF Expresin THEN Secuencia_de_sentencias {ELSIF Expresin THEN Secuencia_de_sentencias} [ELSE Secuencia_de_sentencias] END CASE Expresin OF Caso {| Caso} [ELSE Secuencia_de_sentencias] END Lista_de_valores : Secuencia_de_sentencias WHILE Expresin DO Secuencia_de sentencias END REPEAT Secuencia_de_sentencias UNTIL Expresin LOOP Secuencia_de_sentencias END FOR Identificador_de_variable := Expresin TO Expresin [BY Expresin_constante] DO Secuencia_de_sentencias END WITH Variable DO Secuencia_de_sentencias END RETURN [Expresin] EXIT

Sentencia_CASE ::=

Caso ::= Sentencia_WHILE ::=

Sentencia_REPEAT ::=

Sentencia_LOOP ::=

Sentencia_FOR ::=

Sentencia_WITH ::=

Sentencia_RETURN ::= Sentencia_EXIT ::=

EXPRESIONES - 3 -

SINTAXIS DE MODULA2
Lista_de_valores ::= Valores ::= Expresin_contante ::= Valores {, Valores} Expresin_constante [.. Expresin_constante] Expresin_constante_simple [Operador_comparador Expresin_constante_simple] [+ | -] Trmino_constante {Operador_sumador Trmino_contante} Factor_constante {Operador_multiplicador Factor_constante} Identificador constante | Nmero | Ristra | Conjunto | (Expresin constante) | NOT Factor_constante | Carcter_en_octal ([Lista de expresiones]) Expresin {, Expresin} Expresin_simple [Operador_comparador Expresin_simple] [+ | -] Trmino {Operador_sumador Trmino} Factor {Operador_multiplicador Trmino} Variable | Identificador_de_procedimiento | Identificador_de_funcin | Identificador_de_constante | Nmero | Ristra | Conjunto | (Expresin) | NOT Factor | Carcter_en_octal | Llamada_a_funcin (Identificador_de_funcin | Variable) [Parmetros_de_llamada] = | <> | # | < | > | <= | > | >= | IN + | - | OR * | / | DIV | MOD | & | AND

Expresin_constante_simple ::=

Trmino_constante ::=

Factor_constante ::=

Parmetros_de_llamada ::= Lista_de_expresiones ::= Expresin ::=

Expresin_simple ::= Trmino ::= Factor ::=

Llamada_a_funcin ::=

Operador_comparador ::= Operador_sumador ::= Operador_multiplicador ::=

ELEMENTOS BSICOS
Tipo_formal ::= Variable ::= [ARRAY OF] Identificador_de_tipo (Identificador_de_variable | Identificador_de campo) {.Identificador_de_campo | [Lista_de_expresiones] | ^} [Identificador_de_tipo] {Lista_de_elementos} [Elementos {, Elementos}]

Conjunto ::= Lista_de_elementos ::=

- 4 -

SINTAXIS DE MODULA2
Elementos ::= Ristra ::= Nmero ::= Nmero_entero ::= Expresin_constante[.. Expresin_constante] {Carcter} | {Carcter} Nmero_entero | Nmero_real dgito {dgito} | dgito_octal {dgito_octal}B | dgito_hexadecimal {digito_hexadecimal}H dgito | A | B | C | D | E | F dgito_octal | 8 | 9 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 dgito {dgito} . {digito} [escala] E [+ | -] dgito {dgito} dgito_octal{digito_octal}C Identificador {, Identificador} Identificador {. Identificador} letra {letra | dgito} A M Y k w | | | | | B N Z l x | | | | | C O a m y | | | | | D P b n z | | | | | E Q c o | | | | F R d p | | | | G S e q | | | | H T f r | | | | I U g s | | | | J V h t | | | | K W i u | | | | L X j v | | | |

dgito_hexadecimal ::= dgito ::= dgito_octal ::= Nmero_real ::= escala ::= Carcter_en_octal ::= Lista_de_identificadores ::= Identificador_de_XXXX ::= Identificador ::= letra ::=

- 5 -

También podría gustarte