如何解析Squeak4.1中的文件中的字符?

时间:2011-02-16 06:03:30

标签: binary-tree smalltalk squeak

朋友,假设我有一个文件test.txt,文件的内容是“1 + 2 * 3”,如果在Squeak的工作区中直接表示的fomular,打印它将导致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个字符存储到集合中,我还可以使用二叉树来计算方程式?有人可以给我一些提示吗?首先感谢:)

2 个答案:

答案 0 :(得分:2)

The SmaCC tutorial最终建立了你想要的东西。

引用上述教程:

  

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

SmaCC是Smalltalk的完整解析器生成器,根据您的需要可能有点过分。

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

答案 1 :(得分:0)

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

%left "+" "-";
%left "*" "/";