Mirko Manea: lavoro svolto dal 18/12/96 al 7/1/97

Il problema da risolvere consiste nella creazione di uno strumento in grado di prendere in input una stringa alfanumerica (che rappresenta il contenuto della cella del foglio) ed in grado di decidere in merito ai seguenti punti:

Il problema e` tipico della teoria dei linguaggi di programmazione e si tratta mediante la creazione di un parser. Di seguito vengono elencati i compiti svolti da tale riconoscitore e come si sono implementati (facendo riferimento anche al modello funzionale e ad oggetti).

L'idea del parser e' presentata nel diagramma ad oggetti e nel diagramma funzionale.

Analizzatore lessicale

Questa fase e` svolta dalle classi preLex e analizzatore.

La classe preLex elabora la stringa in ingresso togliendo spazi superflui e convertendo tutto in maiuscolo. La classe analizzatore stabilisce se la cella contiene un numero float, una stringa di testo o una formula da calcolare.

La classe analizzatore considera il tipo di cella ed invoca un comportamento differente per ogni possibilita`; si possono presentare i seguenti casi:

  1. tipo numero: se inizia con una cifre {0,1,2,3,4,5,6,7,8,9} o un simbolo {+,-}.
  2. tipo formula: se inizia con il simbolo di "="
  3. tipo testo: una stringa di testo se non inizia con un simbolo appartenente a {+,-,=,0,1,2,3,4,5,6,7,8,9}

Quando si cade nel primo caso si deve controllare se il numero e` sintatticamente corretto, ossia se e` inserito secondo il formato "[+/-]n[.d][[e/E][+/-]esp]", dove il numero puo` contenere dei punti di separazione delle migliaia, es. 1.234,567e-89.

Il tipo testo viene semplicemente assunto come un stringa di commento e non ha influenza sui calcoli.

Il comportamento piu` significativo che viene intrapreso e` appunto l'analisi sintattica sui token della formula

Formula Tokenizer

La classe formula realizza un tokenizzatore, ossia uno strumento in grado di prendere in input la stringa contenente la formula e restituire un'altra stringa con le unita` elementari (token) separate da spazio. A questo punto viene restiuito un oggetto composto da sequenze di numeri, lettere, singoli simboli, etc., ma senza alcuna verifica che la loro scrittura sia corretta. Questo compito viene svolto da un successivo passo di analisi sintattica.