Stiamo costruendo un interprete per una lingua come parte dei requisiti in uno dei nostri corsi universitari. Parte del progetto prevede la scrittura di un lexer e un parser. Il parser genera un AST. Ovviamente, l'AST avrebbe nodi.
Uno dei nodi di tale AST è ArithmeticOperationNode
. Questo nodo sarà un nodo contenente operazioni che implicano l'aritmetica. Il codice seguente è una versione ridotta del nodo.
package ds.ast;
import exceptions.CompilerException;
import exceptions.RuntimeException;
public class ArithmeticOperationNode extends OperationNode
{
public ArithmeticOperationNode(String operation, Computable operator1, Computable operator2, int startingLine, int startingColumn)
{
super(operation, operator1, operator2, startingLine, startingColumn);
}
public Value compute() throws RuntimeException, CompilerException
{
...
}
}
NOTA : OperationNode
implementa un'interfaccia chiamata Computable
.
compute()
sarà responsabile dell'esecuzione dell'operazione aritmetica tra operator1
e operator2
. operator1
e operator2
possono essere un'altra espressione aritmetica. La funzione verrà chiamata quando attraverseremo l'AST durante l'esecuzione. Ci sono molti nodi che seguono lo stesso design, cioè con una funzione compute()
.
Sto violando il principio di responsabilità unica con questo? ho la sensazione che lo stia facendo.