Sto scrivendo un parser di discesa ricorsivo.
Lascia che% co_de specifichi il contesto per l'analisi. Pseudocodice:
class ParseContext {
Logger logger; // logger for error/warning messages
Locale locale; // locale for error/warning messages
}
Le classi derivate da ParseContext
possono specificare ulteriori opzioni di analisi, come la versione della grammatica o se gli avvertimenti devono essere considerati come errori.
Ora definisci ParseContext
.
1.
class Parser {
Parser(ParseContext context) {
this.context = context;
}
abstract function parse(String text) return Object;
}
o
2.
class Parser {
Parser() {
}
abstract function parse(ParseContext context, String text) return Object;
}
Quale delle classi Parser
sopra è un modello noto e che è un antipattern noto? O forse, nessuno dei due è nel set di antipatterns conosciuti? Il primo sembra essere un esempio di modello di iniezione di dipendenza. Ciò implica che l'altro è un antipattern?
Sembra insolito chiamare Parser
con diversi diversi argomenti .parse
. Vuol dire che non ha senso rifattare "2" come opzione di costruzione invece (come in "1")?
Quali sono (dis) vantaggi di entrambi?