我目前正在實現我自己的數學解析器 - 並且我有幾個關於如何繼續的問題。數學解析器 - 令牌結構
到目前爲止,我的解析器將輸入字符串轉換成令牌:
public class Token
{
final public String expression;
final public int value;
public Token(String expression, int value)
{
this.expression = expression;
this.value = value;
}
}
每個字符串,表達,是一個有效項 - 數,運算符或函數。 Integer類型被傳遞給一個枚舉來標識該標記。
當輸入字符串被分成標記時,表達式將用Shunting-yard算法進行分析。
我的問題:我想令牌創建它們類型的對象。這樣做的一種方法可能是:
public abstract class MathCommand
{
final static Hashtable<Character, Operator> operatorTable = new Hashtable<Character, Operator>()
{{
put('+', new Addition());
put('-', new Subtraction());
put('/', new Division());
put('*', new Multiplication());
}};
public abstract Object getMathCommand();
}
和一個類似的Hashtable函數。
現在,類Token擴展了MathCommand - 並且Token可以返回其類型的函數或操作符。缺點是Token返回一個Object,而不是一個Operator或一個Function。運算符和函數中方法的區別顯然不大。
某運營商的方法:
getValue(String number1, String number2);
和一個函數有方法:
getValue(String number);
我可以以某種方式實現一個接口,並覆蓋方法GetValue是上述之一?
是運營商,加...自己的類?你只是想實現一個接口? – Dien
對不起,他們是我自己的班級。運算符是加法,減法等的超類。我將在後文中對其進行編輯。 –
你有沒有考慮過使用[varargs](https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html)? – kaykay