Python - Java - leJOS

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
robert2
User
Beiträge: 10
Registriert: Mittwoch 9. März 2011, 14:30

Hallo,
Ich habe Erfahrungen mit Python aber auch mit Java . Ich weiß, dass es möglich ist mit Python ein Java Programm zuschreiben nämlich über:

Code: Alles auswählen

f = open("java.java", 'w')
f.write("Hier währe der Java Code")
f.close()
Die allgemeine Schwierigkeit währe aber das Java Programm zu starten, was (bei Windows) mit dem Befehl 'Javac + *java.java*' die Grundlage währe, da es den Compiler startet.

Es gibt von LEGO das Modul leJOS (lego Java Operation System) welches ein Java Programm für den, von Lego entwickelten, NXT übersetzt und dort ausführt.
Die Frage währe also, schafft man es ein Programm mit Python zu schreiben, welches ein Java Programm schreibt, dass die leJOS Module beinhaltet, dann auf denn NXT spielt und dort ausführt?

Code: Alles auswählen

Robert2
deets

Puuhh, das ist aber eine der eher uneleganteren Varianten von Java-mittels-Python. Und letztlich nicht so richtig praktikabel.

Reicht nicht sowas hier?

http://code.google.com/p/nxt-python/

Alternativ kannst du auch einfach Jython nehmen, dann kannst du Python-code generieren, der einfach von der JVM ausgefuehrt wird, und alle leJOS Bibliotheken benutzen kann.
BlackJack

@robert2: Falls die Frage nur ist wie man externe Programme ausführt, wie zum Beispiel den Java-Compiler, dann schau Dir mal das `subprocess`-Modul aus der Standardbibliothek an.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Natürlich könnte man einen Compiler schreiben, der (eine Teilmenge von) Python in Java-Quelltext übersetzt, um diesen dann weiter zu verarbeiten. Das ist jedoch alles andere als einfach, wenn man auf Reflections verzichten will, da Java eine statische getypte Sprache ist und Python keinerlei Typannotationen hat. Man kann zum Teil die Typen inferieren, doch das ist nicht ausreichend, da das implizite Typsystem von Python mächtiger wäre, als was mit Java statisch abbildbar ist.

In jedem Fall ist der Ansatz mit "print" in eine Datei ein bisschen zu naiv. Ich würde empfehlen, das "ast"-Modul von Python zu benutzen, um aus einem Python-Quelltext einen sogenannten abstrakten Syntaxbaum zu generieren, den man dann ablaufen kann und daraus entweder sofort Java-Code generiert, oder diesen einen einen AST für Java umwandelt, den man dann in eine Datei serialisiert. Ich bin mir sicher, ich habe zu diesem Thema schon mal was hier geschrieben, hier z.B. http://www.python-forum.de/viewtopic.php?f=6&t=22954

Stefan


PS: Bitte kein h in wäre
BlackJack

@sma: Wo liest Du aus der Frage denn heraus dass Python-Quelltext in Java übersetzt werden soll!? Ich habe es so verstanden, dass innerhalb des Python-Programms schon Java-Quelltext als Daten steht.
robert2
User
Beiträge: 10
Registriert: Mittwoch 9. März 2011, 14:30

deets hat geschrieben:Puuhh, das ist aber eine der eher uneleganteren Varianten von Java-mittels-Python. Und letztlich nicht so richtig praktikabel.

Reicht nicht sowas hier?

http://code.google.com/p/nxt-python/

Alternativ kannst du auch einfach Jython nehmen, dann kannst du Python-code generieren, der einfach von der JVM ausgefuehrt wird, und alle leJOS Bibliotheken benutzen kann.
Danke, ich glaube wir reden die selbe Sprache :D

Code: Alles auswählen

Robert2
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Entsprechender wäre wohl pynxc.
Wäre es eventuell sogar denkbar, Cython auf dem Brick laufen zu lassen?
deets

mkesper hat geschrieben:
Entsprechender wäre wohl pynxc.
Ah, wahrscheinlich, wusste nicht, dass das Java auf dem Brick selbst laeuft.
Wäre es eventuell sogar denkbar, Cython auf dem Brick laufen zu lassen?
Bezweifele ich, denn Cython produziert C, nicht diesen C-Dialekt. Und wenn der pynxc das eh ausspuckt, ist der selbst ja schon so eine Art Cython.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

BlackJack hat geschrieben:@sma: Wo liest Du aus der Frage denn heraus dass Python-Quelltext in Java übersetzt werden soll!? Ich habe es so verstanden, dass innerhalb des Python-Programms schon Java-Quelltext als Daten steht.
Öh, vielleicht habe ich gelesen, was ich lesen wollte :) Da ist dann aus "mit Python ein Java Programm zuschreiben" die Aussage "in Python ein Java-Programm zu schreiben" = "Python in Java zu übersetzen" geworden.

Stefan
Antworten