ANTLR V.3 www.antlr.org Renzi Alberto.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Recupero debito quarto anno Primo incontro
Estendere i linguaggi: i tipi di dato astratti
Informatica Recupero debito quarto anno Terzo incontro.
Analizzatori Lessicali con JLex
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
Metodologie di Programmazione = decomposizione basata su astrazioni
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
XML Prof. Alfredo Pulvirenti. XML XML (eXtensible Markup Language) è un meta linguaggio. Può essere definito come un insieme di regole e convenzioni che.
Programmazione Procedurale in Linguaggio C++
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Derivazione tra classi
Esercizi su alberi binari
Approfondimento delle classi
Unità Didattica 2 I Linguaggi di Programmazione
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
LINGUAGGI DI PROGRAMMAZIONE
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
Linguaggi e Modelli Computazionali M Prof. Enrico Denti
Definizione ed Implementazione della rappresentazione interna delle espressioni del linguaggio PERLA di Stefano Vettor.
Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti.
Linguaggi e Modelli Computazionali LS - Prof E.Denti
CineMan Linguaggio per la descrizione della programmazione di cinema
Corso di Laurea Specialistica in Ingegneria Informatica Itinerari aerei Progetto per lesame di Linguaggi e Modelli Computazionali LS realizzato da Stefano.
S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari.
Gianfranco Zampolini Progetto per il corso di: Linguaggi e Modelli Computazionali LS EM Linguaggio per la Descrizione di un Evento Musicale.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Linguaggi e modelli computazionali LS
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
Presentazione del problema Obiettivo: Lapplicazione di Search of Sematic Services permette di ricercare sevizi semantici, ossia servizi a cui sono associati.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Alberi binari Definizione della struttura dati: struct tree { };
1 Applet ed HTML Fondamenti di Informatica Corso D.
Attività progettuale in Linguaggi e Modelli Computazionali M
Tablabla Progetto di Valent Cristina
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
Linguaggi e modelli computazionali LS Manni Tiziano
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Lezione 3 Struttura lessicale del linguaggio
Programmazione ad oggetti
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.
Calendar Generator Progetto Linguaggi e Modelli Computazionali LS Docente: Enrico Dentidi: Alberto Renzi.
DerIntCalculator La calcolatrice per integrali e derivate Progetto di Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da: Gabriella.
Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare.
Compitino del 2004 Alberi Generici. Idea Si vuole un tipo di dato astratto che definisca una struttura ad albero in cui nodi e foglie hanno associato.
Concetti Fondamentali sulla Programmazione
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Eye Computer Sistema per l'interazione con un computer dotato di controllo oculare Linguaggi e modelli computazionali LS Realizzato da: Ciavarella Primiano.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Metodi in Java. Note Identificazione input: (il raggio è un numero reale !!!) Identificazione delle operazioni necessarie al calcolo Area=r*r*PI Circonferenza=2*r*PI.
Introduzione alle Classi e agli Oggetti in Java 1.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

ANTLR V.3 www.antlr.org Renzi Alberto

ANTLR Strumento automatico che permette di generare parser ricorsivi discendenti usando LL(*) (un estensione dell’LL(k) che usa un lookahead arbitrario per prendere decisioni) Sviluppato in Java permette di generare codice in Java, C#, Python, Ruby, C e C++. Mette a disposizione uno strumento grafico di sviluppo chiamato ANTLR-Works con il quale è possibile anche debuggare I parser generati. Supporta grammatiche EBNF e la generazione di alberi.

ANTLR Questo strumento può produrre in automatico il codice relativo a: Lexer: parte lessicale dove si definiscono i token e i separatori da ignorare Parser: parte grammaticale contenente le regole di produzione TreeParser: un parser che riconosce un albero Ognuno di questi oggetti può contenere azioni semantiche

ANTLR: schema di funzionamento Fasi: Il lexer prepara i token da passare al parser Il parser accetta uno stream dei token preparati dal lexer e cerca di riconoscere la struttura della frase. Se non vengono prodotti AST può semplicemente eseguire azioni in accordo al significato della frase. In alternativa può produrre un albero da passare ad un TreeParser TreeParser: è un parser che accetta un AST che se richiesto viene prodotto dal parser previa descrizione nella grammatica del parser.

ANTLR: relazione tra caratteri, token e AST ANTLR al posto di creare un oggetti stringa per ogni token crea token contenenti i riferimenti che permettono di recuperare il valore del token. Per l’AST (nella versione base “CommonTree” fornita con ANTLR) i nodi possono semplicemente puntare al token dal quale sono stati creati.

ANTLR: sintassi lexer Sezioni importanti: Dichiarazione del nome della classe che deve perforza coincidere con il nome della grammatica del lexer (in questo caso NostroLexer.g dovrà essere il nome del file che specifica la grammatica del lexer e NostroLexer.java sarà la classe generata) lexer grammar NostroLexer; Nella sezione degli options possiamo indicare il linguaggio di output , in questo caso Java options { language=Java; } Nella sezione @Header possiamo indicare il package e gli import necessari @header package miopackage; import java.util.*; Nella sezione @members possiamo specificare metodi e variabili che saranno disponibili nella classe “NostroLexer.java” @members public void metodo() { ..... }

ANTLR: sintassi lexer Successivamente è possibile elencare i token PLUS: '+' ; COMMENT: '//'(~('\r'|'\n'))+ {skip();}; E i separatori da ignorare: WS : ( ' ' | '\t' | '\r' | '\n' )+ {skip();} ;

ANTLR: Parser Sezioni importanti: Come per il lexer il file della grammatica deve incominciare con la dichiarazione del nome del parser: parser grammar NostroParser; Nella sezione degli options possiamo indicare il linguaggio di output, il vocabolario dei token da utilizzare, il K della grammatica e se il parser dovrà generare l’AST options { tokenVocab = CalendarLexer; language=Java; k=1; output = AST; } Nella sezione @Header possiamo indicare il package e gli import necessari @header package miopackage; import java.util.*; Nella sezione @members possiamo specificare metodi e variabili che saranno disponibili nella classe “NostroParser.java” @members public void metodo() { ..... }

ANTLR: Parser Nella sezione @rulecatch possiamo indicare una strategia personalizzata in caso di errore durante il riconoscimento di una regola @rulecatch { catch (RecognitionException ex) { …. } } Elenco delle produzioni della grammatica (metasimboli in minuscolo, Token in maiuscolo): expr: expr PLUS term | term ; term: term TIMES factor | factor ; factor: INT ;

Azioni Semantiche Metasimbolo: {operazioni preliminari} : lato destro della produzione {azioni semantiche} ; Esempio expr returns [int res] {//Eventuali inizializzazioni} : a:expr PLUS b:term {$res = $a+$b;} | c:term {$res = $c} ; E’ anche possibile associare azioni semantiche per ogni simbolo che si incontra nella parte destra a:expr {$res=$res+$a; } PLUS b:term {$res = $res+$b;} | c:term {$res = $c;} Inoltre per accedere al payload di un token richiamando la proprietà “.text”. term returns [int res] INT {$res = $INT.text;}

ANTRL: TREE ANTLR dalla versione 3 da la possibilità di creare alberi omogenei e eterogenei. Per gli alberi omogenei fornisce un implementazione di base chiamata CommonTree con il relativo CommonTreeAdaptor che funge sia da Factory che da Adaptor allo stesso tempo. Per gli alberi eterogenei è necessario implementare l’interfaccia TreeAdaptor che da la possibilità ad antlr di poter creare e navigare l’albero senza conoscerne l’implementazione.

ANTLR: Generazione dell’AST Il tipo di AST generato dal parser avviene indicando per ogni regola il tipo di albero generato. Ciò e possibile specificarlo in due modi all’interno della grammatica del parser: Tramite i simboli ^ e !: Con ^: si indica quale token farà da radice Con !: possiamo indicare i token che non andranno a far parte dell’albero Es la regola width: WIDTH^ DUEP! INT SEMICOLON! ; genera un albero con WIDTH come radice e un solo figlio INT perchè è l’unico senza !. Tramite una riscrittura indicata con “->” al termine della produzione: WIDTH DUEP INT SEMICOLON -> ^(WIDTH INT); dopo la “->” si aspetta che si elenchino radice e figli dell’albero ^( radice figlio1 figlio2 ....)

ANTLR: TreeParser La specifica del TreeParser avviene in modo analogo alla specifica del lexer e del parser con le sezioni “options” “@header” “@members” ecc.. Mentre per le regole della grammatica che descrivono l’albero si possono “estrarre” dopo aver eseguito un copia e incolla delle regole del parser semplicemente cancellando le regole sintattiche e lasciando solo le riscritture che descrivono l’AST: Es. Width: WIDTH^ INT; //Per il primo tipo Width: ^(WIDTH INT); //Per il secondo tipo

Bibbliografia Antlr site: www.antlr.org The Definitive ANTLR Reference, Terence Parr.