1

通訳者の仕事について助けが必要です。この 'bumpkin' コードのリストがここにあります。

LET A 1
GOSUB 6   <------ goes to line 6 of 'bumpkin' code (index starts at 1). 
PRINT A
PRINT B
END
LET A 2
LET B 3
RETURN   <------- returns to GOSUB 6 and continues on down list

技術的には、GOSUB が行うことは、指定された行 (この場合は 6 行目) に移動し、RETURN に到達するまで下降を続け、再びそこに戻って続行することです。

したがって、技術的には、リストを下方向に進む間、GOSUB はコール信号 RETURN を取得するまでリストを少しスキップし、その後 GOSUB ラインに戻って再び下方向に進みます。

主な問題は、これを行う方法がわからず、それを新しいリストに追加して、オブジェクトの新しいリストにして実行できるようにすることです。結果の新しいリストは次のようになります。

LET A 1
LET A 2
LET B 3
PRINT A
PRINT B
END

私はこれにどのようにアプローチするのか興味がありました。for ループは使用できません。これは、'bumpkin' コード全体をループして解析するためです。ループで行をスキップできません。

どうもありがとう!

編集============================================== ==========編集

これまでのところ、私のPythonコードは次のとおりです。

oldlist = [['LET', 'A', '1'],
           ['GOSUB', '6'],
           ['PRINT', 'A'],
           ['PRINT', 'B'],
           ['END'],
           ['LET', 'A', '2'],
           ['LET', 'B', '3'],
           ['RETURN'],
           ['.']]

newlist = []

def NewLister():
    ProgramCounter = 0
    funcbool = True
    while funcbool:
        if oldlist[ProgramCounter][0] == 'LET':
            newlist.append(oldlist[ProgramCounter])
            ProgramCounter += 1
            print(newlist)
        elif oldlist[ProgramCounter][0] == 'GOSUB':
            pass # <---------------------No Idea how to get this working
        elif oldlist[ProgramCounter][0] == 'PRINT':
            pass 
        elif oldlist[ProgramCounter][0] == 'END':
            pass
4

1 に答える 1