• Non ci sono risultati.

Per la corretta costruzione del codice sorgente in linguaggio C sono stati svilup- pati due parser: uno per il linguaggio concettuale ed uno per il linguaggio visuale delle espressioni. In generale, nel seguito, si indicher`a parser iconico, o semplice- mente parser, il parser che analizza il linguaggio di SIRENE.

Il parser del linguaggio necessita di iniziare l’analisi di ogni funzione partendo dall’icona Start. Seguendo il flusso visuale, il parser costruisce il linguaggio C in accordo al tipo di icona che sta analizzando ed alle informazioni in essa memoriz- zate. Ad esempio, l’analisi dell’icona For, creer`a il codice sorgente

for ( espressione/i di assegnazione; di condizione; di incremento ) { codice sorgente annidato }

in cui le espressioni di assegnazione, di condizione e di incremento sono il codice sorgente delle espressioni realizzate tramite l’uso del linguaggio visuale di espres- sione di SIRENE e memorizzate all’interno dell’icona stessa, mentre la sezione altro codice consiste del codice sorgente testuale associato alle ulteriori icone che sono state collegate all’icona For tramite annidamento.

Un’altra icona adibita al concetto di ciclo `e l’icona While per la quale il parser iconico fornir`a il codice sorgente

while ( espressione condizionale ) { codice sorgente annidato }

dove tra le parentesi tonde sar`a presente un’espressione condizionale generata dal parser visuale di espressione e tra le parentesi graffe sar`a inserito un ulteriore

codice sorgente annidato ed associato ad altre icone annidate visualmente all’icona While.

Diversamente, se il parser iconico dovesse analizzare l’ultima icona che rappresenta il costrutto di ciclo in SIRENE, ovvero l’icona Do..while, allora il codice sorgente generato sar`a

do ( codice sorgente annidato ) while { espressione condizionale }

dove tra le parentesi tonde sar`a presente un’espressione condizionale generata dal parser visuale di espressione e tra le parentesi graffe sar`a inserito un ulteriore codice sorgente annidato ed associato ad altre icone annidate visualmente all’icona While.

L’attivit`a del parser iconico sull’icona If..else fornir`a un codice sorgente simile a

if ( espressione condizionale ) { altro codice sorgente } else

{ altro codice sorgente }

in cui la sezione “espressione condizionale” `e costituita dal codice sorgente testuale associato agli elementi visuali del linguaggio visuale di espressione di SI- RENE e memorizzato all’interno dell’icona If..else, mentre le sezioni “altro codice sorgente” costituiscono il codice sorgente testuale associato alle icone annidate nel- le ramificazioni del costrutto iconico If..else. Il parser, analizzando l’icona If..else, verificher`a l’esistenza delle ramificazioni del flusso uscenti da quest’icona: se non esistesse una ramificazione o esistesse solo la ramificazione “Then” allora il codi- ce sorgente associato all’icona `e costituito da una sola sezione di parentesi graffe aperte e chiuse, {} con all’interno ulteriore codice sorgente generato da altre icone annidate; nel caso in cui esistesse la ramificazione dell’“Else” allora il codice sor- gente associato all’icona If..else contiene entrambe le ramificazioni con ulteriore codice sorgente generato da altre icone annidate.

Per le altre icone, il parser del linguaggio concettuale fornisce il codice sorgente generato dal parser del linguaggio visuale di espressione e memorizzato nell’icona stessa.

Una caratteristica intrinseca ed utile del parser iconico `e che il codice testuale se- gue il flusso dell’algoritmo iconico: questo significa che `e possibile avere all’interno di un algoritmo iconico parti di codice visuale non agganciate al flusso e quindi non inserite nel codice testuale. Infatti, nel caso in cui si volesse confrontare il funzionamento di parti differenti di algoritmi iconici `e necessario solo collegare o

scollegare attraverso gli archi le icone. Ad esempio, per verificare l’evoluzione di un algoritmo di ordinamento in cui `e possibile realizzare porzioni di codice iconico in maniera diversa, `e possibile collegare prima una sezione di codice per visualizzare iconograficamente il suo effetto, e, successivamente, scollegare questa porzione dal flusso dell’algoritmo per collegarne, al flusso, una seconda, ma diversa, porzione iconica e verificarne il diverso funzionamento.

Oltre al parser iconico del linguaggio `e stato sviluppato un parser iconico per il linguaggio di espressione di SIRENE. Il parser del linguaggio visuale di espressio- ne analizza elementi visuali associati alle istruzioni, variabili, costanti, parametri ed operatori e fornisce un codice sorgente testuale in accordo al tipo di elemen- to visuale che si sta analizzando. Nel caso in cui il parser dovesse analizzare un operatore, esso fornir`a un codice sorgente coincidente all’operatore analizzato. Di- versamente se il parser dovesse analizzare una variabile (in caso di una costante o di un parametro il funzionamento `e coincidente) esso verifica se tale variabile `e inserita all’interno di una funzione: se non dovesse essere all’interno di una fun- zione allora il parser fornisce il nome della variabile; se invece la variabile dovesse essere all’interno di una funzione allora il parser verifica se la posizione parame- trica della funzione, in cui la variabile `e inserita, richiede un passaggio per valore o per riferimento: nel caso in cui il passaggio sia di valore, allora il parser fornisce un codice sorgente uguale al nome della variabile, altrimenti il parser fornisce un codice sorgente uguale al nome della variabile preceduto, in questo caso, dall’ope- ratore “&”.

Nel caso in cui il parser stesse analizzando una funzione, od istruzione, esso verifica quanti parametri questa funzione richiede ed inserisce il numero corretto (e richie- sto dalla definizione della funzione) di spazi e virgole all’interno delle parentesi tonde della funzione. Questa caratteristica `e molto importante in quanto aiuta lo studente a fornire il corretto numero di variabili da passare alle funzioni. Inoltre, il parser verifica in quale libreria la funzione `e stata sviluppata, ed inserisce il nome della libreria, automaticamente, tra le dipendenze del file in cui si sta sviluppando l’algoritmo.

La formalizzazione del linguaggio di programmazione iconico proposto `e stato af- frontato attraverso la definizione della sua grammatica e dei relativi simboli. I simboli sono rappresentati dalle icone elementari e la grammatica contex-free `e stata definita come una Grammar of Visual Language (grammatica del linguaggio visuale):

GVL(N, T, S, P)

dove

• T = T1 ⋃︁ TWS;

• S = Simbolo dello Start, o punto iniziale; • P = insieme delle regole di produzione;

• T1 = I(1): I=(I, (WS,t), Ip(WS,t), Type(t), Relazione(WS,t)), UI;

• TWS = insieme delle operazioni sulla WS da modificare;

• I=(I,WS,t), Ip(WS,t), Type(I), RelAction(WS,t));

• Ip = parte fisica di I;

• Type(I) = l’insieme di Strutture dati di I; • Relazione = la relazione tra WS e I; • UI= Spazio Universale dell’icona;