2013-11-27 2 views
8

중위 표현식을 후미어 표현식으로 변환 할 때 단항 "-"을 처리하는 더 좋은 방법이 있습니까?shunting-yard 알고리즘에 대한 단항 마이너스 처리하기

분명한 것은 모든 단항 "-"에 0을 붙입니다. 누구든지 더 나은 구현을 알고 있습니까? 감사!

+0

이 문제에 대한 해결책이 몇 가지 있습니다. afaik는 모두 확장 할 수 있습니다. – harold

+0

귀하의 게시물 2 년 후, 나는 같은 질문을했습니다. 항상 관련성이있는 질문입니다. 예 : - 3은 0 - 3으로 변환 될 것입니다. -3 - -6 대부분의 파서는 마이너스를 시간에서 하나의 제품 빼기로 적용 할 것입니다. , - (-3) = 6. 건배, – MrVelez

+0

@MrVelez : 0 접두사는 작동하지 않지만 다른 이유는 맞습니다. 0을 접두어로 붙이면 '-3'을 전처리하면 '0-0-3'이됩니다 ('0-3-3'이 아니라 두 번째 3이 올 것인가?). 0 ', 3'-> '0-0-3'의 결과로 후위 '0 - 3'-> '0 - '. 이것은 -3으로 평가됩니다. 아마도 -3에서 원하는 것이 아닙니다. \ '0-0-3'을 후위 '0 0 3 - -'으로 변환하면 원하는 3으로 평가할 수 있습니다. –

답변

6

내가 몇 년 전에했던 방식은 내 후위 표현식을위한 새로운 연산자를 발명했습니다. 그래서 중절에서 단항 마이너스가 생겼을 때 #으로 변환했습니다. 그래서 a + -b에 대한 내 후위는 ab#+이되었습니다.

물론, 내 평가자는 #이 하나의 피연산자만을 팝했습니다.

종류는 일단 만들어지면 후위 표현식을 어떻게 사용하는지에 따라 다릅니다. 그것을 표시하려면 특별한 # 연산자를 사용하면 사람들을 혼동시킬 수 있습니다. 그러나 만약 당신이 그것을 내부적으로 사용하고 있다면 (그것은 제가 그렇습니다), 그것은 훌륭하게 작동합니다.

+1

나도이 작업을 수행합니다. "접미사에서 단항 마이너스가 발생했습니다"라고 판단 할 수있는 유일한 방법은 연산자 또는 피연산자가 다음에 기대되는지 여부를 정의하는 부울 컨텍스트를 유지하는 것입니다. 하이픈이 단항 또는 이진인지 결정하기 위해 다른 사람들이 한 일을 알고 싶습니다. –

+0

@ A.I.Breveleri : 중위어에 대해 재귀 - 하강 파서를 사용하는 경우 명시 적으로 상태를 유지하지 않고 단항 연산자를 인식 할 수 있습니다. 예를 들어 http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm을 참조하십시오. –

관련 문제