DerIntCalculator La calcolatrice per integrali e derivate Progetto di Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da: Gabriella.

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

Il Software.
Interazione Uomo - Macchina
Costruttori e Distruttori
Informatica Recupero debito quarto anno Terzo incontro.
Sintassi (prima parte)
Analizzatori Sintattici con Cup Giuseppe Morelli.
Traduttore diretto dalla sintassi (seconda parte)
Parser Bottom UP Giuseppe Morelli. Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di.
Inizio… Linguaggi Linguaggi di programmazione Linguaggi di programmazione Linguaggi di programmazione Linguaggi di programmazione Linguaggi Formali Linguaggi.
Universita di Camerino
Semantica di linguaggi di programmazione Ne esistono differenti stili a seconda di paradigma di programmazione uso (validazione, prototyping, verifica.
Algoritmi e Programmazione
Strategie per la progettazione di algoritmi:
Intelligenza Artificiale 1 Gestione della conoscenza lezione 7 Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Access: Query semplici
-calcolo Vogliamo studiare le problematiche relative al meccanismo di chiamata di funzione (eg differenze fra binding statico e dinamico) in isolamento.
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
Semantica Operazionale Strutturata
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
Meteo Service Corso di Reti di Calcolatori LS Casarini Stefano matr
Progetto per lesame di Linguaggi e Modelli Computazionali LS Chiara Chiara Gualtieri.
BUILDING A USER INTERFACE Using CRYSTAL REPORTS. COME UNAPPLICAZIONE COMUNICA CON LUTENTE? Problema comune a tutte le applicazioni informatiche Forse.
ANTLR V.3 Renzi Alberto.
Linguaggi e Modelli Computazionali M Prof. Enrico Denti
Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti.
Linguaggi e Modelli Computazionali LS - Prof E.Denti
CineMan Linguaggio per la descrizione della programmazione di cinema
Facoltà di Ingegneria – Università di Bologna
Corso di Laurea Specialistica in Ingegneria Informatica Itinerari aerei Progetto per lesame di Linguaggi e Modelli Computazionali LS realizzato da Stefano.
S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari.
Linguaggio per la generazione di biglietti da visita
Linguaggi e Modelli Computazionali a.a. 2009/2010
Gianfranco Zampolini Progetto per il corso di: Linguaggi e Modelli Computazionali LS EM Linguaggio per la Descrizione di un Evento Musicale.
Corso di Laurea Specialistica in Ingegneria Informatica Model Drive Applicazione per il pilotaggio di veicoli Esame di Linguaggi e Modelli computazionali.
Lo sviluppo del software e i linguaggi di programmazione
Linguaggi e modelli computazionali LS
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
Presentazione del problema Obiettivo: Lapplicazione di Search of Sematic Services permette di ricercare sevizi semantici, ossia servizi a cui sono associati.
runhome Progetto di Linguaggi e Modelli Computazionali LS Luca Bueti
Grammatiche, Linguaggio e Automi R. Basili TAL - a.a
Corso di Laurea Specialistica in Ingegneria Informatica Previsione dei Consumi Elettrici = Progetto per lesame di Linguaggi e Modelli Computazionali LS.
Un linguaggio ed un interprete per il gioco Citadels
Progetto don’t you forget
Attività progettuale in Linguaggi e Modelli Computazionali M
Progetto Fireworks Simulatore di spettacoli pirotecnici
Tablabla Progetto di Valent Cristina
SQL File Manager un nuovo modo di gestire il filesystem….
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
Chess Game Visualizer Un interprete per Short Algebraic Notation Progetto per lesame di Linguaggi e modelli computazionali LS prof. Denti – A.A. 2007/08.
Linguaggi per COMUNICARE
Linguaggi e modelli computazionali LS Manni Tiziano
ATTIVITÀ PROGETTUALE LINGUAGGI E MODELLI COMPUTAZIONALI L-M Un linguaggio per la descrizione di coreografie giocabili STUDENTE: BACCHILEGA SIMONE A.A 2013/2014.
DRAUGHTS Linguaggi e Modelli Computazionali LS Linguaggio e interprete per effettuare una partita di dama inglese contro un’intelligenza artificiale Progetto.
Giannicola Spezzigu Accordo: sovrapposizione di 3 o più suoni Ogni sigla denota un accordo, ossia i suoni da cui esso è formato Accordi e.
Trading EToro Un linguaggio per descrivere e gestire operazioni di borsa Progetto di Linguaggi e Modelli Computazionali LS Prof. Enrico Denti Mancini Laura.
Calendar Generator Progetto Linguaggi e Modelli Computazionali LS Docente: Enrico Dentidi: Alberto Renzi.
Progetto di Linguaggi e modelli computazionali M Prof. Enrico Denti Progetto di: Francesco Paci.
Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Grammatiche Grammatiche libere da contesto Grammatiche regolari
CAKE Ambiente per la scrittura e la riproduzione audio di ricette per torte Linguaggi e Modelli Computazionali LSElisabetta Visciotti.
Eye Computer Sistema per l'interazione con un computer dotato di controllo oculare Linguaggi e modelli computazionali LS Realizzato da: Ciavarella Primiano.
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
Analisi matematica Introduzione ai limiti
Linguaggi e Grammatiche Alfabeto : insieme non vuoto di elementi detti simboli A = { a, b, c } Stringa : sequenza di simboli di un alfabeto ab abc abcab.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Transcript della presentazione:

DerIntCalculator La calcolatrice per integrali e derivate Progetto di Linguaggi e Modelli Computazionali M Prof. Enrico Denti Realizzato da: Gabriella Falco

Idea di progetto Sviluppo di un linguaggio in grado di riconoscere in maniera semplice ed espressiva i dati necessari per il calcolo degli integrali indefiniti e delle derivate Calcolare e visualizzare i risultati in maniera leggibile a tutti… “infissa”

Idea di progetto L'interprete pertanto dovrà: accettare in input le espressioni analizzare lessicalmente e sintatticamente l'input valutare semanticamente le frasi produrre in output il risultato dell'elaborazione Importante: Semplicità d’uso: interfaccia intuitiva e sintassi semplice Complessità del linguaggio ridotta al minimo

Strumenti Linguaggio di programmazione: Java Prolog Generazione Parser tuProlog 3.0 JavaCC 5.0 Strumenti di Sviluppo NetBeans IDE 6.8

Metodo di realizzazione (1) Java: Visualizza un’interfaccia a forma di calcolatrice per chiedere all’utente l’espressione di input Passa l’espressione al motore prolog configurato con la teoria del caso e lo interroga sottoponendogli l’espressione Recupera il risultato in notazione prefissa e lo passa al parser valutatore, generato con JavaCC Restituisce il risultato all’utente.

Metodo di realizzazione (2) tuProlog: Interpreta e valuta l’espressione data e calcola il risultato in accordo alla semantica denotazionale specificata Parser: Analizza l’espressione data in output dal motore prolog e la restituisce in modalità infissa

Progetto L’utente sceglie la tipologia di calcolo che vuole effettuare: Normale IntegraleDerivata

Integrali intExpr(DT,T):-intTerm(DT,T). intExpr(DE+DT,E+T):-intTerm(DE,E),intExpr(DT,T). intExpr(DE-DT,E-T):-intTerm(DE,E),intExpr(DT,T). intTerm(K*DT,K*T):-number(K),intExpr(DT,T). intTerm(DT*DE,R):-semplifica(DT*DE,DX),intTerm(DX,R). %per parti intTerm(DT*E,T*E-Int):-intFactor(DT,T),dFactor(E,DE),intTerm(T*DE,Int). intTerm(E*DT,E*T-Int):-intFactor(DT,T),dFactor(E,DE),intTerm(T*DE,Int). intTerm(DF,F):-intFactor(DF,F).

Integrali intFactor(-DE,-E):-intExpr(DE,E). intFactor([DE],E):-intExpr(DE,E). intFactor(1,x). intFactor(N,N*x):-number(N). intFactor(x,x^2/2). intFactor(x^K,x^N/N):-number(K),N is K+1. intFactor(x^K/Q,x^N/P):- number(K), N is K+1, P is Q*N. intFactor(F^N*DF,F^M/M):- not(N is -1),M is N+1,intFactor(DF,F). intFactor(1/x,log(x)). intFactor(cos(x),sin(x)). intFactor(sin(x),-cos(x)). intFactor(cos(E)*DE,sin(E)):-dFactor(E,DE). intFactor(sin(E)*DE,-cos(E)):-dFactor(E,DE). intFactor(exp(X)*DX,exp(X)):-intExpr(DX,X). intFactor(exp(K*x),exp(x)/K):- number(K). intFactor(exp(x),exp(x)). intFactor(1+(tg(x)^2),tg(x)). intFactor(1+(cotg(x)^2),-cotg(x)). intFactor(a*x,a^x/log(a)).

Derivate dExpr(T,DT):-dTerm(T,DT). dExpr(E+T,DE+DT):-dExpr(E,DE),dTerm(T,DT). dExpr(E+T,DE-DT):-dExpr(E,DE),dTerm(T,DT). dTerm(F,DF) :-dFactor(F,DF). dTerm(T*F,DT*F+T*DF) :-dTerm(T,DT),dFactor(F,DF). dTerm(T/F,DT*F-T*DF/F*F) :-dTerm(T,DT),dFactor(F,DF). dFactor(x,1). dFactor(x^K,K*x^N):-number(K),N is K-1. dFactor(N,0) :-number(N). dFactor([E],DE) :-dExpr(E,DE). dFactor(-E,-DE) :-dExpr(E,DE). dFactor(sin(E),DE*cos(E)) :-dExpr(E,DE). dFactor(cos(E),-DE*sin(E)) :-dExpr(E,DE). dFactor(log(E),DE/E):-dExpr(E,DE). dFactor(exp(E),exp(E)*DE) :-dExpr(E,DE).

Perché Prolog La grammatica è di tipo 2, perché nella forma: A  a con A  VN, a  (VN+VT) + Il linguaggio è di tipo 3, in quanto non presenta self- embedding La grammatica non è LL(1) poiché serve più di un simbolo per riconoscere le produzioni da scegliere, ma prolog gestisce da sé il non determinismo L’interprete per derivate e integrali è molto più semplice grazie alla semplicità dell’elaborazione simbolica Poche regole Prolog ha un suo scanner e un suo parser Utilissimo il back tracking per riuscire a valutare le diverse tipologie di espressioni

Risultato rilevato Prolog, dopo aver valutato l’espressione valutata, ritorna il risultato visualizzandolo in notazione prefissa, non opportuna per la comprensione da parte della maggior parte degli utenti Es: Integrale di a^x=/(^(a,x),log(a)) Derivata di cos(x)=*(-(1),sin(x)) Soluzione: Creare un parser valutatore che consenta di cambiare la notazione in infissa Es: Integrale di a^x=((a^x)/log(a)) Derivata di cos(x)=((1-)*sin(x)) Motivazione: Si poteva pensare di generare un albero e visitarlo in modo da ritornare l’espressione in forma infissa, ma non sempre l’operando corrisponde a un operazione tra due termini… può trattarsi del segno

Grammatica :: :: “(” “,” “)” | ”(“ “)”| | | “(” “)” :: | | “(” “)” | In questa forma non sarebbe stata LL(1) :: :: ”(“ | | :: | | :: “,” “)” | “)” :: | “(” “)” :: “+” | “-” | “*” | “/” | “^” :: [“0”- “9”]([“0”- “9”])* :: [“a”- “z”] :: “sin” | “cos” | “log” | “exp” | “tg” | “cotg”

Analisi della grammatica La grammatica è di tipo 2 (context free) secondo la classificazione di Chomsky in quanto le produzioni sono vincolate alla forma: A → α con α є (VT U VN)* ed A є VN … tuttavia non sono presenti produzioni con self-embedding A → α1 A α2 con A є VN e α1, α2 є (VN U VT)+ … pertanto il linguaggio è regolare (tipo 3) La grammatica è priva di ε – rules. Il linguaggio quindi non prevede l’uso della stringa vuota, anche perché non ci sarebbe bisogno di invocare il parser

Architettura Package GUI: contiene le classi che implementano l’interfaccia grafica e la classe main che inizializza tutto e lancia il programma Package Parser: contiene le classi generate automaticamente da JavaCC che implementano e gestiscono il Parser e che modificano l’input, dato in notazione prefissa nell’output in notazione infissa Package calcolatrice: contiene le classi per l'elaborazione ed il calcolo delle espressioni mediante invocazione delle apposite Teorie Prolog

Test, limiti e sviluppi futuri Il programma è stato testato con diverse espressioni: sia per il calcolo di integrali che per il calcolo delle derivate È limitato al calcolo di integrali indefiniti semplici L’integrazione per parti è stata implementata con successo Altri possibili approcci importanti nel calcolo di integrali sono di difficile implementazione (es. sostituzione) È possibile espanderlo arricchendo le regole della teoria prolog È possibile aggiungere delle regole per poter calcolare integrali definiti… bastano delle regole opportune per la valutazione

Demo