Heim  >  Artikel  >  Java  >  Wie kann ich in Java einen Baum aus arithmetischen Ausdrücken analysieren und erstellen?

Wie kann ich in Java einen Baum aus arithmetischen Ausdrücken analysieren und erstellen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-24 18:33:02586Durchsuche

How to Parse and Build a Tree from Arithmetic Expressions in Java?

Arithmetischen Ausdruck analysieren und daraus einen Baum in Java erstellen

Einführung

Arithmetische Ausdrücke analysieren und äquivalente Bäume erstellen ist eine wesentliche Aufgabe im Compiler-Design und in der Sprachverarbeitung. In diesem Artikel wird gezeigt, wie man einen arithmetischen Ausdruck analysiert und eine Baumdarstellung in Java erstellt.

Ausdruck analysieren

Um den Ausdruck zu analysieren, können wir einen Stapel verwenden. basierten Algorithmus. Während wir den Ausdruck durchlaufen:

  • Schieben Sie öffnende Klammern auf den Stapel.
  • Schieben Sie Zahlen und Operatoren auf den Stapel.
  • Wenn Sie auf eine schließende Klammer stoßen, werten Sie die aus Unterbaum, indem Sie den Stapel öffnen, bis die passende öffnende Klammer erreicht ist, und dann das Ergebnis auf den Stapel verschieben.

Aufbau des Baums

Sobald der Ausdruck analysiert ist, Wir können die Baumknoten aus dem Stapel erstellen:

  • Blattknoten: Ganzzahlen werden zu LeafInt-Knoten.
  • Operatorknoten:Operatoren werden Knoten mit PlusOp-, MinusOp-, MultOp- oder DivOp-Klassen und ihre untergeordneten Elemente sind Pops vom Stapel.

Beispiel

Betrachten Sie den Ausdruck (5 2) *7:

<code class="java">Stack<Node> stack = new Stack<>();
stack.push(new LeafInt(5));
stack.push(new PlusOp());
stack.push(new LeafInt(2));
stack.push(new MultOp());
stack.push(new LeafInt(7));
while (stack.size() > 1) {
  Node right = stack.pop();
  Operator op = (Operator) stack.pop();
  Node left = stack.pop();
  stack.push(new OpNode(op, left, right));
}</code>

Der resultierende Baum hätte die folgende Struktur:

    *
   / \
  +   7
 / \
5   2

Umgang mit negativen Zahlen und Klammern

Um mit negativen Zahlen umzugehen Zahlen, stellen Sie sie als 5 (-2) anstelle von 5-2 dar. Negative Vorzeichen haben immer unären Vorrang. Ebenso erzwingen Klammern die Reihenfolge der Operationen.

Validierung

Um die Richtigkeit sicherzustellen, validieren Sie den Ausdruck, indem Sie Folgendes überprüfen:

  • Öffnende Klammern haben passende schließende Klammern.
  • Jeder Operator hat die richtige Anzahl von Operanden.

Schlussfolgerung

Bei Verwendung eines stapelbasierten Algorithmus ist dies der Fall Es ist einfach, arithmetische Ausdrücke zu analysieren und ihre entsprechenden Baumdarstellungen zu erstellen. Dieser Ansatz bietet eine zuverlässige Grundlage für die weitere Analyse und Manipulation arithmetischer Ausdrücke in Java.

Das obige ist der detaillierte Inhalt vonWie kann ich in Java einen Baum aus arithmetischen Ausdrücken analysieren und erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn