回答編集履歴

3

追記

2020/02/04 14:13

投稿

winterboum
winterboum

スコア23349

test CHANGED
@@ -41,3 +41,7 @@
41
41
  0. そのfactor は "a" を返すので result = [:put,1.0,"a"] が3の結果です
42
42
 
43
43
  0. よって1の結果は [:eq,1, [:put,1.0,"a"]]
44
+
45
+
46
+
47
+ ということで、二項演算の二項目の処理を考えてください

2

追記

2020/02/04 14:13

投稿

winterboum
winterboum

スコア23349

test CHANGED
@@ -21,3 +21,23 @@
21
21
  追記
22
22
 
23
23
  put が消えてしまうのは、空白の処理で解決しますが、思った通りの結果にならないのは expression の二項演算の処理がうまく行っていないようです。そこを見なおしてください
24
+
25
+
26
+
27
+ 追記2
28
+
29
+ ではもう少し
30
+
31
+ 0. expressionで:eq を見つけて result = [:eq, result, term] が実行されます
32
+
33
+ つまり [:eq, 1.0,term]
34
+
35
+ 0. その term の入り口で result = factor にて ==の後ろの1が入り result=1.0
36
+
37
+ 0. while loop に入って token に put が入り、result は
38
+
39
+  result = [:put,1.0,factor] となります
40
+
41
+ 0. そのfactor は "a" を返すので result = [:put,1.0,"a"] が3の結果です
42
+
43
+ 0. よって1の結果は [:eq,1, [:put,1.0,"a"]]

1

追記

2020/02/04 14:11

投稿

winterboum
winterboum

スコア23349

test CHANGED
@@ -15,3 +15,9 @@
15
15
  ```
16
16
 
17
17
  としてまず頭の空白を削除してみてください
18
+
19
+
20
+
21
+ 追記
22
+
23
+ put が消えてしまうのは、空白の処理で解決しますが、思った通りの結果にならないのは expression の二項演算の処理がうまく行っていないようです。そこを見なおしてください