Wolfram Language

Traitement de texte et de langues

Créez un calculateur en utilisant une grammaire indépendante du contexte

Déployez un simple calculateur qui prend en charge des infixes, le polonais, et la notation polonaise inverse. Utilisez l'unité intégrée "SemanticNumber" et définissez des règles pour l'unité personnalisée "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 le calculateur.

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

Selon que vous utilisez infixe et / ou notation polonaise inverse, il peut y avoir de l'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