cioè data una grammatica e una stringa, scopo del programma è controllare se la grammatica può generare quella stringa?
Butto li' una soluzione pensata 5 minuti, probabilmente nemmeno troppo efficiente, ma che descriverebbe appieno il problema in stile java:
definire un tipo di oggetto Simbolo
definire un tipo di oggetto NonTerminale che estende Simbolo
definire un tipo di oggetto Terminale che estende Simbolo
definire un tipo di oggetti Transizioni con due campi:
- il NonTerminale di partenza
- una lista di simboli (quindi terminali e non terminali) generati dal NonTerminale
notando che una transizione del tipo:
B -> CD | a | b
equilvarebbe a tre diversi oggetti Transizione per come ho descritto la soluzione.
Alternativamente, puoi inserire negli oggetti Transizione una lista di liste di simboli (una lista di simboli per ogni diversa produzione dallo stesso NonTerminale) cosi' da avere un solo oggetto Transizione per ogni NonTerminale che genera qualcosa.
In questo modo hai sotto forma di oggetti tutto quello che ti serve per procedere con la soluzione del tuo problema. Io non so come si fa a dire se una certa stringa appartiene ad un linguaggio, ma immagino tu abbia gli strumenti (teorici) per farlo.