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

質問編集履歴

5

誤字

2020/04/13 12:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -161,4 +161,4 @@
161
161
  ```
162
162
  <bound method Parser.get_arg1 of <f_parser.Parser object at 0x0000023461595CD0>>
163
163
  ```
164
- となっており、型としてstringを期待しているのにParserクラスのオブジェクトとして表示されています。エラー自体はget_argの戻り値がどのif文にも引っかからなかったことが原因です(さらにそのような場合のケアもしていない)。get_argメソッドの戻り値をstringにしてarg1 == 'static'のような条件分岐に引っ掛けるにはどうすればよいでしょうか?クラス定義と継承あたりの基本事項と思われますが、どうぞ宜しくお願いします。
164
+ となっており、型としてstringを期待しているのにParserクラスのオブジェクトとして表示されています。エラー自体はget_argの戻り値がどのif文にも引っかからなかったことが原因です(さらにそのような場合のケアもしていない)。get_argメソッドの戻り値をarg1 == 'static'のような条件分岐に引っ掛けるにはどうすればよいでしょうか?クラス定義と継承あたりの基本事項と思われますが、どうぞ宜しくお願いします。

4

修正加筆

2020/04/13 12:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -148,6 +148,12 @@
148
148
  ### 起きていること
149
149
  始めに示したクラスのget_arg1,get_arg2メソッドでarg1とarg2を取得して処理しようとしましたが、以下のエラーが返ってきました。
150
150
  ```
151
+ Traceback (most recent call last):
152
+ File "<stdin>", line 1, in <module>
153
+ File "~~~~\vm_translator.py", line 26, in Translate
154
+ self.codeWriter.writePush(arg1, arg2)
155
+ File "~~~~\code_writer.py", line 53, in writePush
156
+ command = '\n'.join(address + process)
151
157
  UnboundLocalError: local variable 'address' referenced before assignment
152
158
  ```
153
159
 
@@ -155,4 +161,4 @@
155
161
  ```
156
162
  <bound method Parser.get_arg1 of <f_parser.Parser object at 0x0000023461595CD0>>
157
163
  ```
158
- となっており、型としてstringを期待しているのにParserクラスのオブジェクトとして表示されています。get_argメソッドの戻り値をstringにしてarg1 == 'static'のような条件分岐に引っ掛けるにはどうすればよいでしょうか?クラス定義と継承あたりの基本事項と思われますが、どうぞ宜しくお願いします。
164
+ となっており、型としてstringを期待しているのにParserクラスのオブジェクトとして表示されています。エラー自体はget_argの戻り値がどのif文にも引っかからなかったことが原因です(さらにそのような場合のケアもしていない)。get_argメソッドの戻り値をstringにしてarg1 == 'static'のような条件分岐に引っ掛けるにはどうすればよいでしょうか?クラス定義と継承あたりの基本事項と思われますが、どうぞ宜しくお願いします。

3

誤字

2020/04/13 12:17

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -140,7 +140,7 @@
140
140
  self.codeWriter.writeArithmetric(command)
141
141
 
142
142
  else:
143
- print('Finish VM transration.')
143
+ print('Finish VM translation.')
144
144
 
145
145
 
146
146
  ```

2

関数の呼び出しについて追加

2020/04/13 12:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
 
5
5
  ```python
6
+ ## f_parser.py
6
7
  import re
7
8
 
8
9
  class Parser():
@@ -71,8 +72,10 @@
71
72
 
72
73
  ```
73
74
  実現したいことは、push constant 2 のようなVMコードをパースして以下のような関数に投げて処理がしたいです。
75
+ ```python
74
76
 
75
- ```python
77
+ ## code_writer.py
78
+
76
79
  def writePush(self, arg1, arg2):
77
80
  if arg1 == 'static':
78
81
  address = ['@' + self.filename + '.' + arg2]
@@ -95,6 +98,53 @@
95
98
  self.o_stream.write(command)
96
99
  ```
97
100
 
101
+
102
+ get_arg1,get_arg2はf_parser.pyに記述されています。やりたい処理は同じディレクトリ内のcode_writer.pyに書いてあります。実際にはWritePush()は、vm_translator.pyというファイル(これも同じディレクトリ内)でVM_Translatorクラスのメソッド内の処理として呼び出されています。
103
+ ```python
104
+ # vm_translator.py
105
+
106
+ import f_parser
107
+ import code_writer
108
+
109
+
110
+ class VM_Translator():
111
+ def __init__(self, dir, filename):
112
+ self.dir = dir
113
+ self.filename = filename
114
+ self.i_stream = open(dir+'/'+filename + '.vm', 'r')
115
+ self.parser = f_parser.Parser(self.i_stream)
116
+ self.codeWriter = code_writer.codeWriter(self.dir, self.filename, self.parser)
117
+
118
+ def Translate(self):
119
+ while self.parser.hasMoreCommands():
120
+ self.parser.advance()
121
+
122
+ line_now = self.parser.line_now
123
+ command_type = self.parser.commandType()
124
+
125
+ if command_type == None:
126
+ continue
127
+
128
+ if command_type == 'C_PUSH':
129
+ arg1 = self.parser.get_arg1
130
+ arg2 = self.parser.get_arg2
131
+ self.codeWriter.writePush(arg1, arg2)
132
+
133
+ if command_type == 'C_POP':
134
+ arg1 = self.parser.get_arg1
135
+ arg2 = self.parser.get_arg2
136
+ self.codeWriter.writePop(arg1, arg2)
137
+
138
+ if command_type == 'C_ARITHMETRIC':
139
+ command = self.parser.get_arg1()
140
+ self.codeWriter.writeArithmetric(command)
141
+
142
+ else:
143
+ print('Finish VM transration.')
144
+
145
+
146
+ ```
147
+
98
148
  ### 起きていること
99
149
  始めに示したクラスのget_arg1,get_arg2メソッドでarg1とarg2を取得して処理しようとしましたが、以下のエラーが返ってきました。
100
150
  ```

1

誤字

2020/04/13 12:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -96,7 +96,7 @@
96
96
  ```
97
97
 
98
98
  ### 起きていること
99
- 始めに示したクラスのget_arg1,get_arg2メソッドでarg1とarg2を取得して処理しお湯としましたが、以下のエラーが返ってきました。
99
+ 始めに示したクラスのget_arg1,get_arg2メソッドでarg1とarg2を取得して処理しようとしましたが、以下のエラーが返ってきました。
100
100
  ```
101
101
  UnboundLocalError: local variable 'address' referenced before assignment
102
102
  ```