Как я могу разобрать символ в файле в 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 "*" "/";