Python: Syntaktische Definition der Einrückung?

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
murphy
User
Beiträge: 60
Registriert: Samstag 30. Oktober 2004, 01:34
Wohnort: Berlin
Kontaktdaten:

hallo Python-spezialisten!

obwohl ich mich zu den gegnern der nichtredundanten einrückung zähle (nein, keine angst - darüber will ich nicht diskutieren ^^), halte ich das konzept anderswo für geeignet. meine neue HTML-markup-sprache soll damit arbeiten, um sich die blöden endblöcke zu sparen.
falls ihr YAML kennt, könnt ihr euch in etwa vorstellen, worum es geht. die sprache wird dann vermutlich auch "HAML" heißen ;)

nun zur frage: gibt es vereinbarungen dazu, wie genau die einrückungen in Python funktionieren?
  • wie heißt das konzept "einrückung statt klammerung" eigentlich offiziell?
  • wann ist etwas in derselben ebene, wann darunter, wann ist die ebene zuende?
    die grundregeln sind mir natürlich bekannt, aber mein computer möchte es eben ganz genau wissen :) ihr kennt das ja.
  • wie sieht es mit kombination von tabs und spaces aus?
  • gibt es irgendwo ein paper dazu?
  • haltet ihr die gegenwärtige implementation für die bestmögliche oder kennt ihr bessere varianten?
  • folgt Python da irgendeinem standard? arbeitet z.B. YAML genauso wie Python?
ich könnte das auch alles einzeln testen, aber ich vermute, dass ich hier im forum eine kompetente antwort erhalte, die mich wirklich weiter bringt.

PS: natürlich stelle ich meine sprache auch der open-source-gemeinde zur verfügung, falls sie mal fertig wird ;) und vielleicht hilft mir dann jemand dabei, sie nach Python zu portieren.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

nur zwei Regeln:

1.) es ist ihm scheiß egal, wie du einrückst, aber eine logische ebene muss einfach nur tiefer eingerückt sein als die vordere.
2.) ein tab == acht spaces

Und nein, YAML ist da anders, das mag nicht mit tabs eingerückt werden.
TUFKAB – the user formerly known as blackbird
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Aber noch ein Tipp, wenn du einrückst, dann immer nur mit tab oder nur mit space, aber nie beides benutzen! :wink:
mfg

Thomas :-)
murphy
User
Beiträge: 60
Registriert: Samstag 30. Oktober 2004, 01:34
Wohnort: Berlin
Kontaktdaten:

ok...und sowas:

Code: Alles auswählen

if a == b:
    print 1
 else
  print 2
ist dann in jedem fall ein syntaxfehler?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Ja, if und else sind ja auf der selben Ebene und müssen auch gleich eingerückt sein. Aber so etwas ist erlaubt:

Code: Alles auswählen

def lala(a, b):
    if a == b:
                     print "blabla"
    elif a < b:
     print "gaga"
    else:
          print "huhu"
murphy
User
Beiträge: 60
Registriert: Samstag 30. Oktober 2004, 01:34
Wohnort: Berlin
Kontaktdaten:

danke für die erklärungen!

hat jemand schonmal einen parser für eine solche sprache geschrieben?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Ja. In Python. :-)

Sprich: wenn Du ihn haben willst meld Dich bei mir, ich kann Dir gerne den Python-Quellcode zukommen lassen.

--- Heiko.
Zuletzt geändert von modelnine am Samstag 4. Februar 2006, 00:06, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

murphy hat geschrieben:hat jemand schonmal einen parser für eine solche sprache geschrieben?
Hi murphy!

Die vom PyPy-Projekt arbeiten daran, Python in Python nachzuschreiben. Vielleicht kannst du dir da etwas abschauen.

http://codespeak.net/pypy/dist/pypy/doc/index.html
http://codespeak.net/pypy/dist/pypy/doc ... tml#parser
http://codespeak.net/pypy/dist/pypy/module/recparser/

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Noch ein Hinweis der es dem Python-Parser sicher einfacher macht: Ein Doppelpunkt am Zeilenende (ausserhalb von Dictionaries) leitet einen eingerückten Block ein.
Antworten