Sto cercando di capire in che modo è possibile implementare il modello dell'interprete.
Comedadiagramma;un'espressioneha2nodi:terminaleeamp;nonterminale.Puòaverepiùtipidinodi?Perchécredochesiadisegnatoconsiderandol'espressionematematicatrasformatainalberobinarioDSincuiinodifogliasononumerieinodinonfogliasonooperazioni:+,-,/etc.
Daqualcheparteholettoche
Pattern pattern = Pattern.compile("^[abc](ab|c?d)?ef$");
Matcher matcher = pattern.matcher("some RE");
if(matcher.matches()){ .. }
Quindi stavo cercando di mettere in relazione se la mia implementazione del motore RE: BooleanSequence è anche un esempio di pattern dell'interprete.
BooleanSequence seq = new BooleanSequence("[abc](ab|c?d)?ef");
seq.compile();seq.minimize();
Matcher matcher = seq.getCoreMatcher();
matcher.match("some RE");
Nota di implementazione:
La classe principale BooleanSequence (BS) accetta RE (può essere considerato come contesto ) e crea una sorta di DS in memoria, in cui ogni char di RE è un nodo. Esistono molti tipi di nodi, come: normale, intervallo, pigro, ecc. Credo che possa essere considerato come espressione come indicato nel diagramma.
La classe Node ha anche match (). BS dà un matcher o può essere creato separatamente. È completamente isolato dalla classe BS. E ci sono molti tipi di giocatori (attualmente 3). Le chiamate matcher corrispondono a () di tutti i nodi fino a quando viene valutata l'intera espressione.