Indentationskontrolle beim Entwickeln einer kleinen Python-ähnlichen Sprache

Ich entwickle eine kleine Python-ähnliche Sprache mit flex, byacc (für lexikalisches und Parsing) und C ++, aber ich habe ein paar Fragen zur Bereichskontrolle.

just wie Python verwendet es Leerzeichen (oder Tabulatoren) für Einrückungen, nicht nur das, aber ich möchte Indexumbruch implementieren, wie zum Beispiel, wenn Sie "break 2" innerhalb einer while-Schleife eingeben, die in einer anderen while-Schleife ist, von der es nicht nur abbrechen würde der vorletzte aber auch aus der ersten Schleife (daher die Nummer 2 nach der Pause) und so weiter.

Beispiel

while 1
    while 1
        break 2
        'hello world'!! #will never reach this. "!!" outputs with a newline
    end
    'hello world again'!! #also will never reach this. again "!!" used for cout
end
#after break 2 it would jump right here

, aber da ich kein "Anti" -Registerzeichen habe, um zu überprüfen, wann ein Bereich endet (wie C zum Beispiel würde ich nur das Zeichen '}' verwenden), habe ich mich gefragt, ob diese Methode die beste wäre:

Ich würde eine globale Variable wie "int tabIndex" in meiner yacc-Datei definieren, auf die ich in meiner lex-Datei mit extern zugreifen würde. Jedes Mal, wenn ich ein Tabulatorzeichen in meiner Lex-Datei finde, erhöhe ich diese Variable um 1. Wenn ich ein "break" -Schlüsselwort finde, verringere ich es um den Betrag, der danach aus der tabIndex-Variablen eingegeben wurde, und um wann Ich erreiche und EOF nach dem Kompilieren und ich bekomme einen tabIndex! = 0 Ich würde Kompilierungsfehler ausgeben.

Jetzt ist das Problem, was ist der beste Weg, um zu sehen, ob der Einzug reduziert wurde, sollte ich \ b (Rücktaste) Zeichen aus Lex lesen und dann die tabIndex-Variable reduzieren (wenn der Benutzer break nicht verwendet)?

eine andere Methode, um dies zu erreichen?

auch noch eine kleine frage, ich möchte, dass jede ausführbare datei ihren startpunkt auf der funktion start () hat, sollte ich das fest in meine yacc-datei schreiben?

Tut mir leid für die lange Frage, jede Hilfe wird sehr geschätzt. auch wenn jemand eine yacc-datei für python zur verfügung stellen kann wäre das nett als leitfaden (habe mal bei google gesucht und kein glück gehabt).

Danke im Voraus

Antworten auf die Frage(4)

Ihre Antwort auf die Frage