Hallo, gleich noch zwei Fragen in einer Mail (damit Eure Briefkästen nicht anschwellen :-) 1.) Gibt es für Python einen Parser, mit dem ich C-Sourcen parsen kann und dann von Python aus solche Fragen wie - wieviel C-Funktion hat die Source, wie heissen die, welche Parameter haben die - welche Variabeln gibt es, von welchem Typ sind die, Namen der Vars etc. einfach beantworten kann? 2.) Grid-Manager in Tkinter: widget.grid(row=5, pady=5, columnspan=2) Wenn man bei jedem Widget eine row/column explizit angibt, bekommt man viel Arbeit, wenn man etwas am Design ändern will oder Widgets hinzukommen etc. (neue Nummern vergeben). Wenn ich die Werte nicht angebe, versucht Tk selber, automatisch anzuordnen. Gibt es Empfehlungen, wie man vorgeht? Wenn ich keine Werte angebe, kann ich zur Laufzeit herausbekommen, in welcher Spalte/Zeile ein Widget gelandet ist? -- Mit freundlichen Grüßen Klaus Meyer :-) _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Klaus Meyer schrub
Gibt es für Python einen Parser, mit dem ich C-Sourcen parsen kann und dann von Python aus solche Fragen wie - wieviel C-Funktion hat die Source, wie heissen die, welche Parameter haben die - welche Variabeln gibt es, von welchem Typ sind die, Namen der Vars etc. einfach beantworten kann?
Nicht ganz das was du suchst, aber schau dir mal mein Uglify an: http://p-nand-q.com/e/uglify.html Es liest C sourcen und modelt sie in "hässlichen" Code um -> die Leseklasse ist in tokenizer.py. Ciao, Gerson _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Gibt es für Python einen Parser, mit dem ich C-Sourcen parsen kann und dann von Python aus solche Fragen wie - wieviel C-Funktion hat die Source, wie heissen die, welche Parameter haben die - welche Variabeln gibt es, von welchem Typ sind die, Namen der Vars etc. einfach beantworten kann?
Ich hab' bei PythonMagick sowas für C++ gebraucht, aber ein C++ Parser sollte auch für C funktionieren. Da gibt's einmal Synopsis (http://synopsis.sf.net). Synopsis scheint sehr mächtig zu sein und kann auch extremen C++ Code (boost.python) parsen. Allerdings hab' ich es nicht unter Windows zum laufen gebracht und hatte auch mit dem gcc 3.2 unter Linux Probleme. Mein Lösung war dann der XML Output von einem modifizierten gcc (http://www.gccxml.org). Das erzeugte XML läßt sich relativ leicht parsen. Für reinen C Code sollte es noch einfacher sein. Außerdem gibt's noch doxygen (http://www.doxygen.org), ein Dokumentationstool, das auch XML 'rauswirft. Für mich war der XML Output nicht so toll, aber das hängt wohl von deinen Anforderungen ab. Gruß, Achim _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo, meine Frage 2 scheint etwas untergegangen zu sein. Oder hat niemand Tkinter-Erfahrung? Bewege ich mich mit Tkinter etwa in eine Sackgasse hinein? Zum C-Parser, erstmal Danke für die Hinweise. Bei Parser klingelt bei mir immmer was in Richtung Lex+Yacc. Allerdings nur diese Schlagworte, habe mich noch nie damit beschäftigt. Wäre das irgendwie ein Weg, um über Python dann C-Quellen zu parsen? -- Mit freundlichen Grüßen Klaus Meyer :-) _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Zum C-Parser, erstmal Danke für die Hinweise. Bei Parser klingelt bei mir immmer was in Richtung Lex+Yacc. Allerdings nur diese Schlagworte, habe mich noch nie damit beschäftigt. Wäre das irgendwie ein Weg, um über Python dann C-Quellen zu parsen?
Wenn du dir das wirklich antun willst!? Du kannst natürlich mit Lex+Yacc oder Antrl selbst einen Parser bauen und denn dann über boost.python oder SWIG für Python zugreifbar machen. Oder du verwendest einen der Parsergenerator, die Pythoncode erzeugen (einfach mal googln), aber das ist in jedem Fall Streß. Du muß die C Grammatik selbst schreiben. Wenn du Erfahrungen mit Compilerbau hast, dann mag das leicht sein, für Normals ist es meiner Meinung nach aber jede Menge Arbeit. Mit gccxml lädst du den Output in ein DOM, schreibst den richtigen XPath Ausdruck und hast alles was du brauchst. Gruß, Achim _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Wenn du dir das wirklich antun willst!? Hm, eigentlich nicht wirklich! ...
Du kannst natürlich mit Lex+Yacc oder Antrl selbst einen Parser bauen und denn dann über boost.python oder SWIG für Python zugreifbar machen. Ich glaube, das ist gestrichen.
Parsergenerator, die Pythoncode erzeugen (einfach mal googln), aber das Sowas wie http://theory.stanford.edu/~amitp/Yapps/ ?
in jedem Fall Streß. Du muß die C Grammatik selbst schreiben. Das mit dem Streß glaube ich sofort (wenn man sich in der speziellen Materie halt nicht auskennt, so wie ich), aber mich wundert etwas, das es C Grammatiken und fertige Parser dafür nich "wie Sand am Meer" gibt.
Ich stelle die Idee erstmal ganz hinten auf meine "was ich gerne machen möchte"-Liste und beende erstmal mein aktuelles kleine Script... -- Mit freundlichen Grüßen Klaus Meyer :-) _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Du kannst natürlich mit Lex+Yacc oder Antrl selbst einen Parser bauen und denn dann über boost.python oder SWIG für Python zugreifbar machen. Ich glaube, das ist gestrichen.
Ich bin ein großer boost.python Fan. Bau du den Parser in C++, dann bau ich das Interface zu Python! ;-)
Parsergenerator, die Pythoncode erzeugen (einfach mal googln), aber das Sowas wie http://theory.stanford.edu/~amitp/Yapps/ ?
Genau!
in jedem Fall Streß. Du muß die C Grammatik selbst schreiben. Das mit dem Streß glaube ich sofort (wenn man sich in der speziellen Materie halt nicht auskennt, so wie ich), aber mich wundert etwas, das es C Grammatiken und fertige Parser dafür nich "wie Sand am Meer" gibt.
Es gibt fertige C Grammatiken, aber wenn du dir mal eine anschaust, dann weißt du, warum du sowas nicht benutzen willst. Außerdem hast du dann erst einen Parsingbaum, den du irgendwie interpretieren mußt. Alles in allem keine schöne Sache, falls man sich nicht im Infostudium auf sowas spezialisiert hat. Synopsis kommt dem was du dir vorstellst wohl am nächsten, ist aber ziemlich mächtig und entsprechend komplex. Gruß, Achim _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Klaus Meyer wrote:
Parsergenerator, die Pythoncode erzeugen (einfach mal googln), aber das
Sowas wie http://theory.stanford.edu/~amitp/Yapps/ ?
Es gibt verschiedene Parsergeneratoren für Python, manche enthalten sogar schon einen Beispiel-C-Parser. Ich selbst empfehle immer Yapps. Du musst Dich dringend dafür entscheiden, eine Sprache zu parsen, die C nur sehr ähnlich ist, indem Du beispielsweise alles zwischen geschweiften Klammern ignorierst, wenn möglich. Ciao, Martin _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
On Thu, 01 May 2003 20:08:33 +0200 Klaus Meyer <km-news1@onlinehome.de> wrote:
2.) Grid-Manager in Tkinter: widget.grid(row=5, pady=5, columnspan=2)
Wenn man bei jedem Widget eine row/column explizit angibt, bekommt man viel Arbeit, wenn man etwas am Design ändern will oder Widgets hinzukommen etc. (neue Nummern vergeben). Wenn ich die Werte nicht angebe, versucht Tk selber, automatisch anzuordnen. Gibt es Empfehlungen, wie man vorgeht? Wenn ich keine Werte angebe, kann ich zur Laufzeit herausbekommen, in welcher Spalte/Zeile ein Widget gelandet ist?
Es gibt hier auf der Liste bestimmt kompetentere Leute (Martin :-)) aber ich will versuchen Dir zu antworten. Ich benutze vorwiegend pack als Geometriemanager. Normal sollte das Design der Anwendung die Du entwickeln moechtest als Blatt Papier vor Dir liegen. Konkret wo Du welches Widget plazieren willst. In dynamische Situationen kann man den einen oder anderen Button hinzufuegen oder weglassen aber auch das ist vorher im Code schon festgelegt. Widgets zur Laufzeit zu ermitteln und umzuplazieren duerften manche User bestimmt verwirren also ist meiner Meinung nach davon abzuraten. Oder was schwebte Dir konkret vor? Gruss Mike _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo Mike,
Ich benutze vorwiegend pack als Geometriemanager. es gibt also doch noch einen zweiten Tkinter-User ;-)
Ich habe einen Mix aus Entry, Label, Buttons und Text. Irgendwie habe ich es mit pack nicht gepackt bekommen, so, wie ich wollte. Deshalb Grid, damit gehts. Oder geht so ein Layout auch einfach mit Pack? Label Label Entry Button Entry Button Button Label Text Das Textfeld soll bei einem Resize mitwachsen, deshalb: tk.rowconfigure(6, weight=1) Durch Suchen in Tkinter habe ich jetzt widget.grid_info() gefunden. Das gibt ein Dict zurück, in dem auch die Position vermerkt ist, in der das Widget angeordnet ist.
Widgets zur Laufzeit zu ermitteln und umzuplazieren duerften manche User bestimmt verwirren also ist meiner Meinung nach davon abzuraten. Da stimme ich zu! Trotzdem gibt es manchmal Gründe, herauszubekommen, wo das widget liegt. Aber grid_info sollte das lösen.
Es gibt hier auf der Liste bestimmt kompetentere Leute (Martin :-)) Unser Martin ;-) Bezgl meiner Parser-Frage bin ich per Suchmaschine auch hier gelandet: http://www.python.org/sigs/parser-sig/towards-standard.html Wer der Autor ist, kannst Du Dir denken? ;-) Also Martin, danke für Dein andauerndes Engagement!
Über den Link bin ich auch bei Yapps gelandet. Klingt interessant, obwohl ich noch keine Gefühl habe, ob das für C (muß nicht komplett geparst werden) reichen würde. Mal schauen... -- Mit freundlichen Grüßen Klaus Meyer :-) _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
On Fri, 02 May 2003 17:28:41 +0200 Klaus Meyer <km-news1@onlinehome.de> wrote:
es gibt also doch noch einen zweiten Tkinter-User ;-)
Ja
Ich habe einen Mix aus Entry, Label, Buttons und Text. Irgendwie habe ich es mit pack nicht gepackt bekommen, so, wie ich wollte. Deshalb Grid, damit gehts.
Oder geht so ein Layout auch einfach mit Pack?
Nein, einfach nicht, man muss schon ein paar Kompromisse schliessen ;-) wie ich gerade feststelle :-(
Das Textfeld soll bei einem Resize mitwachsen, deshalb: tk.rowconfigure(6, weight=1)
Du meinst das Vergroessern oder Verkleinern des gesamten Programmfensters, dann ja, sonst wuerde ich Scrollbars empfehlen wenn Du die Menge des Textes meinst. Gruss und schoenes Wochenende Mike _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (5)
-
"Martin v. Löwis"
-
Achim Domma (ProCoders)
-
Gerson.Kurz@t-online.de
-
Klaus Meyer
-
Mike Abel