Ich habe einen Ausdruck wie unten. MIN (MAX (AVG (4,2), 2,3), SUM (1,2))) Ich habe einen Rangierbahnhof-Algorithmus implementiert, um Infix in umgekehrte polnische Notation umzuwandeln. Ich füge die Funktion MAX, MIN und AVG mit zwei Argumenten hinzu. Aber angenommen, wenn ich Variablenargumente implementieren möchte, dann muss ich wissen, wie viele Argumente jede Funktion im Infix-Ausdruck hatte. Kann mir jemand sagen, wie ich den Rangierbahnhof-Algorithmus ändern könnte, um Nein zu enthalten? der Argumente jeder Funktion beim Konvertieren von Infix zu RPN?Wie zählt man die Anzahl der Argumente einer Methode während der Umwandlung von Infix-Ausdruck in umgekehrte polnische Notation
Antwort
So habe ich es endlich getan. Wenn das Token eine offene Klammer ist, füge ich es der Ausgabewarteschlange hinzu. Wenn ich dann die RPN-Ausgabe konvertiere oder ausführe und auf ein Funktionsaufruf-Token stoße, platziere ich Elemente vom Stapel, bis ich auf eine offene Klammer stoße, verwerfe sie und betrachte alles dazwischen als ein Argument für die Funktion.
Wahrscheinlich nicht eine saubere Lösung, sondern arbeitete wie ein Charme :)
Also, wenn Sie log max(1, 2, 3, 4, 5)
haben Sie tun:
log => push sin to stack
max => push max to stack
(=> push (to stack
1 => push 1 to stack
, => pop top of stack to output => pop 1 to output
2 => push 2 to stack
, => pop 2 to output
...
=> end result: 1 2 3 4 5 max log
Das Problem ist, dass Sie nicht wissen, wie viele Argumente gehören zu max
und wie viele zu log
(der Logarithmus nicht nehmen oder kann die Base kann als Argument auch).
die wikipedia description benutzen, sollte es möglich sein, jedes Funktionsargument Trennzeichen (Komma) zu zählen: Wenn Sie k
Funktion Separatoren haben, dann haben Sie k + 1
Argumente, so könnten Sie geben ein 1 2 3 4 5 max_5 log
oben. Achten Sie darauf, unterschiedliche Zählungen im Fall von verschachtelten Funktionen haben:
max(1, 2, log(3, 4), 5) => 1 2 3 4 log_2 5 max_4
---------
max has 4 arguments after evaluating log_2(3, 4)
Sie einen Zähler für die max
Token und eine andere für die log
Funktion haben würde. Sie müssen die Zählung für das oberste Funktionstoken in Ihrem Stapel, aber auch für alle anderen Funktionstoken in Ihrem Stapel verfolgen, da Sie diese Zählungen eventuell fortsetzen können.
Eine etwas sauberere Lösung ist, einen anderen Stapel zu machen. Drücke die aktuelle Token-Position dieses Stapels, um eine offene Klammer zu finden. Wenn eine geschlossene Klammer gefunden wird, geben Sie den ersten Wert ein und verwenden Sie den Unterschied zwischen der aktuellen Token-Position, um die Gesamtzahl der Argumente zwischen den Klammern zu ermitteln. Wenn der Operator eine Funktion ist, können Sie den Wert verwenden oder anderweitig verwerfen.
- 1. Wie man die Anzahl der Wörter in einer Zeichenfolge zählt?
- 2. Anzahl der während der Überladung der Java-Methode zusammenfallenden Argumente
- 3. Wie zählt diese Methode die Anzahl der 1en in Binärdarstellung?
- 4. Wie man die Anzahl der Beziehungen in Neo4j zählt
- 5. Wie zählt man die Anzahl der Schlüssel in einem Hash?
- 6. Wie zählt man die Anzahl der Wörter in einem Satz?
- 7. Wie man die Anzahl der hochgeladenen Dateien in PHP zählt
- 8. Wie man die Anzahl der Funktionsaufrufe in Erlang zählt?
- 9. Wie zählt man die Anzahl der Elemente mit AQL?
- 10. Wie man die Anzahl der Gruppenelemente mit Pandas zählt
- 11. Wie zählt man die Anzahl/Anzahl der Schlüssel von JSON in postgresql?
- 12. Perl zählt die Anzahl der Pakete in einer Verbindung
- 13. Interpreter Rekursive Polnische Notation mit Token-Liste
- 14. Konvertierung der umgekehrten polnischen Notation
- 15. Unbekannte Anzahl der Argumente der Methode in Reflexion
- 16. Rubin: die Anzahl von 1en in einer binären Zahl zählt
- 17. Wie zählt man die Anzahl der CRTP-Unterklassen einer Template-Klasse?
- 18. wie dynamisch überprüfen Anzahl der Argumente einer Funktion in PHP
- 19. Wie man die Anzahl der Zahlen/Buchstaben in der Datei zählt?
- 20. Umgekehrte vorzeichenlose Umwandlung in Java
- 21. die Anzahl der Vorlage Argumente einer variadische Vorlage speichern
- 22. Javascript zählt Anzahl der Wiederholungen eines Elements
- 23. Anzahl der Argumente in Funktion
- 24. gnuplot Anzahl der Argumente in der Funktion
- 25. Wie berechnet man die Anzahl der Operationen, die während der Ausführung einer for-Schleife auftreten?
- 26. string.format Variable Anzahl der Argumente
- 27. Umwandlung von Unicode-Zeichen in Unicode-Notation
- 28. Wie zählt und schätzt Google die Anzahl der Suchergebnisse?
- 29. Wie man die Anzahl der XML-Knoten zählt, die einen bestimmten Wert enthalten
- 30. Angular.js: Wie man die Anzahl der Elemente in verschachtelten ng-Wiederholungen zählt