0

友人、ファイル 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.

しかし、文字列「1 + 2 * 3」の5つの文字をコレクションに保存するにはどうすればよいですか?さらに、バイナリツリーを使用して方程式を計算できますか? 誰かヒントをくれませんか?最初に感謝します:)

4

2 に答える 2

2

SmaCC チュートリアルは、あなたが望むほとんどのものを構築することになります。

上記のチュートリアルからの引用:

文法の先頭に追加した 2 行は、"+" と "-" が左から右に評価され、同じ優先順位を持ち、"*" と "/" よりも低いことを意味します。

SmaCC は Smalltalk 用の本格的なパーサー ジェネレーターであり、ニーズによってはやり過ぎかもしれません。

簡単な計算機を作成したいだけの場合は、Shunting-yard アルゴリズムを使用して中置数式を RPN に変換し、簡単に評価できます。

于 2011-02-16T06:30:12.467 に答える