0

朋友,假设我有一个文件test.txt,文件内容为“1+2*3”,如果直接在Squeak的Workspace中表示,打印出来会得到结果9,我想得到的是7 然后我读取文件内容1+2*3从一个文件。像这样的代码,它运行良好

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

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

但是如何将字符串“1 + 2 * 3”的5个字符存储到一个集合中,进一步我可以使用二叉树来计算方程?有人可以给我一些提示吗?先谢谢 :)

4

2 回答 2

2

SmaCC 教程最终构建了几乎你想要的东西。

引用上述教程:

我们添加到语法顶部的两行表示“+”和“-”从左到右计算并且具有相同的优先级,低于“*”和“/”。

SmaCC 是一个成熟的 Smalltalk 解析器生成器,根据您的需要,它可能有点过分。

如果您只想构建一个简单的计算器,您可以使用Shutting-yard 算法将中缀数学表达式转换为 RPN 并轻松评估它。

于 2011-02-16T06:30:12.467 回答
0

也许在顶部添加运算符的优先级:

%left "+" "-";
%left "*" "/";
于 2019-12-03T22:56:19.323 回答