Как я могу разобрать символ в файле в Squeak4.1?

Друг, предположим, у меня есть файл test.txt, содержимое файла "1+2*3", если формула, прямо выраженная в рабочей области Squeak, распечатает ее, то получится 9Что я хочу получить 7тогда я читаю содержимое файла 1+2*3 из файла. код, как это, и он хорошо работает

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

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

но как я могу сохранить 5 символов строки "1 + 2 * 3" в коллекции, кроме того, я могу использовать двоичное дерево для вычисления уравнения? Кто-нибудь может дать мне несколько советов? сперва спасибо:)

1 ответ

Решение

Учебное пособие по SmaCC заканчивается тем, что вы получаете практически все, что вам нужно.

Цитата из указанного урока:

Две строки, которые мы добавили в верхнюю часть грамматики, означают, что "+" и "-" оцениваются слева направо и имеют одинаковый приоритет, который меньше, чем "*" и "/".

SmaCC - это полноценный генератор синтаксических анализаторов для Smalltalk, который может быть излишним в зависимости от ваших потребностей.

Если вы просто хотите построить простой калькулятор, вы можете использовать алгоритм Shunting-yard, чтобы преобразовать математическое выражение инфикса в RPN и легко оценить его.

Возможно добавление приоритета операторов вверху:

%left "+" "-";
%left "*" "/";
Другие вопросы по тегам