Grammatiche Parse trees Lezione del 17/10/2012

Documenti analoghi
Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Linguaggi e Ambienti di Programmazione

GRAMMATICA FORMALE. Albero sintattico

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Definizione di Grammatica

Le grammatiche formali

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi Sintassi e Semantica

Espressività e limitazioni delle grammatiche regolari

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

Introduzione alla programmazione

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

Le basi del linguaggio Java

MODULO 04 ELEMENTI DI TEORIA DEI LINGUAGGI FORMALI

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

Linguaggi e Grammatiche Liberi da Contesto

Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis

Grammatiche context-free

Linguaggi Regolari e Linguaggi Liberi

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

1.2d: La codifica Digitale dei caratteri

Linguaggi Regolari e Linguaggi Liberi

Somma di numeri binari

Definire tramite una grammatica ad attributi il

LA CODIFICA DELL INFORMAZIONE

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Codifica informazione testuale

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

Istruzioni Condizionali

Definizioni syntax-directed

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

Fasi di un Compilatore

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Introduzione agli Algoritmi

LA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1

Pag. 1. La Rappresentazione e la Codifica delle informazioni (parte 2) Tipi di dati. Informatica Facoltà di Medicina Veterinaria

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.

INTRODUZIONE AL TESTO FILOSOFICO

Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica

La Rappresentazione dell Informazione

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Rappresentazione di dati: caratteri. Appunti a cura del prof. Ing. Mario Catalano

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1

Linguaggi formali e compilazione

Linguaggi, Traduttori e le Basi della Programmazione

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

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

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO

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

1.2d: La codifica Digitale dei caratteri

Logica proposizionale

Analisi lessicale (scanner)

Lezione 6 Introduzione al C++ Mauro Piccolo

La rappresentazione delle informazioni

c) La rappresentazione con il diagramma di Eulero Venn. Scriveremo:

Linguaggio C - sezione dichiarativa: costanti e variabili

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Programmazione logica e PROLOG. Esercitazione 1. AI - Carlucci Aiello & Nardi, 2007 Esercitazione 1 0

Transcript:

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, linguaggi e operazioni Introduzione grammatiche Grammatiche libere dal contesto Grammatica per espressioni semplici Derivazione di espressioni semplici

Riassunto lezione precedente E ( E ) E E + E E E - E E E * E E E / E E N N C N NC C 0 1 2 3 4 5 6 7 8 9 la testa è la categoria sintattica a sinistra della freccia; il metasimbolo si legge può essere riscritto in una categoria sintattica è un simbolo non terminale che può essere riscritto il corpo, costituito da zero o più categorie sintattiche e/o simboli terminali a destra della freccia. il metasimbolo si legge oppure ; N:B.: Ogni categoria sintattica può essere riscritta e genera un sotto-linguaggio N.B.: Ogni simbolo terminale non può essere riscritto

Riassunto lezione precedente Insieme di tutte le espressioni sintatticamente corrette Derivazione (Generazione/Costruzione) di espressioni, cioè stringhe sull alfabeto {0,1,, 9, (, ), +, -, *, /}, sintatticamente corrette E -> E * E -> usando la produzione E ::= E * E N * E -> usando la produzione E ::= N N * N -> usando la produzione E ::= N C * N -> usando la produzione N ::= C C * C -> usando la produzione N ::= C 9 * C -> usando la produzione C ::= 9 9 * 5 usando la produzione C ::= 5 N.B.: -> è diverso da ::= e da

Linguaggi di programmazione Un linguaggio di programmazione e un insieme di stringhe ammissibili (sintatticamente corrette) che chiamiamo programmi I linguaggi di programmazione sono essenzialmente sottoinsiemi di ASCII* (e sue estensioni), dove ASCII è l alfabeto dei caratteri alfabetici, numeri e di interpunzione presenti, secondo uno standard internazionale, sulla tastiera alfanumerica di ogni computer. ASCII è l'acronimo di American Standard Code for Information Interchange (ovvero Codice Standard Americano per lo Scambio di Informazioni)

ASCII Table..

Per esempio <Comando> while < Condizione > do <Comando> <Comando> if < Condizione > then <Comando> <Comando> if < Condizione > then <Comando> else <Comando> <Comando> begin <ListaCom> end <Comando> < ComSemplice > <ListaCom> <Comando> <ListaCom> ; <Comando> < ComSemplice > dalla questa grammatica, si può derivare: if (x < 3) then x = x + 1; else x = x - 1;

Definizione formale di grammatica Formalmente una grammatica G è definita come una quadrupla <A, V, S, P> A è un insieme di simboli detto alfabeto; V è l insieme finito di simboli NON TERMINALI, ovvero delle categorie sintattiche, ovvero di variabili che rappresentano sottolinguaggi ; S V è il SIMBOLO INIZIALE, ovvero la categoria sintattica principale o iniziale; P è un insieme finito di produzioni. ESEMPIO: < {0,1,, 9, (, ), +, -, *, /}, {E,N,C}, E, {E::=( E ),, C::=9} > Per le grammatiche libere ciascuna produzione ha la struttura A α dove A V e α (A V) +

Linguaggi generati da grammatiche Il linguaggio generato (oppure definito) da una grammatica G = <A, V, S, P> è l insieme: L(G) = {α α A* e α è derivabile da S in base a P} L(G) di solito è infinito Per generare, o meglio enumerare, tutte le stringhe in L(G) si dovrebbero analizzare ciclicamente, una dopo l altra, le produzioni della grammatica: si modifica ogni volta il linguaggio di ogni categoria sintattica usando la regola induttiva in tutti i modi possibili, facendo cioè tutte le scelte possibili per le stringhe generate fino a quel momento (vedi esempio dispense pag. 25).

Parse trees Gli alberi di derivazione (parse trees) sono una rappresentazione ad albero della struttura sintattica delle stringhe rispetto ad una grammatica data Sono molti utili: per strutturare il processo di derivazione di una stringa e quindi per rappresentare la dimostrazione che una stringa appartiene al linguaggio generato da una grammatica per definire il significato di una stringa in termini della sua struttura sintattica Per esempio, sono usati dall analizzatore sintattico e l analizzatore semantico (come parti dei compilatori)

Parse trees: un esempio <E> ( <E> ) <E> <E> + <E> <E> <E> <E> <E> <E> * <E> <E> <E> / <E> <E> <N> <N> <C> <N> <N> <C> <C> 0 <C> 1 <C> 9 La stringa che si ottiene concatenando le etichette delle foglie dell albero da sx verso dx si chiama frontiera: 3 * (2 + 14)