Cree una calculadora usando gramática independiente del contexto
Implemente una calculadora simple que de soporte a infijos, polaco, y notación polaca inversa. Use la muestra incorporada "SemanticNumber" y defina reglas para la muestra personalizada "Math".
In[1]:=

calc = CloudDeploy[
GrammarRules[{GrammarToken["SemanticNumber"], GrammarToken["Math"]},
{"Math" -> GrammarToken["SemanticNumber"],
"Math" ->
AnyOrder[a : GrammarToken["Math"], "+",
b : GrammarToken["Math"]] :> a + b,
"Math" ->
AnyOrder[a : GrammarToken["Math"], "-",
b : GrammarToken["Math"]] :> a - b,
"Math" ->
AnyOrder[a : GrammarToken["Math"], "*",
b : GrammarToken["Math"]] :> a*b,
"Math" ->
AnyOrder[a : GrammarToken["Math"], "/",
b : GrammarToken["Math"]] :> a/b}
]
];
Pruebe la calculadora.
In[2]:=

GrammarApply[calc, "2 3 + * five"]
Out[2]=

In[3]:=

GrammarApply[calc, "* * * * 1 2 3 4 5"]
Out[3]=

In[4]:=

GrammarApply[calc, "1 2 3 4 5 + + + +"]
Out[4]=

Dependiendo de si usted usa infijo y/o notación polaca inversa, puede existir ambigüedad en el análisis de la entrada. Esto es manejado por la opción AmbiguityFunction. El resultado 16 corresponde al análisis de 2 (3 + 5) *, mientras el resultado 25 corresponde al análisis de (2 3 +) 5 *.
In[5]:=

GrammarApply[calc, "2 3 + 5 *", AmbiguityFunction -> All]
Out[5]=
