File Name Manager
Progetto di Linguaggi e Modelli
Computazionali LS
di
Tomaiuoli Giuseppe mat 0196947
Visione
A tutti noi è capitato negli ultimi anni, dopo una
vacanza o dopo una festa o dopo un qualsiasi
evento di avere una quantità di foto spaventosa, in
formato digitale, con nomi assurdi, dovuti al setup
della fotocamera digitale e di doverli quindi
modificare uno per uno, magari scrivendo il nome
dell’evento e spesso anche numerandole. Perché
non inventarsi un linguaggio specifico che consenta
di fare questo in modo rapido ed indolore?
Desiderio
• Aggiungi a tutti i file “sanSiro”
• Cambia “DWC” con “compleanno”
• Aggiungi codice numerico di 5 cifre a
partire da 11. (Es. 00011, 00012 ecc…).
• Togli “SonyDigitalCamera” da tutti i file..
• ………..
• ………..
Grammatica (versione 1)
• <Program> ::= <Modify>
• <Modify> ::= Change <Old> <New>
| Less <Old>
| Add <New> <Where>
• <Old> ::= StringChars
• <New> ::= <Old>
| Hm Code
• <Where> ::= Pre | Post
Grammatica terminali (versione 1)
•
•
•
•
•
•
•
•
•
Perché le “|”?
Change = [C]
Perché {Printable}
Less = [L]
comprende anche i
bianchi
Add = [A]
StringChars = '|'{PrintableNot}+'|'
Pre =[H]
Caratteri non
accettati nei nomi
Post =[T]
dei file da
Windows
Hm= [123456789]
{PrintableNot}={Printable} -["\/:*?<>|]
Code = 0{Digit}+
Perché “0” ?
Hm≠Code
Semantica
• Add aggiunge una stringa o un codice al
nome del file come prefisso o suffisso (Pre o
Post) definito da Where
• Change modifica il nome del file sostituendo
la parte “Old” con la parte “New”
• Less toglie la parte “Old” dal nome del file
• New è la parte da aggiungere, può essere
una stringa o un codice numerico
• Code è il codice formato da “Hm” cifre (es. 4 in 5
cifre = 00004)
Realizzazione
a. Da linea di comando (poco “user friendly” è
antipatico come il DOS… agli utenti “normali”)
b. Console Grafica (molto graditaAnd
ai più,
thevedi
Winner is….
successo di “Windows”)
c. Comandi Vocali (molto comodo da utilizzare, un po’
complicato da settare, difficoltà per DWC)
d. Altro…… (visto l’ambito di questo progetto non è il caso
di addentrarsi in implementazioni particolarmente sofisticate)
Idea del Prototipo
Scelte Progettuali e Strumenti 1
•
•
•
•
Linguaggio di Programmazione: JAVA
Strumento di sviluppo IDE : NetBeans
Strumento di sviluppo UML: JUDE
Scanner e Parser sono gratis con quasi tutti
gli strumenti
• GoldParser Builder consente:
–
–
–
–
–
separare la grammatica (EBNF)
parsing table
testare nel framework
implementare il Parser in diversi Linguaggi
Maggiore potenza in quanto è LALR
• Interprete: GoldParser Engine
Scelte Progettuali e Strumenti 2
• JavaCC consente:
– Di sviluppare scanner e parser a partire dal
file della grammatica .jj
– non consente di testare la grammatica
• JTB abbinato a JavaCC consente:
– Di creare l’albero sintattico astratto APT
– Modificare la semantica senza modificare il
file della grammatica
– Implementare facilmente il pattern Visitor
Scelte Progettuali e Strumenti 3
Quindi?:
• Essendo la grammatica LL(1) non è
necessario sfruttare la maggiore
potenza di GP che è LALR
• Una volta testata la grammatica con GP
si sviluppano parser e scanner e APT
con JTB & JavaCC
Definizione della Grammatica per JavaCC e JTB
void Input() :{ }
{ modifica() <EOF> }
void modifica():{ }
{ <CHANGE> <OLD> nuova()
| <LESS> <OLD>
| <ADD> nuova() where()
}
void nuova():{ }
{ <OLD>
|<HM> <CODE>
}
void where():{}
{ <PRE>
|<POST>
}
Grammatica - Terminali
TOKEN:{<CHANGE:"C">}
TOKEN:{<ADD:"A">}
TOKEN:{<LESS:"L">}
TOKEN:{<PRE:"H">}
TOKEN:{<POST:"T">}
TOKEN:{<HM:["1"-"9"]>}
TOKEN:{<CODE:"0"(["0"-"9"])+>}
TOKEN:{<OLD:"|"["$","0"-"9","A"-"Z","_","a"-"z","!"," ","-","+",
"£","%","&","(",")","[","]","{","}","^",",",".",
";","ò","à","ç","°","ù","§","è","é","ì","'"]
(["$","0"-"9","A"-"Z","_","a"-"z","!"," ","-","+",
"£","%","&","(",")","[","]","{","}","^",",",".",
";","ò","à","ç","°","ù","§","è","é","ì","'"])*"|">}
Linguaggio
• Frasi Lecite:
– C |stirnga| (|stringa| o numero di Cifre e Codice Iniziale)
• C |pippo| |pluto| o C |pippo| 7 05
– L |stringa|
• L |pluto|
– A (|stringa| o numero di Cifre e Codice) dove (prefisso = H
suffisso = T)
• A |pippo| H o A 7 08 T
• Proprietà del Linguaggio:
– Generabile
– Decidibile
– Cardinalità infinita (stringhe e codice)
• Non c’è la Stringa Vuota ε, non necessaria
• Riconoscitore: ASF, RSF
Albero di Derivazione
Modifica
CHANGE
OLD
C
|pippo|
New
HM
CODE
5
07
Albero di Derivazione
Modifica
CHANGE
OLD
New
C
|DWC|
OLD
|28-05-2003|
Albero di Derivazione
Modifica
ADD
A
New
HM
Where
CODE
5
PRE
0654
H
Architettura
Diagramma delle Classi
Implementazion
e
Pattern
Visitor
Demo
Limiti e Sviluppi Futuri
• Non è stata implementata la possibilità di riordinare i
file in un modo differente dall’ordine alfabetico ….
• Si possono aggiungere ulteriori TOKEN alla
grammatica per gestire Date, Estensione dei File, ecc
…
• Sicuramente è migliorabile dal punto di vista della
grafica, dell’efficienza e dei tempi di esecuzione
• Si possono aggiungere funzionalità che tengano
conto di caratteri “jolly”
• La possibilità di salvare una copia diversa dei file con
i nuovi nomi in altre locazioni invece di modificarne i
nomi nella posizione corrente
• Ecc …
Conclusioni
Dato che non si voleva e doveva sviluppare un
prodotto commerciale ma solo un prodotto
che desse la possibilità di fare esperienza
con gli strumenti e testare la preparazione
sugli argomenti del corso si sono trascurate
alcune
delle
parti
precedentemente
evidenziate.
Magari in futuro si potranno migliorare e
sviluppare al fine di ottenere un prodotto
commerciale.
Fine
Scarica

FileNameManager