用Java语言的递归方法实现解释器模式两位数的简单加减法运算
时间: 2024-05-14 12:15:23 浏览: 14
好的,我可以为你提供一个简单的Java代码实现,用于计算两个数的加减法运算,并且使用递归方法进行解释器模式的实现。
首先,我们需要定义一个抽象节点类,用于表示语法树中的节点,包含一个用于计算值的抽象方法:
```
abstract class Node {
public abstract int interpret();
}
```
接下来,我们需要定义两个子类,用于表示数字节点和运算符节点:
```
class NumberNode extends Node {
private int number;
public NumberNode(int number) {
this.number = number;
}
public int interpret() {
return number;
}
}
class OperatorNode extends Node {
private Node left;
private Node right;
private char operator;
public OperatorNode(Node left, Node right, char operator) {
this.left = left;
this.right = right;
this.operator = operator;
}
public int interpret() {
switch (operator) {
case '+':
return left.interpret() + right.interpret();
case '-':
return left.interpret() - right.interpret();
default:
throw new IllegalArgumentException("Invalid operator");
}
}
}
```
最后,我们需要定义一个解释器类,用于将输入的表达式解析为语法树,并计算其值:
```
class Interpreter {
private String input;
private int index;
public Interpreter(String input) {
this.input = input;
this.index = 0;
}
public Node parse() {
Node left = parseNumber();
if (index >= input.length()) {
return left;
}
char operator = input.charAt(index);
index++;
Node right = parse();
return new OperatorNode(left, right, operator);
}
private Node parseNumber() {
int number = 0;
while (index < input.length() && Character.isDigit(input.charAt(index))) {
number = number * 10 + input.charAt(index) - '0';
index++;
}
return new NumberNode(number);
}
}
```
使用方法如下:
```
String input = "2+3-4";
Interpreter interpreter = new Interpreter(input);
Node syntaxTree = interpreter.parse();
System.out.println(syntaxTree.interpret()); // 输出:1
```
这段代码将会计算表达式 "2+3-4",结果为 1。
希望这个代码能够帮助你理解解释器模式的实现方式。