2011-02-16 5 views
0

친구, 파일의 내용이 "1 + 2 * 3"인 경우, 스퀵 액스의 작업 공간에서 직접 표현한 액면의 결과는 9이고, 원하는 것은 7 입니다. 파일 내용 1+2*3을 파일에서 읽었습니다. 이런 코드가 잘Squeak4.1에서 파일의 문자를 구문 분석하려면 어떻게해야합니까?

ReadFrom 
"read the equation from ./formular.txt" 

| fileContents | 
fileContents := FileStream 
       readOnlyFileNamed: 'test.txt' 
       do: [:f | f contents ]. 
^fileContents. 

을 작동하지만 어떻게 문자열의 5 caracters을 저장할 수있는 콜렉션에 "+ 2 * 3 1"더 나는 방정식을 계산하는 이진 트리를 사용할 수 있습니까? 누군가 나에게 힌트를 줄 수 있니? 고마워요 첫 번째 :)

+0

1 + 2 * 3은 (1 + 2) * 3을 의미하므로 산술 연산자를 포함한 메시지 전송은 항상 왼쪽 연관입니다. –

답변

2

The SmaCC tutorial 당신이 원하는 거의 끝내 건물.

견적에서 튜토리얼을 말했다 : "-"우리는 문법의 상단에 추가

두 개의 선이 "+"와 의미 평가 왼쪽에서 오른쪽과 같은 우선 순위를 가지고있는 "*"및 "/"보다 낮습니다.

SmaCC는 사용자의 필요에 따라 과포가 될 수있는 스몰 토크 용 본격적인 파서 생성기입니다.

간단한 계산기를 만들고 싶다면 Shunting-yard algorithm을 사용하여 중립 수식을 RPN으로 변환하고 쉽게 평가할 수 있습니다.

+0

Alex, 대단히 감사합니다! 링크가 많이 도움이됩니다! – parsifal

관련 문제