2010-07-05 1 views
2

간단한 수식 파서를 구현해야합니다. 제가하고있는 일은 먼저 postfix notation을 만들고 나서 evaluating the postfix string을 만듭니다. 안타깝게도이 알고리즘에서는 대괄호 (2 + 3) *를 사용할 수 없습니다. 대괄호를 허용하도록 알고리즘을 확장하는 방법을 아는 사람은 누구입니까? 사전에브래킷이있는 수식 파서

감사합니다,
프랭크

답변

6

후위 표기법의 요점은 당신이 더 쉽게 식을 계산할 수 있도록 중위 표기법으로 괄호를 제거하는 것입니다. 현재 알고리즘이 삽입 식에 대괄호를 허용하지 않으면 잘못된 알고리즘을 사용하고있는 것입니다.

중첩 버전에 대괄호가있는 경우에도 shunting yard algorithm은 중급어에서 후미어로 변환 할 수 있습니다.

+0

안녕하세요 블라드, 내가 사용한 알고리즘은 "벗겨진 다운"shunting 마당입니다. 위키피디아의 정보를 통해 나는 그것을 적절하게 적용 할 수있었습니다. 많은 감사합니다! – Aaginor

0

대신에 산술 표현식의 문법은 매우 간단하며 표현식을 평가하는 재귀 적 파생어를 쉽게 구현할 수 있습니다.

문법은 다음과 같이 보일 것입니다 :

<expression> ::= <term> <add_sub> <expression> 
<term> ::= <factor> <mul_div> <term> 
<factor> ::= '(' <expression> ')' | <number> 
<add_sub> ::= '+' | '-' 
<mul_div> ::= '*' | '/' 

(당신이 당신의 필요에 따라 소수점 값, 분수 등을 떠, 정수로 정의해야합니다)

위의 문법을 담당 대괄호 및 연산자 우선 순위