표현 트리에 대해 Composite design pattern에 대해 조금 읽으십시오. Wikipedia에 관한 기사에는 UML 다이어그램과 예제 Java 코드가 포함되어 있습니다.이 코드는 PHP로 번역하기가 어렵지 않습니다.
Shunting-yard 알고리즘을 살펴보고 문자열을 구문 분석 트리로 구문 분석 할 수 있습니다. 식 트리
A (매우 단순한) PHP의 예는 다음과 같을 수있다 :
이때
interface INode {
public function getValue();
}
class ValueNode implements INode {
private $val;
function __construct($val) {
$this->val = $val;
}
public function getValue() {
return $this->val;
}
}
class AdditionNode implements INode {
private $op1, $op2;
function __construct($op1, $op2) {
if(!($op1 instanceof INode) or !($op2 instanceof INode)) {
throw new Exception("The operands must implement the INode interface.");
}
$this->op1 = $op1;
$this->op2 = $op2;
}
public function getValue() {
return $this->op1->getValue() + $this->op2->getValue();
}
}
$a = new ValueNode(1);
$b = new ValueNode(5);
$c = new ValueNode(10);
$add1 = new AdditionNode($a, $b);
$add2 = new AdditionNode($add1, $c);
echo $add2->getValue(); // 16
에서, INode
인터페이스에서 루트로하는 서브 트리의 값을 반환한다 한 방법을 갖는다 노드.
ValueNode
클래스는 숫자가 표현식 트리의 일부가되도록 허용하는 간단한 래퍼입니다 (사실 PHP에서는 ValueNode
의 숫자로만 제한되지 않습니다). ValueNode
개체는 표현식 트리에서 리프 노드로만 제공 될 수 있습니다.
INode
개체를 어린이로 받아들이고 표현 트리를 만드는 데 도움이되는 AdditionNode
클래스로 복합 패턴을 사용하기 시작합니다.
이 예제를 확장하여 INode 인터페이스를 모두 구현하는 다른 연산, 변수, 상수 등을 추가 할 수 있습니다.
고무 희망 문제는 언어 C와 C++ 등을 모른다는 것입니다. –
당신은 알지 못합니다 ... 그냥 알고리즘입니다 ... PHP OOP를 사용하여 노드와 비슷한 것을 만듭니다 ... – Alex
흠,하지만 노드 란 무엇입니까? –