Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Introduzione al linguaggio C++
LINGUAGGIO DI PROGRAMMAZIONE C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Linee guida per la programmazione
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Selezione - approfondimento

Sintassi (prima parte)
Inizio… Linguaggi Linguaggi di programmazione Linguaggi di programmazione Linguaggi di programmazione Linguaggi di programmazione Linguaggi Formali Linguaggi.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
1 Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone
Fondamenti di Informatica
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
Programmazione Procedurale in Linguaggio C++
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 7 (5 novembre 2008) Programmazione in Java: lessico, variabili, tipi primitivi, assegnamento a variabile.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Variabili e tipi primitivi Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Assegnamento di valore a una variabile 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.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Unità Didattica 2 I Linguaggi di Programmazione
Dichiarazioni e tipi predefiniti nel linguaggio C
Fondamenti di Informatica1 Linguaggi Classificati rispetto alle caratteristiche principali: –potere espressivo che influenza lo stile di programmazione.
Il Linguaggio C.
Espressioni condizionali
Java base I: Sintassi e tipi di dati
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
Fondamenti di Comunicazione Digitale
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
CAP. 2 ANALISI LESSICALE 2.1 Il ruolo dell'analizzatore lessicale
CODIFICA Da flow-chart a C++.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Lo sviluppo del software e i linguaggi di programmazione
Grammatiche, Linguaggio e Automi R. Basili TAL - a.a
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Anno accademico Le istruzioni di controllo in C.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
CORSO DI PROGRAMMAZIONE II Lezione 22
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Lezione 3 Struttura lessicale del linguaggio
Sistemi basati su conoscenza Linguaggio naturale: grammatiche Prof. M.T. PAZIENZA a.a
Intelligenza Artificiale 1 Gestione della conoscenza lezione 19 Prof. M.T. PAZIENZA a.a
Introduzione a Javascript
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Programmazione in Java
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Linguaggi, stringhe e alfabeti. Linguaggi e grammatiche Un linguaggio è un sistema di comunicazione tra persone che permette di trasmettere informazioni.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 08 Linguaggi – Sintassi e Semantica Alfonso Miola Ottobre 2011 http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Contenuti Definizione di un linguaggio Sintassi e semantica Linguaggi di programmazione e grammatiche Meta-linguaggio BNF Sintassi dei linguaggi di programmazione Sintassi del linguaggio Java Semantica del linguaggio Java Sintassi, semantica ed errori http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Prerequisiti Questo capitolo presuppone la conoscenza degli argomenti già trattati nelle precedenti lezioni di questo corso, con riferimento al capitolo 4 del libro di testo e in particolare alla Compilazione di programmi Si presuppone anche la conoscenza degli argomenti già trattati nel corso di Geometria e Combinatoria http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Linguaggi naturali . . . Per definire un linguaggio naturale si parte dalla definizione di un alfabeto in italiano ci sono 21 lettere, in inglese 26, . . . Con i caratteri dell’alfabeto possiamo formare un insieme di sequenze, dette parole Non tutte le sequenze sono parole del linguaggio naturale La grammatica del linguaggio fornisce le regole per decidere quali sequenze sono parole del linguaggio parole corrette grammaticalmente http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Linguaggi naturali . . . Con le lettere dell’alfabeto italiano possiamo costruire alcune sequenze ad esempio abcdef, ghil, rst - che non sono parole della lingua italiano ad esempio andare, aula, corso, acqua, soqquadro, - che sono parole della lingua italiana, cioè sono parole corrette grammaticalmente http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Linguaggi naturali . . . Con le parole, corrette, possiamo formare sequenze di parole, dette frasi Non tutte le sequenze di parole sono frasi del linguaggio naturale La sintassi del linguaggio fornisce le regole per decidere quali sequenze sono frasi del linguaggio frasi corrette sintatticamente, o sintatticamente ben formate http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

soggetto verbo complemento Linguaggi - Sintassi e Semantica . . . Linguaggi naturali . . . In italiano la regola base della sintassi dice che le frasi sono costruire con sequenze di parole che seguono la struttura soggetto verbo complemento soggetto, verbo e complemento non sono altro che dei nomi, cioè denotano, alcuni particolari e ben precisi sottoinsiemi dell’insieme di tutte le parole del linguaggio ad esempio la sequenza di parole il lo la non è quindi una frase della lingua italiana ad esempio la sequenza di parole gatto mangia topo è una frase della lingua italiana, ovvero è sintatticamente ben formata http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Linguaggi naturali Solo alcune delle frasi del linguaggio, cioè di quelle ben formate sono anche valide, cioè hanno un significato La semantica del linguaggio stabilisce quali tra le frasi ben formate sono anche valide e quindi si occupa dell’interpretazione (del significato) delle frasi ad esempio la frase il gatto mangia il topo è una frase ben formata che è anche valida, cioè ha un significato http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica La sintassi di un linguaggio si occupa della forma delle frasi del linguaggio, ovvero delle regole che permettono di costruire frasi ben formate del linguaggio Esempio di frase in italiano il gatto mangia il topo Frammento della sintassi della lingua italiana frase  soggetto verbo complemento soggetto  articolo nome verbo  mangia, beve complemento  articolo nome articolo  il, lo, la nome  gatto, monte, topo, carne http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica La semantica di un linguaggio si occupa dell’interpretazione del linguaggio, ovvero del significato delle frasi corrette sintatticamente Esempio di frasi corrette sintatticamente in italiano, ma non tutte valide – in rosso le frasi valide il gatto mangia il topo il topo mangia il monte il cane mangia la carne il monte beve il cane http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Regole sintattiche . . . Le regole della sintassi sono chiamate regole di produzione, per produrre o derivare una frase, come nell’esempio precedente Nelle regole di produzione compaiono elementi (simboli) terminali come - mangia, beve, il, lo, la, gatto, monte, topo, carne elementi (simboli) non-terminali come – frase, soggetto, verbo, …. che sono “categorie sintattiche” cioè nomi che denotano sottoinsiemi dell’insieme dei simboli terminali http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Regole sintattiche frase  soggetto verbo complemento soggetto  articolo nome verbo  mangia, beve complemento  articolo nome articolo  il, lo, la nome  gatto, monte, topo, carne Una fissata categoria sintattica, detta assioma, è quella dalla quale deve partire il processo di produzione o di derivazione di una frase Nel caso della lingua italiana l’assioma è frase http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi artificiali e grammatiche Un linguaggio di programmazione è un linguaggio artificiale e, per poterlo definire in modo rigoroso, introduciamo di seguito alcuni strumenti necessari, con le relative definizioni Alfabeto, o vocabolario Universo linguistico Grammatica, o sintassi Generazione di un linguaggio da una grammatica http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Universo linguistico Definizione: Dato un insieme finito non vuoto V, si definisce Universo linguistico su V, e si indica con V*, l’insieme delle sequenze finite di lunghezza arbitraria di elementi di V L'insieme V viene di solito chiamato alfabeto, oppure vocabolario o lessico. Gli elementi di V sono chiamati simboli terminali. Si noti che talvolta i simboli di V possono essere più complessi di una singola lettera dell'alfabeto della lingua italiana; per esempio 'main', 'class', 'void', ecc. sono simboli dell'alfabeto di Java. Gli elementi di V* vengono detti stringhe costruite su V, o frasi su V http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Linguaggio Definizione: Un linguaggio L sull'alfabeto V è un sottoinsieme di V*. Sebbene V sia finito, V* non lo è; esso è numerabile, ed i sottoinsiemi di V* sono in quantità non numerabile Nel considerare i linguaggi di programmazione, non siamo interessati a tutti i sottoinsiemi di V*, ma solo a quelli che sono descrivibili in maniera finita Questa descrizione può essere per esempio fornita attraverso una grammatica, nel modo che verrà precisato dalle seguenti definizioni http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Grammatica . . . Definizione: Una grammatica o sintassi G è definita da: V, un alfabeto di simboli terminali N, un alfabeto di simboli non terminali (detti anche categorie sintattiche), tale che V Ç N =  S Î N, detto assioma, o simbolo iniziale, o anche simbolo distinto P, un insieme finito di regole sintattiche (o produzioni o regole di produzione) del tipo X → a dove X Î N ed a Î (N  V)* e si legge X produce a http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Grammatica . . . Le produzioni sono talora scritte nella forma X  a invece che X → a Se in una grammatica esistono più regole aventi la stessa parte sinistra, ad esempio X → a1 X → a2, . . . , X → an esse sono raggruppate, usando la convenzione notazionale X → a1 | a2 | . . . | an e in tal caso si dice che a1, a2, . . . , an sono parti destre alternative derivabili da X http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Grammatica Come visto gli insiemi dei simboli terminali e dei simboli non terminali sono disgiunti Per distinguere i simboli di questi due insiemi spesso si usa una delle due seguenti convenzioni: nella prima i simboli non terminali sono distinti dai terminali perché racchiusi tra parentesi angolate come ad esempio <frase>, <cifra> nella seconda i simboli non terminali sono scritti in corsivo - come ad esempio frase, cifra - e a volte i terminali sono scritti tra apici http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Derivazione diretta Definizione: Data una grammatica G e due stringhe b,  Î (N  V)*, si dice che “ deriva direttamente da b in G” e si scrive b →  se le stringhe si possono decomporre come b=A, =a con A Î N; a, ,  Î (N  V)* ed esiste la produzione A → a Î P Si noti che le stringhe a,  e  nella definizione precedente possono anche essere stringhe vuote http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

b0 → b1 → b2 … → bn o anche b0 →n bn Linguaggi - Sintassi e Semantica Derivazione In modo semplice si può definire una catena di derivazioni dirette b0 → b1 → b2 … → bn o anche b0 →n bn Definizione. Data una grammatica G e due stringhe b,  e (N  V)*, si dice che “ deriva da b in G” e si scrive b →*  se esiste un n > 0 tale che b0 →n bn e b0 = b , bn =  http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Linguaggi generati . . . Le regole di produzione consentono quindi, a partire dall’assioma che è un simbolo non terminale, di derivare via via gli altri simboli non terminali, o loro combinazioni, fino ad arrivare a derivare simboli terminali, o loro combinazioni, da simboli non terminali In questo modo posso derivare anche un insieme infinito di frasi costituite da tutti e soli simboli terminali Si riesce quindi a generare un insieme infinito di frasi a partire da una loro descrizione finita che è fornita dalla grammatica In analogia, ad esempio, con quanto succede per la descrizione intensionale (che è finita) dell’insieme infinito dei numeri interi http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Linguaggi generati Definizione: Data una grammatica G, dicesi linguaggio generato da G, e si indica con LG, l'insieme delle frasi di V* (che ovviamente sono costituite da tutti e soli simboli terminali) derivabili a partire dall'assioma S della grammatica G http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggio di programmazione Definizione: Un linguaggio di programmazione L su un alfabeto V è un sottoinsieme di V* per cui esiste una grammatica G, tale che L=LG, cioè L è un linguaggio generato da G Per definire un linguaggio di programmazione c’è quindi bisogno di avere un alfabeto e una grammatica Le stringhe o frasi di un linguaggio di programmazione vengono dette programmi (di tale linguaggio) http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Backus-Naur-Form - BNF Il formalismo appena introdotto per descrivere la grammatica di un linguaggio di programmazione è un metalinguaggio formale che prende il nome di BNF (Backus-Naur-Form, forma di Backus e Naur, dai nomi dei due studiosi che per primi l'hanno introdotta negli anni '50) Un metalinguaggio è un linguaggio usato per parlare di un altro linguaggio per esempio, se diciamo "l'articolo determinativo in inglese è 'the' ", od anche "il pronome personale di terza persona singolare è 'he', oppure 'she' oppure 'it''', stiamo usando l'italiano come metalinguaggio per descrivere l'inglese http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

X → [a] b equivale a X → b | ab Linguaggi - Sintassi e Semantica Extended - BNF . . . Il formalismo BNF viene spesso usato non nella forma originale, ma utilizzando alcune estensioni che permettono una scrittura più concisa delle grammatiche; si parla in questi casi di EBNF (Extended BNF) Se nella parte destra di una produzione un simbolo (o sequenza di simboli, o alternativa di simboli) è racchiuso tra parentesi quadre, questo significa che esso è opzionale, che cioè può comparire zero oppure una volta, per esempio X → [a] b equivale a X → b | ab http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Extended - BNF Se invece esso è racchiuso tra parentesi graffe, con un numero intero ad apice, questo significa zero, una o più occorrenze del simbolo stesso, fino ad un massimo di n; per esempio X → {a}nb significa che da X si può derivare: b ab aab aaab . . . con un massimo di n occorrenze di a Se invece un simbolo a è racchiuso tra parentesi graffe (senza apice), come in X → {a}b questo significa zero, una o più (in numero finito, ma arbitrario) occorrenze del simbolo stesso http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Albero sintattico Il processo di derivazione di una frase mediante un grammatica può essere convenientemente illustrato mediante un albero, detto albero di derivazione sintattica, o più semplicemente albero sintattico Piuttosto che definire formalmente la nozione di albero sintattico, la introduciamo attraverso due esempi di derivazione per la frase (già vista) 'il gatto mangia il topo', della lingua italiana i numeri interi senza segno di una o due cifre http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Frammento della grammatica italiana V = { il, lo, gatto, topo, monte, mangia, beve } N = { <frase>, <soggetto>, <verbo>, <complemento>, <articolo>, <nome> } S = <frase> P consiste di: <frase> ::= <soggetto><verbo><complemento> <soggetto> ::= <articolo><nome> <articolo> ::= il | lo | la <nome> ::= gatto | topo | monte | carne <verbo> ::= mangia | beve <complemento> ::= <articolo><nome> N.B. In nero i meta-simboli http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Esempio di albero sintattico Deriviamo la frase 'il gatto mangia il topo' <frase> <soggetto> <verbo> <complemento> <articolo> <nome> <articolo> <nome> il gatto mangia il topo Questi ultimi sono simboli terminali del linguaggio http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Grammatica per interi senza segno di una o due cifre V = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} N = {<intero-senza-segno>, <cifra-non-nulla>, <cifra>} S = <intero-senza-segno> P consiste di: <intero-senza-segno> ::= [<cifra-non-nulla>]<cifra> <cifra> ::= <cifra-non-nulla> | 0 <cifra-non-nulla> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Esempio di albero sintattico Deriviamo il numero intero senza segno 59 <intero-senza-segno> <cifra-non-nulla> <cifra> <cifra-non-nulla> 5 9 Questi ultimi sono simboli terminali del linguaggio http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Sintassi dei linguaggi di programmazione La definizione della sintassi di un linguaggio di programmazione viene data definendo la grammatica da cui viene generato il lessico (cioè un insieme di simboli terminali, che è il vocabolario) del linguaggio un insieme di simboli non terminali, tra cui ne viene scelto uno come simbolo iniziale, cioè l’assioma un insieme di regole di produzione, in genere espresse in una qualche variante della notazione BNF http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Il lessico Il lessico è costituito da Un alfabeto di caratteri e cifre che servono a costruire identificatori (ad esempio i nomi di classi, oggetti, metodi, variabili, . . .) Un insieme di simboli speciali corrispondenti ad operatori e simboli di interpunzione Un insieme finito di parole chiave, cioè sequenze di caratteri dell’alfabeto che sono riservate in quanto assumono, a livello semantico, significati particolari nel linguaggio http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Introduzione alla sintassi di Java La sintassi di Java si occupa della formazione di frasi valide in Java, mediante la formalizzazione delle “regole sintattiche” la definizione di una classe è formata dalla parola class, seguita dal nome della classe e dal corpo della classe il nome di una classe è un identificatore un identificatore è una sequenza non vuota di caratteri alfanumerici, iniziante per un carattere alfabetico il corpo di una classe è formato da un elenco di dichiarazioni della classe, racchiuso tra parentesi graffe { e } possibili dichiarazioni di una classe sono: la definizione di un metodo, la dichiarazione di una variabile la definizione di un metodo è formata dall’intestazione del metodo seguita dal corpo del metodo il corpo di un metodo è un blocco un blocco è una sequenza di istruzioni e dichiarazioni racchiusa tra parentesi graffe { e } http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Sintassi di Java La sintassi di Java è descritta da una grammatica composta da elementi terminali - lessico o vocabolario – cioè le parole e i simboli che possono comparire nei programmi class public . , ; { } a b c d ... 0 1 2 ... elementi non terminali - le categorie sintattiche - utilizzate per la descrizione dei programmi - ma che non compaiono nei programmi definizione-classe identificatore corpo-classe definizione-metodo blocco sequenza-istruzioni-blocco istruzione ... assioma - l’elemento non terminale unità-di-compilazione che guida la scrittura di un intero programma o classe produzioni (o regole sintattiche) - le regole che specificano come sia possibile derivare frasi da ciascun non terminale http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Esempi di produzioni . . . definizione-classe ::= class identificatore-classe corpo-classe corpo-classe ::= { {dichiarazione-corpo-classe} } N.B. Le parentesi { e } sono simboli terminali del linguaggio, mentre le parentesi { e } sono simboli del metalinguaggio EBNF dichiarazione-corpo-classe ::= definizione-metodo | definizione-costruttore | dichiarazione-variabile http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Esempi di produzioni . . . definizione-classe ::= class identificatore-classe corpo-classe la prima riga di una produzione contiene un simbolo non- terminale la produzione ha lo scopo di descrivere le possibili forme per questo simbolo non terminale nelle righe successive alla prima vengono descritti i possibili modi per espandere il non terminale questa produzione afferma che una definizione-classe è formata dal simbolo terminale class, seguito da un identificatore-classe e da un corpo-classe le forme per identificatore-classe e corpo-classe sono descritte dalle rispettive produzioni http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

. . . Esempi di produzioni . . . Una possibile definizione alternativa è definizione-classe ::= class identificatore-classe corpo-classe corpo-classe ::= { dichiarazioni-corpo-classe } dichiarazioni-corpo-classe ::= dichiarazione-corpo-classe | dichiarazione-corpo-classe dichiarazioni-corpo-classe dichiarazione-corpo-classe ::= definizione-metodo | definizione-costruttore | dichiarazione-variabile http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica . . . Esempi di produzioni corpo-metodo ::= { istruzioni-dichiarazioni-corpo-metodo } istruzioni-dichiarazioni-corpo-metodo ::= istruzione-dichiarazione-corpo-metodo | istruzione-dichiarazione-corpo-metodo istruzioni-dichiarazioni-corpo-metodo istruzione-dichiarazione-corpo-metodo ::= dichiarazione-variabile | istruzione istruzione ::= istruzione-semplice | istruzione-strutturata http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Albero delle istruzioni di Java istruzione o dichiarazione variabile locale istruzione semplice strutturata espressione return assegnazione invocazione di metodo di incremento o decremento creazione di oggetto ripetitiva condizionale blocco if-else if for while do-while break continue vuota http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Esempio — identificatori . . . I nomi delle classi, dei metodi e delle variabili appartengono alla categoria grammaticale degli identificatori alcuni esempi di identificatori sono Math, println, frase, sqrt, RadiceQuadrata System.out non è un identificatore http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

. . . Esempio — identificatori La regola (informale) per la formazione degli identificatori è un identificatore è una sequenza non vuota di caratteri alfanumerici (alfabetici e numerici), iniziante con un carattere alfabetico in realtà, sono ammessi anche alcuni caratteri speciali, come il carattere “underscore” _ alcune sequenze di caratteri sono riservate — come ad esempio class e public — non sono identificatori ma parole chiave l’uso dei caratteri minuscoli e maiuscoli è significativo ad esempio, alfa e Alfa sono identificatori diversi http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Sintassi per gli identificatori identificatore ::= carattere-alfabetico | carattere-alfabetico {carattere-alfanumerico} carattere-alfanumerico ::= carattere-alfabetico | cifra carattere-alfabetico ::= uno di a à b c ... x y z A À B C ... X Y Z … _ … cifra ::= uno di 0 1 2 ... 8 9 parola-chiave ::= una di abstract boolean char class continue do double else final float for if import instanceof int interface long new package private protected public return short static this void while e altre ancora . . . http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Semantica di Java In questo corso la semantica di Java viene descritta in modo informale Una istruzione valida System.out.println("ciao a tutti"); Una istruzione ben formata – ma non valida System.out.stampa("ciao a tutti"); . . . Non esiste il metodo stampa Una istruzione che è non ben formata System.out.println("ciao a tutti"; . . . Manca una parentesi tonda chiusa http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Semantica di una frase I tipi rivestono un ruolo importante nel discriminare tra frasi valide e no La semantica di una frase dipende anche dal tipo della frase la semantica di una espressione viene data in termini di un tipo e di un valore la semantica di una istruzione viene data in termini dell’effetto dell’esecuzione dell’istruzione in modo diverso per istruzioni semplici e istruzioni strutturate (composte) http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Sintassi, semantica ed errori Possibili errori di programmazione la frase non è ben formata errori sintattici o grammaticali la frase è ben formata ma non è valida errori semantici errori di semantica statica ed errori di semantica dinamica la frase è valida – ma il suo significato è diverso da quello voluto errori logici http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Linguaggi - Sintassi e Semantica Esempi di errori Errori sintattici System.out.println("Ciao a tutti"]; System.outbprintln("Ciao a tutti"); Errori semantici System.out.stampa("Ciao a tutti"); system.out.println("Ciao a tutti"); Questi sono errori di semantica statica Errori logici System.out.println("Ciao a totti"); http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Cosa abbiamo visto finora Come si definisce un linguaggio Cosa sono la sintassi e la semantica Come si definiscono i linguaggi di programmazione Come si definiscono le grammatiche Cosa è il meta-linguaggio BNF Come si definisce la sintassi dei linguaggi di programmazione Quali sono la sintassi e la semantica del linguaggio Java Che relazione c’è tra sintassi, semantica ed errori http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Riferimenti al libro di testo Per lo studio della sintassi e della semantica del linguaggio Java si fa riferimento al libro di testo, e in particolare al capitolo 6 – Le basi del linguaggio Java http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica