S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari ( Riserve )? Riserve ::= ElencoRiserve Difesa ::= ( Difesa_5 Modulo_D5 | Difesa_4 Modulo_D4 | Difesa_3 Modulo_D3 ) Modulo_D3 ::= ( Modulo_D3_C5_A2 | Modulo_D3_C4_A3 ) Modulo_D3_C5_A2 ::= Centrocampo_5 Attacco_2 Modulo_D3_C4_A3 ::= Centrocampo_4 Attacco_3 S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino | Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari ( Riserve )? Riserve ::= ElencoRiserve Difesa ::= ( Difesa_5 Modulo_D5 | Difesa_4 Modulo_D4 | Difesa_3 Modulo_D3 ) Modulo_D3 ::= ( Modulo_D3_C5_A2 | Modulo_D3_C4_A3 ) Modulo_D3_C5_A2 ::= Centrocampo_5 Attacco_2 Modulo_D3_C4_A3 ::= Centrocampo_4 Attacco_3
Modulo_D4 ::= ( Modulo_D4_C5_A1 | Modulo_D4_C4_A2 | Modulo_D4_C3_A3 ) Modulo_D4_C5_A1 ::= Centrocampo_5 Attacco_1 Modulo_D4_C4_A2 ::= Centrocampo_4 Attacco_2 Modulo_D4_C3_A3 ::= Centrocampo_3 Attacco_3 Modulo_D5 ::= ( Modulo_D5_C4_A1 | Modulo_D5_C3_A2 ) Modulo_D5_C4_A1 ::= Centrocampo_4 Attacco_1 Modulo_D5_C3_A2 ::= Centrocampo_3 Attacco_2 ElencoTitolari ::= Nome ( Nome )* ElencoRiserve ::= Nome ( Nome )* Nome ::= ( Secondo_Nome )* Secondo_Nome ::= Modulo_D4 ::= ( Modulo_D4_C5_A1 | Modulo_D4_C4_A2 | Modulo_D4_C3_A3 ) Modulo_D4_C5_A1 ::= Centrocampo_5 Attacco_1 Modulo_D4_C4_A2 ::= Centrocampo_4 Attacco_2 Modulo_D4_C3_A3 ::= Centrocampo_3 Attacco_3 Modulo_D5 ::= ( Modulo_D5_C4_A1 | Modulo_D5_C3_A2 ) Modulo_D5_C4_A1 ::= Centrocampo_4 Attacco_1 Modulo_D5_C3_A2 ::= Centrocampo_3 Attacco_2 ElencoTitolari ::= Nome ( Nome )* ElencoRiserve ::= Nome ( Nome )* Nome ::= ( Secondo_Nome )* Secondo_Nome ::=
Difesa_3 ::= Difesa_4 ::= Difesa_5 ::= Centrocampo_3 ::= Centrocampo_4 ::= Centrocampo_5 ::= Attacco_1 ::= Attacco_2 ::= Attacco_3 ::= Difesa_3 ::= Difesa_4 ::= Difesa_5 ::= Centrocampo_3 ::= Centrocampo_4 ::= Centrocampo_5 ::= Attacco_1 ::= Attacco_2 ::= Attacco_3 ::= TOKEN: { | | <NOME: ["a"-"z"](["a"-"z"])*("è)*(è)*(ù)*(ù)*(ò)* ( )*(à)*([a-z])*([-])*([a-z"])*(è)* (è)*(ù)*(ò) *(à)*(ù)*( )([a-z])* ([0-9])*> }
Condizione necessaria e sufficiente perché una Grammatica Context-Free sia LL(1) è che per ogni metasimbolo che appare nella parte sinistra di più produzioni, i DIRECTOR-SYMBOLS (DS) relativi a produzioni alternative siano disgiunti Team ::= Schema Tabellino | Tabellino Difesa ::= ( Difesa_5 Modulo_D5 | Difesa_4 Modulo_D4 | Difesa_3 Modulo_D3 ) Modulo_D3 ::= ( Modulo_D3_C5_A2 | Modulo_D3_C4_A3 ) Modulo_D4 ::= ( Modulo_D4_C5_A1 | Modulo_D4_C4_A2 | Modulo_D4_C3_A3 ) Modulo_D5 ::= ( Modulo_D5_C4_A1 | Modulo_D5_C3_A2 ) Team ::= Schema Tabellino | Tabellino Difesa ::= ( Difesa_5 Modulo_D5 | Difesa_4 Modulo_D4 | Difesa_3 Modulo_D3 ) Modulo_D3 ::= ( Modulo_D3_C5_A2 | Modulo_D3_C4_A3 ) Modulo_D4 ::= ( Modulo_D4_C5_A1 | Modulo_D4_C4_A2 | Modulo_D4_C3_A3 ) Modulo_D5 ::= ( Modulo_D5_C4_A1 | Modulo_D5_C3_A2 ) Ogni metasimbolo che appare nella parte più a sinistra di più produzioni, ha gli Starter Symbols corrispondenti alle parti destre di queste produzioni alternative, disgiunti.
S ::= Formazione Formazione ::= NomeSquadra Team NomeSquadra ::= Team ::= Schema Tabellino Schema ::= Difesa Tabellino ::= ElencoTitolari Riserve Difesa::= Difesa_3 Modulo_D3 Difesa_3 ::= Modulo_D3 ::= Modulo_D3_C4_A3 Modulo_D3_C4_A3 ::= Centrocampo_4 Attacco_3 Centrocampo_4 ::= Attacco_3 ::= Difesa::= Difesa_3 Modulo_D3 Difesa_3 ::= Modulo_D3 ::= Modulo_D3_C4_A3 Modulo_D3_C4_A3 ::= Centrocampo_4 Attacco_3 Centrocampo_4 ::= Attacco_3 ::=
MainClass ControlClass control FantaManagerGUI … gui PlayersFileReader XLSProcessor PrintToPDF fileUtility FantaManagerParserTokenManager FantaManagerParser … parser Nome Nome Squadra … syntaxtree Visitor DepthFirstVisitor FantaManagerVisitor … visitor Player TeamMaker SoccerFieldMaker TeamScoreCalculator team -classe creata automaticamente; -effettua lanalisi lessicale (individua i token che compongono la stringa in input). -classe creata automaticamente; -effettua lanalisi lessicale (individua i token che compongono la stringa in input). -classe creata automaticamente; -effettua lanalisi sintattica (verifica che una frase possa essere costruita in base alle regole della grammatica); -produce una rappresentazione interna della frase – albero. -classe creata automaticamente; -effettua lanalisi sintattica (verifica che una frase possa essere costruita in base alle regole della grammatica); -produce una rappresentazione interna della frase – albero. -package creato automaticamente; -contiene le classi necessarie per la costruzione dellalbero. -package creato automaticamente; -contiene le classi necessarie per la costruzione dellalbero. -grazie alla tecnica del double- dispatch visita lalbero (APT) e realizza la funzione di interpretazione -contiene le classi per la gestione dei file. -contiene tutte le classi necessarie per la gestione dei giocatori e della squadra -Il parser effettua anche alcuni controlli semantici: verifica che lelenco dei titolari comprenda esattamente 11 giocatori; verifica che lelenco delle riserve comprenda al più 7 giocatori verifica che non sia stato inserito più volte lo stesso giocatore -Il parser effettua anche alcuni controlli semantici: verifica che lelenco dei titolari comprenda esattamente 11 giocatori; verifica che lelenco delle riserve comprenda al più 7 giocatori verifica che non sia stato inserito più volte lo stesso giocatore -La classe TeamMaker effettua anche alcuni controlli: verifica che i nomi dei giocatori siano tutti validi; quando il modulo è stato inserito in input controlla che questo sia compatibile con il ruolo dei giocatori schierati come titolari; quando il modulo non è stato introdotto in input verifica che il ruolo dei giocatori inseriti come titolari non determini uno schema non valido -La classe TeamMaker effettua anche alcuni controlli: verifica che i nomi dei giocatori siano tutti validi; quando il modulo è stato inserito in input controlla che questo sia compatibile con il ruolo dei giocatori schierati come titolari; quando il modulo non è stato introdotto in input verifica che il ruolo dei giocatori inseriti come titolari non determini uno schema non valido