1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.

Slides:



Advertisements
Presentazioni simili
Uso avanzato di C.
Advertisements

1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Modello dati LISTA LISTA: LISTA: sequenza finita di 0 o più elementi LISTA di tipo T: lista in cui tutti gli elementi sono dello stesso tipo T. es. lista.
Interfacce Java.
Selezione multipla e tipo di dato carattere
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Type Checking (1° parte)
Generazione di Codice Intermedio
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Sviluppo di Software Sicuro - S 3 Condizioni di verifica in pratica Corso di Laurea Magistrale in Sicurezza Informatica: Infrastrutture e Applicazioni.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
JAVA C import java.util.*; #include <stdio.h>
1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.
Modello dati LISTA LISTA: LISTA: sequenza finita di 0 o più elementi LISTA di tipo T: lista in cui tutti gli elementi sono dello stesso tipo T. es. lista.
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
1 Meccanismi per la definizione di tipi di dato §la programmazione di applicazioni consiste in gran parte nella definizione di nuovi tipi di dato §un qualunque.
nome: sequenza di caratteri usata per denotare un oggetto
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Puntatori - Cenni Nicola Fanizzi Corso di Programmazione C.d.L. in Informatica DIB - Università degli Studi di Bari.
Array Ricerca Ordinamento Fusione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
FONDAMENTI DI INFORMATICA III WfMC-1. FONDAMENTI DI INFORMATICA III WfMC-2 WFMC Cose WfMC Workflow Management Coalition (WfMC), Brussels, è unorganizzazione.
Il main program Ogni programma in C++, per essere eseguibile, deve contenere una funzione main() da cui l’esecuzione comincerà main() deve avere un tipo.
1 Funzioni e Procedure in C Corso di Informatica A Vito Perrone.
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
Constraints.
1 Programmazione grafica 1 Daniele Marini. 2 Linguaggio di riferimento OpenGL: libreria di procedure che realizza un API (application programmers interface)
Ricerca di una chiave: Search(x, k) if x == nil or k == x.key return x
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
Piero Scotto - C141 C14 #14 Puntatori e file. Il problema dellordinamento. Debug.
Un esempio: Registrazione e lettura di dati in un file
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
Architettura delle GPU e
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2003/2004.
Realizzazione Grammatica non contestuale –no ricorsioni sinistre –LL(1) produzione individuata dal primo token Ogni non-terminale -> funzione –rappresenta.
void binario(int n); …………………
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
2000 Prentice Hall, Inc. All rights reserved. I file Apertura e chiusura I file ad accesso sequenziale I file ad accesso casuale Apre un file già esistente.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Collection & Generics in Java
Dynamic SQL.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Implementazione di Linguaggi 2 PARTE 6 Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.
Java: concetti e costrutti base
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
I FILES AD ACCESSO SEQUENZIALE
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Analisi composizionale e contestuale
Transcript della presentazione:

1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley

2 TYPE CHECKING TYPE CHECKING Si divide in statico se eseguito durante la compilazione e dinamico se eseguito durante lesecuzione del programma. È affiancato da altri controlli: flow-of-control: (goto return exit …) unicità di definizione: identificatori nello stesso scope, label dei switch/case controlli contestuali dei nomi es. (Modula) PROCEDURE P;…END P;

3 RUOLO del TYPE CHECKER Sostanzialmente controllare che le operazioni vengano applicate a tipi compatibili.

4 TYPE EXPRESSIONS Denotano i tipi di un linguaggio e sono quindi fortemente dipendenti da esso. Qui ci si attiene alla definizione seguente: Un tipo base (int,float, integer, real, complex...) è una type expression; Un tipo base (int,float, integer, real, complex...) è una type expression; Un tipo può avere un nome, per cui il nome di un tipo è una type expression;Un tipo può avere un nome, per cui il nome di un tipo è una type expression; Un costruttore di tipo applicato ad una type expression produce una type expression nel modo seguente:Un costruttore di tipo applicato ad una type expression produce una type expression nel modo seguente:

5 TYPE EXPRESSIONS 1.Array : se T è una TE allora array(I,T) è una TE che denota un il tipo di un array di tipo base T e tipo indice I 2.Prodotti Cartesiani: se T 1 e T 2 sono TE allora T 1 T 2 è una TE che denota linsieme delle coppie (t 1,t 2 ) con t 1 T 1 e t 2 T 2 ( associa a sinistra) 3.Record: è il prodotto del tipo dei suoi campi, differisce dal prodotto per la commutatività degli elementi dovuta alla selezione mediante il nome 4.Puntatori: se T è una TE allora pointer(T) è una TE che denota un riferimento (puntatore) ad un oggetto di tipo T 5.Funzioni: è il tipo di una funzione che mappa un tipo dominio D in un tipo rango R e denotato D R.

6 TYPE EXPRESSIONS NEW 6.Class : è un incrocio tra il concetto di modulo e di tipo. È modellabile come un record con campi di tipo procedura e funzione detti i metodi.

7 TYPE SYSTEM Collezione di regole per assegnare Type Expression alle parti di un programma. Un Type Checker (TC) è un programma che implementa un Type Sysytem. È interessante implementare type system con DGDS. Ogni TC può essere applicato a run time purchè il codice oggetto contenga informazioni che specificano il tipo di ogni dato. Un type system è detto sound se elimina la necessità di type checking a run time, cioè, se il TC assegna un tipo type- error ad ogni dato del programma, allora nessun errore di tipo si può verificare durante lesecuzione.

8 TYPE CHECKING: UNO SCHEMA di TRADUZIONE DS Un semplice type checker P D;E D D;D | id: T T char|integer|array[num] of T| ^T E literal | num | id | E mod E | E[E] | E^ Esempio key: integer; key: integer; key mod 1999 key mod 1999 Aggiunto il tipo base type_error si ha

9 Uno SdT di un semplice Type Checker P D;E D D;D D id:T addtype(id.entry,T.type) D id:T addtype(id.entry,T.type) T char T.type:=char T char T.type:=char T integer T.type:=integer T integer T.type:=integer T array[num] of T 1 T.type:=array(num.val,T 1 ) T array[num] of T 1 T.type:=array(num.val,T 1 ) T ^T 1 T.type:=pointer(T 1.type) T ^T 1 T.type:=pointer(T 1.type)

10 Type Checking di Espressioni E literal E.type:=char E literal E.type:=char E id E.type:=lookup(id.entry) E id E.type:=lookup(id.entry) E num E.type:=integer E num E.type:=integer E E 1 mod E 2 E.type:=if E1.type=integer & E2.type=integer then integer else type_error E E 1 mod E 2 E.type:=if E1.type=integer & E2.type=integer then integer else type_error E E 1 [E 2 ] E.type:=if E 2.type=integer & E 1.type=array(s,t) then t else type_error type_error E E 1 ^ E.type:=if E 1.type=pointer(t) then t else type_error E E 1 ^ E.type:=if E 1.type=pointer(t) then t else type_error

11 Type Checking di Istruzioni S id:=E S.type:=if id.type=E.type then void else type_error S id:=E S.type:=if id.type=E.type then void else type_error S if E then S 1 S.type:= if E.type =boolean then S 1.type else type_error S if E then S 1 S.type:= if E.type =boolean then S 1.type else type_error S while E do S 1 S.type:=if E.type=boolean then S 1.type else type_error S while E do S 1 S.type:=if E.type=boolean then S 1.type else type_error S S 1 ;S 2 S.type:=if S 1.type=void & S2.type=void then S.type=void S2.type=void then S.type=void else type_error else type_error

12 Type Checking di Funzioni T T 1 T 2 T.type:=T 1.type T 2.type T T 1 T 2 T.type:=T 1.type T 2.type E E 1 (E 2 ) E.type:=if E 2.type=s & E1.type=s t then t else type_error E E 1 (E 2 ) E.type:=if E 2.type=s & E1.type=s t then t else type_error

13 Equivalenza di Tipo I linguaggi usano diversi modi e definizioni per stabilire che due tipi sono equivalenti. Vi sono due approcci principali: Equivalenza strutturale (Fortran, C, C++...)Equivalenza strutturale (Fortran, C, C++...) Equivalenza per nome (Modula, Oberon, Ada)Equivalenza per nome (Modula, Oberon, Ada) Le illustriamo con un esempio. In Modula-2 le definizioni seguenti: TYPE A=ARRAY[0..n] OF REAL;B=ARRAY[0..n] OF REAL; Definiscono due tipi non equivalenti, perchè dotati di nome diverso (equivalenza per nome). Tuttavia, A e B sono identici e quindi strutturalmente equivalenti.

14 Equivalenza per Nome Due variabili hanno tipi equivalenti (per nome) se sono dichiarate insieme con la stessa dichiarazione o se dichiarate in parti diverse del programma usano lo stesso identificatore di tipo: 1.VAR a,b:ARRAY[1..n] OF REAL; (* a,b equiv. primo tipo*) 2.PROCEDURE Q(a: T): (* a,b equiv. secondo tipo*) VAR b: T; (* a,b equiv. secondo tipo*) I linguaggi Pascal like adottano una regola ulteriore: due nomi di tipo T e T dichiarati come segue denotano tipi equivalenti: 3.TYPE T=T; Altri linguaggi (PL/M) che adottano lequivalenza per nome considerano I tipi T e T definiti in 3. non equivalenti.

15 Fine Type checking Proseguire con gli argomenti del seminario sul type checking