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]=