Seite 1 von 1

Python: Syntaktische Definition der Einrückung?

Verfasst: Donnerstag 2. Februar 2006, 19:16
von murphy
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.

Verfasst: Donnerstag 2. Februar 2006, 19:43
von mitsuhiko
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.

Verfasst: Donnerstag 2. Februar 2006, 20:36
von Python 47
Aber noch ein Tipp, wenn du einrückst, dann immer nur mit tab oder nur mit space, aber nie beides benutzen! :wink:

Verfasst: Donnerstag 2. Februar 2006, 20:47
von murphy
ok...und sowas:

Code: Alles auswählen

if a == b:
    print 1
 else
  print 2
ist dann in jedem fall ein syntaxfehler?

Verfasst: Donnerstag 2. Februar 2006, 20:58
von mawe
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"

Verfasst: Freitag 3. Februar 2006, 21:27
von murphy
danke für die erklärungen!

hat jemand schonmal einen parser für eine solche sprache geschrieben?

Verfasst: Freitag 3. Februar 2006, 22:58
von modelnine
Ja. In Python. :-)

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

--- Heiko.

Verfasst: Freitag 3. Februar 2006, 23:52
von gerold
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
:-)

Verfasst: Samstag 4. Februar 2006, 00:11
von 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.