Hallihallo,
ich schreibe gerade an einem kleinen "Editorframe" um mich mit Python etwas genauer vertraut zu machen.
Ich möchte in einem wxTextCTRl das dem Styletyp eines Pythonwin Fensters hat, einen Syntaxcheck durchführen.
Der Syntaxcheck soll vorersteinmal nur falsche Einrückungen verbieten. Ich erlaube momentan noch Mischungen aus Tabs und Spaces wobei ich die Spaces direkt in 4 Tabs umwandel.
Nun möchte ich allerdings testen ob irgendwo noch falsche Einrückungen im Code zu finden sind. ( 3 leerzeichen,7 leerzeichen usw ).
Wie könnte ich das wohl am besten angehen um das Modul erweiterbar zu machen?
Meine bisherige Idee war mit dem tokenizer zu arbeiten, wobei ich diesen noch nicht benutzt habe und keine Ahnung habe wie die Tokens genau definiert sind ( 4 spaces ein token?, 8 spaces ein token? )
Vielleicht habt ihr ein paar Ideen für mich.
Danke und Grüße!
Python Quellcode Parsen, Syntaxcheck
@sabram: Du wandelst Spaces in vier Tabs um!?
Nur für die Einrückung könntest Du Dir anschauen was das `tabnanny`-Modul aus der Standardbibliothek macht. Ansonsten gibt es die `compile()`-Funktion, die ja gezwungenermassen auch eine Syntax-Überprüfung durchführt und entsprechende Ausnahmen auslöst.
Nur für die Einrückung könntest Du Dir anschauen was das `tabnanny`-Modul aus der Standardbibliothek macht. Ansonsten gibt es die `compile()`-Funktion, die ja gezwungenermassen auch eine Syntax-Überprüfung durchführt und entsprechende Ausnahmen auslöst.
@sabram: Ohne es mir genauer angeschaut zu haben würde ich erwarten, dass nach dem Tokenizer `INDENT`- und `DEDENT`-Token bestehen. Und zwar pro Ebene -- egal wieviele Leerzeichen oder Tabs das im Quelltext mal waren. Diese Information interessiert den Compiler an der Stelle ja überhaupt nicht mehr.