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