Wolfram 语言

文本和语言处理

使用上下文无关语法生成灵活的计算器

部署支持中缀记法、波兰和逆波兰记法的简单计算器. 使用内置 token "SemanticNumber" 并为自定义 token "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} ] ];

试用计算器.

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

取决于是否使用中缀和/或逆波兰表示法,可能无法对输入进行明确的解析. 可以用选项 AmbiguityFunction 进行处理. 结果 16 与对 2 (3 + 5) * 的解析相匹配,同时结果 25 与对 (2 3 +) 5 * 的解析匹配.

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

相关范例

de en es fr ja ko pt-br ru