Customized Python

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
ArthurD
User
Beiträge: 3
Registriert: Montag 11. März 2019, 15:25

Hallo,
kennt sich hier jemand mit Python ast bzw. benutzerdefinierten Python reserved Keywords aus?
Ich moechte z.B. statt "import" das deutsche Wort "lade" verwenden.
Dass ich dafuer ein eigenes Python compilieren muss ist mir bewusst.

Nachdem ich die Grammar Beschreibung (https://docs.python.org/3/reference/grammar.html) gefunden hatte, habe mir den SourceCode von Python runtergeladen und nach der Verwendung gesucht.
Ich habe unter Grammar/Grammar und Lib/lib2to3/Grammar.txt die Zeile

Code: Alles auswählen

import_name: 'import' dotted_as_names
gefunden und angepasst.
Es wird weiterhin meine python binary compiliert ohne Fehler.
Wenn ich jedoch ./python starte, muss ich immernoch import statt lade schreiben.

Im code habe ich einige Verweise auf die Zeichenkette "import" gefunden.

Code: Alles auswählen

grep -r '"import"' ./|more
Beispiele:

Code: Alles auswählen

./Lib/pyclbr.py:                if not mod or token != "import": 
./Lib/lib2to3/fixer_util.py:            Leaf(token.NAME, "import"),
./Lib/lib2to3/refactor.py:                if tp != token.NAME or value != "import":  
...
Python scheint also kein einfaches Mapping von Keywords zu Funktionen zentral zu verwalten.

Hat jemand schonmal sowas gemacht? Wie aufwaendig waere es alle Referenzen zu ueberschreiben?
Gibt es evtl. Referenzprojekte die aehnliches gemacht haben?
Gruesse und danke im voraus.
ArthurD
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

# NOTE WELL: You should also follow all the steps listed at
# https://devguide.python.org/grammar/
Grammar/Grammar

Hast du die Schritte in der verlinkten Checklist befolgt?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde in Frage stellen, das es das richtige Vorgehen ist. Wenn du so etwas willst bist du im Zweifel besser beraten eine eigene Grammatik für deine DSL zu schreiben, die vom import-Mechanismus von Python dann übersetzt wird.

https://dbader.org/blog/writing-a-dsl-with-python
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

ArthurD: Bevor du sowas machst, schau dir diesen sehr informativen Vortrag von Dave Beazley an:

Python 3 Metaprogramming
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ArthurD: Hm, ich finde es gerade nicht mehr, aber für Python 2 gab's mal eine eingedeutschte Version die Teuthon hiess.

Die Quellen von `lib2to3` sind da wohl eher der falsche Ansatzpunkt. Es nützt ja nicht so viel wenn dieses Werkzeug das beim Portieren von Python 2 nach Python 3 Quelltext helfen soll, Deine deutschsprachige Python-Variante versteht.

Warum willst Du das denn machen? Um irgendwie nützlich zu sein, müsstest Du als nächstes ja die Standardbibliothek ”übersetzen”. Und dafür dann deutschsprachige Dokumentation bereitstellen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

__blackjack__ hat geschrieben: Montag 11. März 2019, 22:41 @ArthurD: Hm, ich finde es gerade nicht mehr, aber für Python 2 gab's mal eine eingedeutschte Version die Teuthon hiess.
Wahrscheinlich weil sie Teuton hieß.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich wäre viel zu faul für jede Version einen Patch schreiben zu müssen, nur um ein paar Schlüsselwörter auf Deutsch zu übersetzen.
Wenn so etwas bei heraus kommt, wirst du der einzige Nutzer sein:

Code: Alles auswählen

lade os


definiere funktion():
    benutzer = os.environ.nimm('USER', '')
    ausgabe f"Hallo {benutzer}


wenn __name__ == '__main__':
    text = funktion()
    drucke(text)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DeaD_EyE: ``def`` ginge in Deutsch ja weiterhin. ``ausgabe`` ist so gar keine gute Idee. Bei ``return`` haben Anfänger ja heute bereits Probleme Ausgabe und Rückgabe auseinander zu halten, da muss man das Schlüsselwort für die Rückgabe nicht auch noch ``ausgabe`` nennen.

Es ist auch nicht wirklich konsequent übersetzt, denn `os`, `environ`. und '__main__' könnte man ebenfalls übersetzen.

Code: Alles auswählen

importiere bs


def funktion():
    benutzer = bs.umgebung.hole('USER', '')
    rückgabe f"Hallo {benutzer}"


wenn __name__ == '__haupt__':
    text = funktion()
    drucke(text)
Als nächtses sollte man dann Anfangen auf Systemebene dafür zu sorgen das das System an Stelle von 'USER' die Umgebungsvariable 'BENUTZER' kennt und verwendet. 😀
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@DeaD_EyE: Du bist nicht konsequent genug. `lade` wäre unter Python falsch, weil nur ein Modul ins aktuelle importiert wird. `ausgabe` ist eine Rückkehr.
Es wäre eher

Code: Alles auswählen

importiere betriebssystem
def hole_benutzer():
    benutzer = betriebssystem.umgebung.nimm('BENUTZER', '')
    kehrezurück f"Hallo {benutzer}"

wenn __name__ == '__hauptdatei__':
    text = hole_benutzer()
    gibaus(text)
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Schön, dass mein Plan funktioniert hat.
Die darauf anschließende Diskussion zeig nur auf, wie kompliziert das ist, es richtig zu übersetzen.

Ich mag Python so wie es ist und mit Englisch hab ich auch keine Probleme.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
ArthurD
User
Beiträge: 3
Registriert: Montag 11. März 2019, 15:25

Erstmal Danke fuer die vielen guten Antworten.

Ich moechte nicht alle Python Module uebersetzen, sondern nur die Keywords.

Hintergrund, warum ich das als PoC ausprobieren moechte:
Ich bin bei CoderDojo eV aktiv und beschaeftige mich mit programmieren fuer Kinder.

Es gibt fuer Kinder zwar Tools zum Programmieren lernen, aber mir fehlt da ein Zwischenschritt fuer Kinder ab der 2./3. Klasse.

ScratchJr ist fuer Kinder die noch nicht schreiben oder lesen koennen.

Dann gibt es Scratch/Snap fuer Kinder die schon lesen koennen. Aber ab einem Gewissen Punkt merken die Kids, dass das keine echte Programmierung ist.

Danach gibt es dann CodeCombat bzw. Code.org mit dem man zwar Javascript bzw. Python schreiben kann. Man ist aber noch "gefangen" in deren Umgebung. Wenn Kinder auf diesem Niveau sind, koennen sie meistens gut lesen und schreiben, haben aber wenig (oder keine) Englischkenntnisse.

An diesen Punkt haben Kinder mit der Muttersprache Englisch den Vorteil, dass sie ohne weiteres die Keywords verstehen. Um den umstieg auf Code schreiben einfacher zu machen kam die Idee es mal auf deutsch zu probieren.

Fuer Feedback und Vorschlaege zu dem Thema waere ich euch sehr Dankbar.
VG
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich halte das fuer falsch investierte Energie. Schluesselworte sind Schluesselworte. Der zugrunde liegende Begriff ist natuerlich Englisch, aber am Ende des Tages muss man das Konzept "Verzweigung" begriffen haben. Ob das nun "if" und "wenn" heisst, ist irrelevant, und wird von Kindern die so weit sind garantiert einfach gelernt.

Und obendrein ist wie WIRKLICHE Arbeit (wenn das denn ein Problem waere) ist die Uebersetzung der Standardbibliothek.

Code: Alles auswählen

lade betriebssystem.pfad
ist noch das einfachste.

Und wenn die Kinder dann programmieren gelernt haben mit deiner Uebersetzung, dann lernen sie *nochmal* die englischen Begriffe, sobald sie auch nur einen Mikro-Schritt aus der von dir vorgegebenen Welt heraustreten wollen, und ihre Neugierde mit zb pygame befriedigen wollen?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ArthurD: Ich denke auch das macht wenig Sinn. So viele Schlüsselworte gibt es nicht, und auch wenn die auf Deutsch sind, ist das alles andere als selbsterklärend. Wie __deets__ schon sagte muss man die Semantik dahinter verstehen, und da ist das wohl nicht so wichtig dass die Schlüsselworte auf Deutsch sind. Zudem muss man für's Programmieren sowieso früher oder später Englisch lernen. Da kann man Interesse am Programmieren prima als Motivation für verwenden.

Ich würde die Schlüsselworte da einfach als spezielle Symbole auffassen um Algorithmen formal ausdrücken zu können. Also so wie man in der Mathematik die Bedeutung von ∀x ∊ X lernt, lernt man in einer Programmiersprache die Bedeutung von ``for item in sequence:``.

Edit: Wenn man so etwas machen will, würde ich eine Programmiersprache ohne oder mit möglichst wenigen Schlüsselworten verwenden. Hy (um nahe bei Python zu bleiben), Io, Lisp, Scheme, Tcl, …, weil man da einfacher neue Namen als Aliasnamen für Vorhandenes einführen kann als sich eine inkompatible Sprachversion zu basteln.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

ArthurD hat geschrieben: Dienstag 12. März 2019, 12:23 Ich bin bei CoderDojo eV aktiv und beschaeftige mich mit programmieren fuer Kinder.
Meine Hochachtung vor deinem Engagement in diesem Bereich.
Als Vater zweier Twens hatte ich vor 15 Jahren im privaten Bereich die gleichen Überlegungen.
Aus beiden sind zwar keine Programmierer geworden aber das sie die Grundlagen in Englisch
beigebracht bekommen haben, hat ihnen in der weiteren schulischen Laufbahn nur Vorteile gebracht.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
ArthurD
User
Beiträge: 3
Registriert: Montag 11. März 2019, 15:25

Das zusätzliche "Englisch-Lernen" beim Programmieren kann durchaus für jüngere Kinder ein Hindernisgrund sein, sich weiter mit dem Programmieren zu beschäftigen. In meinem Umfeld ist ein solches Kind, dass sich gerne mit Mindstorms und Scratch o.ä. beschäftigt hat, aber dann, trotz Interesse, mehrere Jahre jetzt für einen "Wiedereinstieg" ins Programmieren gebraucht hat. Eben die Zeit, die es benötigt hat, um die englische Sprache so weit zu lernen um sich grundlegend unterhalten zu können. Ich denke, dass es so auch anderen Kindern gehen könnte, und es so vielleicht interessant sein könnte, denen eine "deutsche Version" einer Programmiersprache als Zwischenschritt zur verfügung zu stellen, so dass sie die Syntax und Logik einer in einer gewohnten Sprache lernen können. Und sobald sie sich etwas sicherer in Englisch fühlen, können sie einfach auf eine normale Python Version wechseln.
Die reservierten Keywords dann nochmal neu zu lernen sehe ich da unproblematisch im Vergleich zu dem "Stillstand" in der Zeit dazwischen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

ArthurD hat geschrieben: Dienstag 12. März 2019, 13:06Eben die Zeit, die es benötigt hat, um die englische Sprache so weit zu lernen um sich grundlegend unterhalten zu können.
Genau das braucht man beim Programmierenlernen nicht. Wer programmieren kann, kann sich noch lange nicht auf Englisch unterhalten und umgekehrt, wird einem Englisch nicht wirklich helfen, um die Schlüsselworte zu verstehen. Wenn Kinder Ballett lernen, werden sie mit einer Menge französischer Wörter konfrontiert, wenn sie Judo lernen, bekommen sie Japanisch Wörter beigebracht. Weder das eine noch das andere hält jemanden davon ab, diesem Hobby nachzugehen.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ArthurD: Aber man muss sich doch nicht auf Englisch unterhalten können. Das Leseverständnis was man für's Programmieren braucht ist wesentlich geringer als das was man braucht um ”normale” Prosa lesen zu können oder gar um sich mit anderen auf Englisch unterhalten zu können.

Und nur für die Schlüsselworte braucht man im Grunde gar kein Englisch zu lernen/können, wenn man die Schlüsselworte einfach als formale Symbole mit einer bestimmten Semantik lernt/lehrt. In der Uni hatte ich Kontakt mit Informatikstudenten die bei bestimmten Schlüsselworten exakt wussten was die machen, die aber das konkrete Wort falsch übersetzt haben oder eher geraten haben was das englische Wort auf Deutsch heisst.

Letztlich muss man für's Programmieren sowieso Fachbegriffe lernen. Selbst wenn man das komplett auf Deutsch macht. Da kann ein anderes als das im Alltag verwendete Wort eventuell sogar helfen. Es gibt ja beispielsweise immer wieder den Anfängerfehler das ``or`` als umgangssprachliches „oder“ (falsch) verwendet wird. Jemand der nicht weiss was ``or`` als Wort heisst, wird das leichter als binären Operator auffassen können, dessen Bedeutung er lernen muss, und nicht falsche Annahmen machen, weil er weiss was „oder“ bedeutet.

Der wesentlich grössere Brocken ist dann die Übersetzung der eingebauten Funktionen, der Standardbibliothek, und der *Dokumentation* dazu. Das wäre nötig, denn das sind wesentlich wichtigere und umfangreichere Informationen für den Programmierer und das alles zu übersetzen wäre verdammt viel Arbeit, die man IMHO besser investieren kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Ich habe als Grundschüler privat ein bisschen mit Basic und in der Schule mit Logo "programmiert". Beide haben englische Schlüsselwörter und das war eigentlich kein Problem, obwohl es, anders als heute, Englischunterricht erst in der weiterführenden Schule gab. Dafür kannte ich dann später schon ein paar Vokabeln mehr als meine Mitschüler :) Wenn ein Erwachsener dabei ist, der die Begriffe kurz erklärt und vielleicht auch vorführt, wie man sie ausspricht, sollte das kein Problem sein. Das ist meiner Meinung nach ein besserer Ansatz, als eine eingedeutsche Programmiersprache zu verwenden.
Antworten