2016-09-24 6 views
-1

私自身の基本プログラミング言語を作成しようとしています。私はPython - 「PRINT」の印刷のみ

from sys import * 

tokens = [] 

def open_file(filename): 
    data = open(filename, "r").read() 
    return data 

def smr(filecontents): 
    tok = "" 
    state = 0 
    string = "" 
    filecontents = list(filecontents) 
    for char in filecontents: 
     tok += char 
     if tok == " ": 
      if state == 0: 
       tok = "" 
      else: 
       tok = " " 
     elif tok == "PRINT": 
      tokens.append("PRINT") 
      tok = "" 
     elif tok == "\"": 
      if state == 0: 
       state = 1 
      elif state == 1: 
       print("STRING") 
       string = "" 
       state = 0 
     elif state == 1: 
      string += tok 
    print(tokens) 
def run(): 
    data = open_file(argv[1]) 
    smr(data) 
run() 

smrlang.pyファイルに次のコードを持っていると私は私の one.smrファイルでこれを持っている:

PRINT "HELLO WORLD" 

出力はPRINT STRINGのようなものでなければなりませんが、私はコマンドpython3 smrlang.py one.smrを使用する場合、出力ちょうどPRINTです。私は頭の中でそれをデバッグPythonの3

+0

デバッガを使用するか、あなたのコードに多くのデバッグprint文を追加します。 –

答えて

0

を使用しています、私は問題を発見:

elif state == 1: 
    string += tok 

あなたがここにトークンをリセットしません。 abcdの代わりにaababcabcdになり、\が認識されません(aababcabcd\)。

また、トークンはすべてのものになり、印刷されません。

にそれを変更してみてください:修正後の

elif state == 1: 
    string += tok 
    tok = "" 

出力:

> py -3 temp.py temp.txt 
STRING 
['PRINT'] 
関連する問題