Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= Un semplice esempioSezione IMPORT =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Moduli

Esistono tre tipi di moduli: i moduli di programma, i moduli di definizione e i moduli di implementazione.

Moduli di programma
Il modulo di programma è composto da varie sezioni racchiuse tra le parole chiave MODULE e END:

MODULE nomemodulo

    IMPORT
        (* moduli da importare *)

    CONST
        (* costanti *)

    TYPE
        (* tipi *)

    VAR
        (* variabili *)

    FUNCTION nomefunzione(argomenti): tiporitornato
    (* corpo della funzione *)

BEGIN
    (* istruzioni *)
END

Un modulo è una unità di compilazione che produce un programma eseguibile. Ogni modulo deve avere un nome univoco perché lo spazio dei nomi dei moduli è condiviso tra tutti i moduli del sistema. (NOTA: il compilatore prevede un meccanismo per indicare l'insieme dei moduli di interesse e le priorità in caso di collisione di nomi.)

Le costanti, i tipi, le variabili e le funzioni dichiarate all'interno del modulo sono locali al modulo, sono visibili solo all'interno del modulo ed esistono solo quando il modulo viene eseguito.

Un modulo può importare altri moduli di libreria usando l'istruzione IMPORT. Tutti gli identificatori esportati dal modulo importato diventano disponibili.

Un esempio di modulo:

MODULE Prova

IMPORT m2, date

FUNCTION InputDate(title: STRING): DATE
BEGIN
    print(title + ": ")
    s = readline()
    TRY
        d = String2Date(s)
    ELSE
        print("Invalid date.\n")
        exit(0)
    END
END

VAR
    d1, d2: DATE

BEGIN
    d1 = InputDate("Please enter the first date (yyyy-mm-dd)")
    d2 = InputDate("Please enter the second date (yyyy-mm-dd)")
    print("Number of days between the two dates: " + Diff(d2, d1) + "\n")
END

Il modulo m2runtime viene sempre importato implicitamente.

Moduli di definizione
Definiscono l'interfaccia di un modulo di implementazione. Un modulo di definizione e il corrispondente modulo di implementazione costituiscono un modulo di libreria. Un modulo di definizione definisce costanti, tipi, variabili e funzioni esportate dal modulo e messe a disposizione dei moduli clienti. Per le funzioni viene riportata solo l'intestazione, che comprende il nome della funzione, gli eventuali argomenti e l'eventuale tipo del valore di ritorno; se la funzione può generare condizioni di errore, deve essere presente anche la clausola RAISE ERROR. Esempio:

DEFINITION MODULE ApproxMath

    (* Libreria matematica rudimentale per piccoli angoli. *)

    CONST
        PI = 3.141592654
        E = 2.718281828

    FUNCTION sin(r: REAL): REAL
    FUNCTION cos(r: REAL): REAL

END

Un modulo di definizione può importare altri moduli di libreria al fine di dichiarare costanti e tipi basati su costanti e su tipi esportati da questi altri moduli.

Le variabili dichiarate nel DEFINITION MODULE esistono in una sola istanza nel programma anche se il modulo viene importato più volte.

Un modulo di definizione non richiede compilazione perchè non genera codice. Tuttavia il compilatore può essere invocato su di un modulo di definizione per eseguirne la verifica formale.

Il modulo m2runtime viene importato implicitamente.

Moduli di implementazione
Lo scopo principale del modulo di implementazione è quello di contenere il codice delle funzioni esportate nel modulo di definizione. Tuttavia il modulo di implementazione può dichiarare anche costanti, tipi, variabili e funzioni necessarie per il suo funzionamento. Il modulo di implementazione può anche importare altri moduli. La struttura di un modulo di implementazione è simile a quella di un modulo programma, salvo che manca il corpo principale di istruzioni BEGIN. Le variabili globali nel modulo di implementazione esistono in una unica istanza per un dato programma. Esempio:

DEFINITION MODULE ApproxMath

    FUNCTION sin(r: REAL): REAL
    BEGIN
        RETURN r - r*r*r/6.0
    END

    FUNCTION cos(r: REAL): REAL
    BEGIN
        RETURN 1.0 - r*r/2.0
    END

END

Le dichiarazioni delle funzioni esportate devono invece essere ripetute per intero, gli argomenti formali devono corrispondere per ordine e tipo, deve corrispondere il tipo del valore di ritorno e deve corrispondere l'eventuale dichiarazione RAISE ERROR.

Il modulo m2runtime viene importato implicitamente.

 
<= Un semplice esempioSezione IMPORT =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione