Rangierbahnhof Ausdruck validieren

Wir verwenden den Shunting-Yard-Algorithmus, um Ausdrücke auszuwerten. Wir können den Ausdruck validieren, indem wir einfach den Algorithmus anwenden. Es schlägt fehl, wenn Operanden, nicht übereinstimmende Klammern und andere Dinge fehlen. Der Shunting-Yard-Algorithmus verfügt jedoch über eine umfangreichere Syntax als nur ein vom Menschen lesbares Infix. Beispielsweise

1 + 2
+ 1 2
1 2 +

sind alle akzeptablen Möglichkeiten, um '1 + 2' als Eingabe für den Rangier-Yard-Algorithmus bereitzustellen. '+ 1 2' und '1 2 +' sind keine gültigen Infixe, aber der Standard-Shunting-Yard-Algorithmus kann sie verarbeiten. Der Algorithmus kümmert sich nicht wirklich um die Reihenfolge, er wendet Operatoren nach Rangfolge an und greift nach den nächstgelegenen Operanden.

Wir möchten unsere Eingaben auf gültige, für Menschen lesbare Infixe beschränken. Ich suche nach einer Möglichkeit, den Shunting-Yard-Algorithmus so zu ändern, dass er mit einem ungültigen Infix fehlschlägt, oder eine Infix-Validierung bereitzustellen, bevor Shunting-Yard verwendet wird.

Kennt jemand irgendwelche veröffentlichten Techniken, um dies zu tun? Wir müssen sowohl Basisoperatoren als auch benutzerdefinierte Operatoren, Klammern und Funktionen (mit mehreren Argumenten) unterstützen. Ich habe noch nichts gesehen, was mit mehr als den Basisoperatoren online funktioniert.

Vielen Dan

Antworten auf die Frage(4)

Ihre Antwort auf die Frage