teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2020/02/04 14:13

投稿

winterboum
winterboum

スコア23654

answer CHANGED
@@ -19,4 +19,6 @@
19
19
  0. while loop に入って token に put が入り、result は
20
20
   result = [:put,1.0,factor] となります
21
21
  0. そのfactor は "a" を返すので result = [:put,1.0,"a"] が3の結果です
22
- 0. よって1の結果は [:eq,1, [:put,1.0,"a"]]
22
+ 0. よって1の結果は [:eq,1, [:put,1.0,"a"]]
23
+
24
+ ということで、二項演算の二項目の処理を考えてください

2

追記

2020/02/04 14:13

投稿

winterboum
winterboum

スコア23654

answer CHANGED
@@ -9,4 +9,14 @@
9
9
  としてまず頭の空白を削除してみてください
10
10
 
11
11
  追記
12
- put が消えてしまうのは、空白の処理で解決しますが、思った通りの結果にならないのは expression の二項演算の処理がうまく行っていないようです。そこを見なおしてください
12
+ put が消えてしまうのは、空白の処理で解決しますが、思った通りの結果にならないのは expression の二項演算の処理がうまく行っていないようです。そこを見なおしてください
13
+
14
+ 追記2
15
+ ではもう少し
16
+ 0. expressionで:eq を見つけて result = [:eq, result, term] が実行されます
17
+ つまり [:eq, 1.0,term]
18
+ 0. その term の入り口で result = factor にて ==の後ろの1が入り result=1.0
19
+ 0. while loop に入って token に put が入り、result は
20
+  result = [:put,1.0,factor] となります
21
+ 0. そのfactor は "a" を返すので result = [:put,1.0,"a"] が3の結果です
22
+ 0. よって1の結果は [:eq,1, [:put,1.0,"a"]]

1

追記

2020/02/04 14:11

投稿

winterboum
winterboum

スコア23654

answer CHANGED
@@ -6,4 +6,7 @@
6
6
  def get_token()
7
7
  @scanner.scan(/\A\s*/)
8
8
  ```
9
- としてまず頭の空白を削除してみてください
9
+ としてまず頭の空白を削除してみてください
10
+
11
+ 追記
12
+ put が消えてしまうのは、空白の処理で解決しますが、思った通りの結果にならないのは expression の二項演算の処理がうまく行っていないようです。そこを見なおしてください