Fondamenti di informatica
Oggetti e Java
Luca Cabibbo
Le basi del linguaggio Java
Capitolo 6
dicembre 2003
1
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
2
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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 }
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
3
Sintassi e semantica
Copyright © 2004 – The McGraw-Hill Companies srl
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 definizionemetodo blocco sequenza-istruzioni-blocco istruzione
 produzioni (o regole sintattiche)
 assioma
 unità-di-compilazione (definizione-classe)
4
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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 }
5
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Alcuni elementi sintattici nella definizione di una classe
identificatore-classe
definizione-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");
}
}
corpo-classe
6
Sintassi e semantica
definizione-metodo
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Alcuni elementi sintattici nella definizione di un metodo
intestazione-metodo
definizione-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");
}
corpo-metodo — blocco
istruzione-blocco — istruzione
sequenza-istruzioni-blocco
7
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
8
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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 di 0 1 2 ... 8 9
parola-chiave:
uno di abstract 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
9
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
10
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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";
11
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
12
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
13
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
14
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
15
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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;
}
16
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
17
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
18
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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
19
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
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é *
20
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Introduzione alle istruzioni di Java
Una applicazione Java, nella sua forma più semplice
eventuale clausola di importazione
commento sull’applicazione
/* 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

21
sequenza di istruzioni e dichiarazioni
il corpo del metodo main è una sequenza di istruzioni e
dichiarazioni
Sintassi e semantica
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Una classificazione delle principali istruzioni di Java
istruzione o
dichiarazione
dichiarazione
variabile locale
istruzione
istruzione
semplice
istruzione
espressione
istruzione
strutturata
istruzione istruzione istruzione istruzione
return
break
continue
vuota
blocco
istruzione
istruzione
istruzione
di incremento
assegnazione invocazione
di metodo o decremento
Sintassi e semantica
istruzione
ripetitiva
istruzione
creazione
di oggetto
istruzione
if
22
istruzione
condizionale
istruzione
if-else
istruzione
while
istruzione
for
istruzione
do-while
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl