Code ausführen wenn eine zeile von einer Datei gelesen wurde

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pyther
User
Beiträge: 1
Registriert: Samstag 2. Februar 2019, 20:18

Hallo liebe Community!

Ich habe eine kleine Programmiersprache in Python geschrieben (Wenn ihr fragt warum: Weil ich gerne ausprobiere und naja... halt auch einfach so)

Mir ist aber ein kleines Problem beim Interpreter passiert:
Wenn ich meine Programmiersprache Zeile-für-Zeile in der Konsole indem ich nach der Eingabe in der Konsol kucke (Ich hoffe ihr versteht was ich meine :) ) dann funktioniert es.

Also... ein kleines beispiel Code für wie ich es meine:

Code: Alles auswählen

if __name__ == '__main__':
    lexer = Lexer()
    parser = Parser()
    env = {}
    while True:
        try:
            text = input('script> ')
        except EOFError:
            break
        if text:
            tree = parser.parse(lexer.tokenize(text))
            ScriptExecute(tree, env)
Aber nun möchte ich, dass der Interpreter ausgewählte Dateien liest. Was ich habe ist:

Code: Alles auswählen

if __name__ == '__main__':
    lexer = Lexer()
    parser = Parser()
    env = {}

    content = list()
    data = open(sys.argv[1]).read()
    for line in data:

        for char in line:
            if char == "\n":
                text = "".join(content)
                content = list()
                if text:
                    print(text)
                    tree = parser.parse(lexer.tokenize(text))
                    ScriptExecute(tree, env)
            else:
                list.append(content, char)
Aber das liest nur die erste Zeile und beendet die Python-Datei

Das print(text) ist um zu testen ob es auch klappt da ich viele Methoden ausprobiert habe.


Naja... dies klingt vielleicht komisch, dass ich eine Programmiersprache geschrieben habe aber nicht weiß wie ich Dateien ausführen kann...

Aber es ist so... Ich weiß es ist komisch...

Vielen Dank im vorraus!
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Die for-Schleifen tun nicht das, was die Variablennamen suggerieren, `line` ist keine Zeile sondern nur ein Zeichen. Damit ist die innere for-Schleife ziemlich witzlos.
Einfacher geht es

Code: Alles auswählen

with open(sys.argv[1]) as lines:
    for line in lines:
        print(line)
        tree = parser.parse(lexer.tokenize(line))
        ScriptExecute(tree, env)
Warum das aber bei Dir nur die erste Zeile verarbeitet, wird aus dem was Du zeigst nicht klar.
Antworten