Ein Rechner, der natürliche Sprache versteht
In diesem Beispiel wird ein einfacher Rechner erstellt, der Zahlen in natürlicher englischer Sprache verarbeitet und Infix-Operatoren unterschiedlicher relativer Rangfolge unterstützt.
Verwenden Sie den integrierten Token "SemanticNumber" und vier weitere benutzerdefinierte Tokens.

tokens = {GrammarToken["SemanticNumber"], GrammarToken["Summand"],
GrammarToken["Multiplicand"], GrammarToken["Addition"],
GrammarToken["Multiplication"]};
Ein Summand kann ein vollständiger Additionsausdruck (um Assoziativität festzulegen), ein vollständiger Multiplikationsausdruck oder eine Zahl sein. Ein Multiplikand kann ein vollständiger Multiplikationsausdruck (um erneut Assoziativität festzulegen) oder eine Zahl sein, jedoch kein Additionsausdruck. Somit hat Multiplikation Vorrang vor Addition.

defs1 = {"Summand" ->
s : (GrammarToken["Addition"] | GrammarToken["Multiplication"] |
GrammarToken["SemanticNumber"]) :> s,
"Multiplicand" ->
m : (GrammarToken["Multiplication"] |
GrammarToken["SemanticNumber"]) :> m};
Assoziieren Sie den "Addition"-Token mit Summen und Restbeträgen, und den "Multiplication"-Token mit Produkten und Divisionen. Rest und Division sind nicht kommutative, daher müssen Sie die Reihenfolge der Terme mit FixedOrder bewahren.

defs2 = {
"Addition" ->
FixedOrder[a : GrammarToken["Summand"], "+",
b : GrammarToken["Summand"]] :> a + b,
"Addition" ->
FixedOrder[a : GrammarToken["Summand"], "-",
b : GrammarToken["Summand"]] :> a - b,
"Multiplication" ->
FixedOrder[a : GrammarToken["Multiplicand"], "*",
b : GrammarToken["Multiplicand"]] :> a*b,
"Multiplication" ->
FixedOrder[a : GrammarToken["Multiplicand"], "/",
b : GrammarToken["Multiplicand"]] :> a/b};
Stellen Sie das GrammarRules-Objekt in der Wolfram Cloud bereit.

calc = CloudDeploy[GrammarRules[tokens, Join[defs1, defs2]]];
Evaluieren Sie arithmetische Eingaben in natürlicher Sprache.

GrammarApply[calc, "one + one"]


GrammarApply[calc, "one + two + three"]


GrammarApply[calc, "five + seventeen * ten"]


GrammarApply[calc, "one hundred - one hundredth"]


GrammarApply[calc, "zero + one/forty-five"]


GrammarApply[calc, "one/forty-five - one"]
