Wolfram言語

テキストと言語の処理

文脈自由文法を使って柔軟な計算機を作る

中置演算子,ポーランド表記,逆ポーランド表記をサポートする単純な計算機を配備する.組込みトークンの"SemanticNumber"を用い,カスタムトークン"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 ko pt-br ru zh