340 likes | 729 Views
Le basi del linguaggio Java. Capitolo 6 dicembre 2003. Sintassi e semantica. Un programma è un insieme di frasi in un linguaggio di programmazione quali sono le frasi valide in un linguaggio di programmazione? qual è il significato delle frasi valide?
E N D
Le basi del linguaggio Java Capitolo 6 dicembre 2003 Sintassi e semantica
Sintassi e semantica • Un programma è un insieme di frasi in un linguaggio di programmazione • quali sono le frasi valide in un linguaggio di programmazione? • qual è il significato delle frasi valide? • Nello studio dei linguaggi vengono distinte due componenti • sintassi • ben formate • semantica • frasi valide • significato delle frasi valide Sintassi e semantica
Introduzione alla sintassi di Java • La sintassi formalizza le “regole sintattiche” per scrivere frasi ben formate • 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 definizione di un costruttore, 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 } Sintassi e semantica
Sintassi e grammatiche • La sintassi di Java è descritta da una grammatica composta da • elementi terminali • class public . , ; { } a b c d ... 0 1 2 ... • elementi non terminali • definizione-classe identificatore corpo-classe definizione-metodo blocco sequenza-istruzioni-blocco istruzione • produzioni (o regole sintattiche) • assioma • unità-di-compilazione (definizione-classe) Sintassi e semantica
Esempi di produzioni • definizione-classe: • class identificatore-classe corpo-classe • corpo-classe: • {dichiarazioni-corpo-classeopt} • dichiarazioni-corpo-classe: • dichiarazione-corpo-classe • dichiarazione-corpo-classe dichiarazioni-corpo-classe • dichiarazione-corpo-classe: • definizione-metodo • definizione-costruttore • dichiarazione-variabile • definizione-metodo: • intestazione-metodo corpo-metodo • corpo-metodo: • blocco • blocco: • {sequenza-istruzioni-bloccoopt} Sintassi e semantica
identificatore-classe definizione-classe corpo-classe definizione-metodo Alcuni elementi sintattici nella definizione di una classe • /* Applicazione che visualizza una frase sullo schermo. */ • class ScrittoreSulloSchermo { • public static void main(String[] args) { • System.out.println("ciao a tutti"); • System.out.println("questo testo introduce"); • System.out.println("i fondamenti dell'informatica"); • } • } Sintassi e semantica
intestazione-metodo definizione-metodo istruzione-blocco — istruzione corpo-metodo — blocco sequenza-istruzioni-blocco Alcuni elementi sintattici nella definizione di un metodo • public static void main(String[] args) { • System.out.println("ciao a tutti"); • System.out.println("questo testo introduce"); • System.out.println("i fondamenti dell'informatica"); • } Sintassi e semantica
Esempio — identificatori • I nomi delle classi, dei metodi e delle variabili appartengono alla categoria grammaticale degli identificatori • ad esempio, Math, println, frase, sqrt, RadiceQuadrata • 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 • alcune sequenze di caratteri sono riservate (ad esempio, class) e non sono identificatori Sintassi e semantica
Sintassi per gli identificatori • identificatore: • sequenza-caratteri ma non parola-chiave • sequenza-caratteri: • carattere-alfabetico • sequenza-caratteri 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 di0 1 2 ...8 9 • parola-chiave: • uno diabstract boolean break byte case catch char class const • continue default do double else extends final finally float • for goto if implements import instanceof int interface long • native new package private protected public return short • static super switch synchronized this throw throws • transient try void volatile while Sintassi e semantica
Introduzione alla semantica di Java • La semantica di un linguaggio • stabilisce quali sono le frasi valide tra quelle ben formate • si occupa dell’interpretazione (del significato) delle frasi valide • legame stretto tra sintassi e semantica Sintassi e semantica
Frasi ben formate e frasi valide • Una istruzione valida • System.out.println("ciao a tutti"); • Una istruzione ben formata – ma non valida • System.out.stampa("ciao a tutti"); • Una istruzione che non è ben formata • System.out.println("ciao a tutti"; Sintassi e semantica
Semantica di una frase • 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 Sintassi e semantica
Semantica delle espressioni • a + b • è una espressione ben formata • è anche valida se (ad esempio) • a e b sono variabili di tipo int • alle variabili a e b è stato già assegnato un valore • in questo caso è una espressione di tipo int • Semantica statica • controllata durante l’analisi statica del codice (dal compilatore) • assegna un tipo a ogni espressione • Semantica dinamica • valutata durante l’esecuzione dinamica del codice • assegna un valore a ogni espressione Sintassi e semantica
Semantica delle istruzioni • somma = a + b; • è una istruzione ben formata • è anche valida se (ad esempio) • a, b e somma sono variabili di tipo int • alle variabili a e b è stato già assegnato un valore • Semantica statica • principalmente compatibilità tra tipi • Semantica dinamica Sintassi e semantica
Semantica delle istruzioni semplici • System.out.println("ciao a tutti"); • Semantica statica • esiste l’oggetto System.out? • qual è il tipo dell’oggetto System.out? • per il tipo dell’oggetto System.out esiste una operazione di nome println che ha come parametro una stringa? • Semantica dinamica Sintassi e semantica
Semantica delle istruzioni strutturate • La semantica di Java si occupa anche della semantica delle istruzioni strutturate • while (i<=n) { • somma = somma + i; • i = i + 1; • } Sintassi e semantica
Sintassi, semantica ed errori • Possibili errori di programmazione • errori sintattici o grammaticali • errori semantici • errori di semantica statica ed errori di semantica dinamica • errori logici Sintassi e semantica
Errori sintattici • System.out.println(ciao a tutti); • // ERRORE: mancano le virgolette • System.out println("ciao a tutti"); • // ERRORE: manca un punto • a = 10, • // ERRORE: virgola al posto di punto e virgola Sintassi e semantica
Errori semantici • System.out.stampa("ciao a tutti"); • // ERRORE: il metodo stampa non è definito • system.out.println("ciao a tutti"); • // ERRORE: system.out non è un riferimento valido • Gli errori semantici sono di due tipi • errori di semantica statica • errori di semantica dinamica Sintassi e semantica
Errori logici • System.out.print("ciao a tutti"); • // ERRORE: andava usato il metodo println • System.out.println("ciao a tuti"); • // ERRORE: Queto anziché Questo • doppiodin = n+2; • // ERRORE: + anziché * Sintassi e semantica
commento sull’applicazione eventuale clausola di importazione • /* Applicazione che visualizza una frase sullo schermo. */ • class ScrittoreSulloSchermo { • public static void main(String[] args) { • System.out.println("ciao a tutti"); • System.out.println("questo testo introduce"); • System.out.println("i fondamenti dell'informatica"); • } • } nome dell’applicazione sequenza di istruzioni e dichiarazioni Introduzione alle istruzioni di Java • Una applicazione Java, nella sua forma più semplice • il corpo del metodo main è una sequenza di istruzioni e dichiarazioni Sintassi e semantica
istruzione o dichiarazione dichiarazione variabile locale istruzione istruzione semplice istruzione strutturata istruzione return istruzione espressione istruzione break istruzione continue istruzione vuota istruzione condizionale istruzione ripetitiva blocco istruzione invocazione di metodo istruzione di incremento o decremento istruzione creazione di oggetto istruzione assegnazione istruzione if istruzione if-else istruzione while istruzione for istruzione do-while Una classificazione delle principali istruzioni di Java Sintassi e semantica