Wolfram Language

Traitement de texte et de langues

Créez une calculatrice en utilisant une grammaire indépendante du contexte

Déployez une calculatrice simple qui prend en charge la notation infixe, polonaise et polonaise inversée. Utilisez l'élément intégré "SemanticNumber" et définissez des règles pour l'élément personnalisé "Math".

In[1]:=
Click for copyable input
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} ] ];

Essayez la calculatrice.

In[2]:=
Click for copyable input
GrammarApply[calc, "2 3 + * five"]
Out[2]=
In[3]:=
Click for copyable input
GrammarApply[calc, "* * * * 1 2 3 4 5"]
Out[3]=
In[4]:=
Click for copyable input
GrammarApply[calc, "1 2 3 4 5 + + + +"]
Out[4]=

En fonction de l'utilisation de la notation polonaise infixe et/ou inversée, il peut y avoir une ambiguïté dans l'analyse de l'entrée. Ceci est géré par l'option AmbiguityFunction. Le résultat 16 correspond à l'analyse syntaxique 2 (3 + 5) *, tandis que le résultat 25 correspond à l'analyse syntaxique (2 3 +) 5 *.

In[5]:=
Click for copyable input
GrammarApply[calc, "2 3 + 5 *", AmbiguityFunction -> All]
Out[5]=

Exemples connexes

de en es ja ko pt-br ru zh