を使用しています。ソースコードファイルを解析するには、まずそれをトークン化する必要があります。ここでは、簡単な算術式をトークン化して開始する関数を示します。
OPERATORS = '+', '-', '*', '/'
def tokenize(expression):
def state_none(c):
if c.isdecimal():
self.token = c
self.state = state_number
elif c in OPERATORS:
self.token = 'operator', c
self.token_ready = True
def state_number(c):
if c.isdecimal():
self.token += c
else:
self.char_consumed = False
self.token = 'number', self.token
self.token_ready = True
self.state = state_none
def interpret_character(c):
self.token_ready = False
self.char_consumed = True
self.state(c)
class self:
token_ready = False
token = None
char_consumed = True
state = state_none
for c in expression:
self.char_consumed = False
while not self.char_consumed:
interpret_character(c)
if self.token_ready:
yield self.token
if self.state == state_number:
yield 'number', self.token
def main():
for x in tokenize('15+ 2 * 378/5'):
print(x)
# ('number', '15')
# ('operator', '+')
# ('number', '2')
# ('operator', '*')
# ('number', '378')
# ('operator', '/')
# ('number', '5')
if __name__ == "__main__":
main()
しかし、実際に、あなたの手を汚す:、ファイルを開き、いくつかのコードを記述した文字を繰り返し処理、および彼らと何か(トークンのグループにそれらを)行います。
これまでに何を試しましたか?私たちはあなたのためにコードを書くつもりはありません。あなたのコードの問題を解決し、あなたの質問に答えるためにここに来ました。 – HyperNeutrino
「最初のPythonプログラムとしてコンパイラを書くつもりです」とほとんど気付かなかったかもしれません(それは複雑で挑戦的な作業なので、これはお勧めできません)。長い旅 ")。特定の「詳細を保存する方法」については、ツリーは通常ネストされた構造を表現することができ、検索/トラバーサルに効率的です(ツリーに読み込みトークンを入れて、願い) – progmatico