Esercitazioni di Linguaggi e Traduttori

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercitazioni di Linguaggi e Traduttori"

Transcript

1 1 Linguaggi CF e Riconoscitori 2 Introduzione a Yacc Introduzione a YACC Definizione dei simboli Codifica della grammatica Formato del programma prodotto da YACC Ambiguità e conflitti Conflitti shift-reduce e reduce-reduce Definizione di operatori e gestione delle priorità in YACC Gestione degli errori sintattici Yacc è un generatore di analizzatori sintattici che trasforma la descrizione di una grammatica contextfree LALR(1) in un programma C che riconosce ed analizza la grammatica stessa. Oltre alle regole sintattiche, è possibile specificare quali azioni devono essere eseguite in corrispondenza del riconoscimento dei vari simboli della grammatica. È necessario integrare il parser così generato con un analizzatore : alcune convenzioni ne semplificano sensibilmente l integrazione con lo scanner generato da Lex. 3 Il formato del file di ingresso 4 Dichiarazioni Il file di ingresso su cui opera Yacc è formato da tre sezioni: le dichiarazioni, le regole, le procedure Le sezioni sono separate dal simbolo %% La prima e l ultima sezione possono essere vuote. Se l ultima sezione è vuota, il secondo separatore può essere omesso. Possono essere introdotti commenti racchiusi dai simboli /* e */. Un file Yacc inizia con la sezione delle dichiarazioni. In essa vengono definiti i simboli terminali, il simbolo distintivo della grammatica, le regole di associatività e precedenza tra gli operatori, alcune informazioni semantiche, codice C racchiuso tra i simboli %{ e %}. I simboli non terminali della grammatica sono nomi: un nome è formato da lettere, _,. e cifre (non iniziali). I simboli terminali sono nomi o letterali: un letterale è un singolo carattere racchiuso tra apici. 5 Dichiarazioni 6 Codifica della grammatica La parola chiave %token definisce una lista di nomi di terminali, separati tra loro da uno o più spazi. Tale parola chiave può comparire più volte in questa sezione. I letterali non sono dichiarati. La parola chiave %start definisce il simbolo distintivo della grammatica. È lecita una sola occorrenza di questa parola chiave. Non è necessario dichiarare i simboli non terminali - tranne quando si vuole associare loro un valore semantico. La sezione delle regole è costituita da una o più regole del tipo: NonTerminale : CorpoDellaRegola dove NonTerminale è un nome, e CorpoDellaRegola è una sequenza di 0 o più nomi o letterali. Se per un dato non terminale esistono più produzioni, queste possono essere raggruppate tra loro e separate dal carattere. Versione 1.1 1

2 7 Esempio 8 La sezione delle procedure %token integer %start Expression %% Expression Term Factor : Expression + Term Term : Term * Factor Factor : integer ( Expression ) Tutto ciò che segue il secondo delimitatore %% forma la sezione delle procedure. Questa porzione di file viene ricopiata tale e quale in uscita. All interno di tale sezione vengono comunemente posti: le procedure semantiche usate nel corso dell analisi, l analizzatore, il corpo principale del programma. 9 Formato del programma generato 10 Il parser generato fa capo alla funzione int yyparse() Tale funzione ritorna 1 se è stato incontrato un errore nel testo in ingresso, altrimenti ritorna il valore 0. Bisogna definire il corpo per la funzione void yyerror(char *) che viene invocata quando si incontra un errore. Inoltre, il programma generato non contiene il main(), che deve essere definito dal programmatore. Il parser generato presuppone l esistenza di una funzione che realizzi l analisi. Tale funzione deve restituire un numero intero positivo che definisce il token letto oppure 0, se è stata raggiunta la fine del file di ingresso. La funzione di analisi è così definita: int yylex() Il valore semantico, eventualmente associato al simbolo terminale, deve essere memorizzato nella variabile yylval. Tale variabile è allocata all interno di Yacc Parser e scanner devono accordarsi sui valori associati ai token. Tali valori possono essere scelti da Yacc o dal programmatore. I terminali introdotti come letterali sono associati al codice ASCII del carattere. Quando si introduce un terminale per mezzo della parola chiave %token, yacc associa a tale simbolo un valore intero maggiore di 256, mediante il costrutto #define del pre-processore C. Se il nome del token è seguito da un numero intero, esso viene interpretato come valore da associare al token stesso. Si possono integrare i programmi generati da Lex e da Yacc in due modi: in fase di compilazione in fase di link. Nel primo caso, il file C prodotto da Lex (il file lex.yy.c ) viene incluso nel programma generato da Yacc mediante la direttiva #include posta nella sezione delle procedure. Ciò rende le definizione dei token visibili direttamente in fase di compilazione. Versione 1.1 2

3 13 Esempio: inclusione del sorgente 14 language.y #include lex.yy.c language.l Lex Lex Yacc lex.yy.c y.tab.c #include lex.yy.c include Nel secondo caso, si chiede a Yacc (mediante l opzione -d ) di generare un file ( y.tab.h ) che contiene le definizioni dei token. Tale file deve essere incluso dallo scanner in modo che siano definiti i valori dei simboli. Di conseguenza, il file lex.yy.c, prodotto da Lex, può essere compilato dopo aver generato y.tab.c e y.tab.h tramite Yacc. Scanner e parser vengono quindi compilati separatamente ed integrati in fase di link. parser.obj 15 Esempio: compilazione separata 16 Ambiguità e conflitti in Yacc language.y Yacc #include y.tab.h language.l -d -d y.tab.h Lex Lex y.tab.c include scanner.obj #include y.tab.h lex.yy.c parser.obj Se la grammatica è ambigua, o se non è LALR(1), possono verificarsi dei conflitti. Ciò significa che l analizzatore deve scegliere tra più azioni alternative plausibili. Il problema viene, di solito, risolto modificando la grammatica per renderla non ambigua oppure fornendo indicazioni a Yacc su come comportarsi in caso di ambiguità. La seconda ipotesi richiede una comprensione adeguata dell algoritmo di analisi, per evitare di generare comportamenti scorretti. 17 Conflitti shift-reduce 18 Conflitti reduce-reduce S then E if then E if Top of Stack 1) S if E then S 2) S if E then S else S 3) S var = E Il prossimo simbolo in ingresso è else. Possono succedere due cose: ridurre le prime quattro voci dello stack, secondo la produzione 1 introdurre else nello stack secondo quanto previsto dalla produzione 2. In queste situazioni, Yacc decide, in mancanza di altri suggerimenti, di eseguire lo shift. b a Top of Stack 1) S a B 2) S B 3) B a b 4) B b Il prossimo simbolo in ingresso è $. Possono succedere due cose: ridurre le prime due voci dello stack, secondo la produzione 3 ridurre la prima voce secondo quanto previsto dalla produzione 4. In queste situazioni, Yacc decide, in mancanza di altri suggerimenti, di ridurre la regola che è stata definita per prima (la n 3). Versione 1.1 3

4 19 Definizione degli operatori e gestione delle priorità In certi casi la grammatica può essere resa volutamente ambigua al fine di limitare il numero delle regole. È necessario però fornire indicazioni sulla risoluzione delle ambiguità. Un caso tipico è dato dalle espressioni algebriche: 1) E E + E 2) E E * E 3) E ( E ) 4) E integer Questa grammatica è fortemente ambigua. 20 Operatori La regola 1 (così come la 2) è ambigua in quanto non specifica l associatività dell operatore + ( * ). Inoltre le regole 1 e 2 non specificano la precedenza tra gli operatori + e *. E possibile suggerire a Yacc come comportarsi aggiungendo due informazioni nella sezione delle dichiarazioni. La parola chiave %left introduce un operatore associativo a sinistra, %right introduce un operatore associativo a destra, %nonassoc introduce un operatore non associativo. L ordine con cui gli operatori sono dichiarati è inverso alla loro priorità. 21 Regole di risoluzione dell ambiguità 22 Esempio Ad ogni regola che contiene almeno un terminale definito come operatore, Yacc associa la precedenza ed l associatività dell operatore più a destra. Se la regola è seguita dalla parola chiave %prec, la precedenza e l associatività sono quelle dell operatore specificato. In caso di conflitto shift-reduce, viene favorita l azione adatta alla regola con la precedenza maggiore. Se la precedenza è la stessa, si usa l associatività: sinistra implica reduce, destra shift. %token integer %left + - /* lowest priority */ %left * / %left uminus /* highest priority */ %% E : E + E E - E E * E E / E - E %prec uminus ( E ) integer 23 Gestione degli errori sintattici Gestione degli errori sintattici... In genere quando un parser incontra un errore non dovrebbe terminare brutalmente l esecuzione Un compilatore in genere cerca di provvedere alla situazione per poter analizzare il resto del file, in modo da segnalare il maggior numero possibile di errori Per default, un parser generato da YACC, quando incontra un errore: segnala, tramite yyerror(), un parse error restituisce il valore 1 Il comportamento di default può essere accettabile per un semplice parser interattivo. Il simbolo predefinito error indica una condizione di errore. Esso può essere usato all interno della grammatica per consentire al parser di riprendere l esecuzione dopo un eventuale errore. stmts : /* empty statement */ stmts \n stmts exp \n stmts error \n Versione 1.1 4

5 25 Gestione degli errori sintattici Gestione degli errori sintattici... Quando il parser generato da Yacc incontra un errore, comincia a svuotare lo stack fino a che incontra uno stato in cui il simbolo error è lecito. Fa lo shift del simbolo error. Se il precedente simbolo di look-ahead è accettabile procede nell analisi. Altrimenti il parser a leggere e scartare simboli finché non ne trova uno accettabile Una semplice strategia per la gestione degli errori è quella di saltare lo statement corrente: stmt : error A volte può essere utile recuperare un delimitatore di chiusura corrispondente ad uno di apertura: primary : ( expr ) ( error ) 27 Gestione degli errori sintattici... Le strategie di recupero degli errori si basano su scommesse quando si perde la scommessa il rischio è che un errore sintattico ne produca altri spuri. Per limitare la proliferazione di errori spuri, dopo il riconoscimento di un errore, la segnalazione è sospesa finché non vengono shiftati almeno tre simboli consecutivi. È possibile riattivare immediatamente la segnalazione degli errori utilizzando la macro yyerrok. Versione 1.1 5

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici Yet Another Compiler-Compiler Generazione automatica di analizzatori sintattici 2 YACC Yet Another Compiler-Compiler YACC (Bison) è un generatore di analizzatori sintattici a partire dalla descrizione

Dettagli

Dispensa YACC. 1.1 YACC: generalità

Dispensa YACC. 1.1 YACC: generalità Dispensa YACC 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

Laboratorio di Compilatori

Laboratorio di Compilatori 1 3 Analisi lessicale Laboratorio di Compilatori a.a. 1999/2000 Esercitazioni in aula http://www.polito.it/ulisse/corsi/inf/n3070/materiale/ Marco Torchiano Dipartimento di Automatica e Informatica Tel.

Dettagli

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,

Dettagli

Analizzatori Lessicali con JLex. Giuseppe Morelli

Analizzatori Lessicali con JLex. Giuseppe Morelli Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica

Dettagli

Le direttive del Preprocessore

Le direttive del Preprocessore Le direttive del Preprocessore Prof. Orazio Mirabella Direttive Un compilatore traduce le istruzioni di un programma sorgente in linguaggio macchina Talvolta è conveniente prendere coscienza dell esistenza

Dettagli

Generatori di analizzatori lessicali e sintattici

Generatori di analizzatori lessicali e sintattici Generatori di analizzatori lessicali e sintattici 1 Analizzatori lessicali Analisi lessicale: riconoscere nella stringa di ingresso gruppi di simboli che corrispondono a specifiche categorie sintattiche.

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

#include <stdio.h> main() { - 1 -

#include <stdio.h> main() { - 1 - Un primo esempio di programma Ogni programma C deve contenere una funzione speciale chiamata main che indica il punto in cui inizia l esecuzione del programma. La funzione main è unica all interno di ogni

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo [email protected] Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Linguaggi e Traduttori: Analisi lessicale

Linguaggi e Traduttori: Analisi lessicale Linguaggi e Traduttori: Analisi lessicale Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-La) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Implementazione di DFA in C

Implementazione di DFA in C Implementazione di DFA in C Dispensa di Laboratorio di Linguaggi di Programmazione Sommario Corrado Mencar, Pasquale Lops, Stefano Ferilli Questa dispensa fornisce le linee guida per l implementazione,

Dettagli

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR: Dispensa 2 2.1 Costruzione Parsing Table LR: generalità Come tutti i parser tabellari predittivi, anche i parser LR possono essere applicati solo a parsing table senza conflitti (ossia entrate multiple)

Dettagli

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Elementi di Base. Introduzione a Python.

Elementi di Base. Introduzione a Python. Elementi di Base Introduzione a Python http://www.dia.uniroma3.it/~roselli/ [email protected] Credits Materiale a cura del Prof. Franco Milicchio Panoramica Elementi di base della sintassi (struttura,

Dettagli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Dettagli

Linguaggi formali e compilazione

Linguaggi formali e compilazione Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2015/2016 Linguaggi formali e compilazione Che cosa è Lex Lex è un generatore di scanner. Si tratta cioè di un software in grado di

Dettagli

I CARATTERI E LE STRINGHE

I CARATTERI E LE STRINGHE I CARATTERI E LE STRINGHE IL CODICE ASCII Per memorizzare i simboli grafici corrispondenti ai caratteri bisogna associare un numero intero a ciascuno di essi Il codice ASCII / æski/ (American Standard

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione alla programmazione in linguaggio C Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout

Dettagli

Primo programma in C

Primo programma in C Primo programma in C Struttura minima di un file C Applicazioni C in modo console Struttura del programma Commenti Direttive #include Definizione di variabili Corpo del main 2 Struttura minima di un file

Dettagli

Grammatiche Parse trees Lezione del 17/10/2012

Grammatiche Parse trees Lezione del 17/10/2012 Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,

Dettagli

Compilatori-Esempio. Compilatori-Esempio. Analisi dell input. Analisi lessicale. Sintesi ell output

Compilatori-Esempio. Compilatori-Esempio. Analisi dell input. Analisi lessicale. Sintesi ell output Laboratorio di Ingegneria Informatica I compilatori Corso di laurea specialistica in Ingegneria Informatica DFA: automi a statifiniti deterministici Analisi dell input Analisi lessicale Sintesi ell output

Dettagli

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma. Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti

Dettagli

Analisi lessicale (scanner)

Analisi lessicale (scanner) Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Ruolo dell Analizzatore lessicale Compito di un analizzatore

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

Analizzatore Lessicale Parte I Scanner

Analizzatore Lessicale Parte I Scanner Analizzatore Lessicale Parte I Scanner Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar, Pasquale Lops In questa dispensa si descrive un approccio alla costruzione di un analizzatore lessicale

Dettagli