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 ja pt-br ru zh