<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[C++ parsen]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich bin gerade dabei, zu planen, wie man einen C++-Parser umsetzen könnte (der Sinn und Zweck sei erstmal dahin gestellt :)). Da es wenig Sinn macht, C++ nach meinem Wissen zu parsen, halte ich mich selbstverständlich an den ISO-Standard. Dafür benutze ich folgendes Dokument:</p>
<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf</a></p>
<p>Ich hab schon eine Idee wie ich den lexikalischen Scanner umsetzen könnte / werde. Die eigentlichen Probleme hab ich damit, die ganzen möglichen Audrücke (Expressions, Statements, Declarations, Declarators, Classes usw.) zu parsen. Jedoch ist mir aufgefallen, dass am Ende des Dokuments im Kapitel &quot;A Grammar summary&quot; die exakte Definition wie etwas zu machen ist, schön zusammengefasst aufgelistet ist. Dabei bekam ich die Idee, ob es denn möglich ist (oder sogar empfohlen ist), die Beschreibung einfach 1 zu 1 umzusetzen.</p>
<p>Beispiel:</p>
<p>Im Kapitel A.4 Expressions steht ganz oben:</p>
<pre><code class="language-cpp">primary-expression:
   literal
   this
   ( expression )
   id-expression
   lambda-expression
</code></pre>
<p>Nun wäre es doch denkbar, im Parser eine Methode get_primary_expression bereit zu stellen, die wiederum die verschiedenen Möglichkeiten aufruft (bspw. get_literal usw.), bis es einen Treffer gab und somit die Art des Tokens ermittelt wurde. Ich habe bewusst das Präfix get_ anstatt is_ verwendet, da es mir direkt einen Token-Typ zurück liefern soll, falls es einen Treffer gab. Wenn es keine primary-expression ist, wird irgendein Kennzeichen zurückgegeben, welches besagt, dass es keinen Treffer gab. Wenn das Parsen auf diese Art und Weise möglich wäre, hätte ich dennoch ein Problem. Ich müsste auch andere Sachen (weiss nicht wie ich es beschreiben soll, evtl Semantik?) prüfen.</p>
<p>Beispiel:</p>
<p>Angenommen in der Definition wird beschrieben, dass ein primitiver Typ mit irgendwelchen Spezifizierern deklariert werden kann (bspw. &quot;unsigned&quot;). Jedoch gibt es für den Typ &quot;bool&quot; kein unsigned. Also solche Typ-spezifischen Sachen usw. Darunter zähle ich mal das validieren, ob der Rückgabetyp einer Funktion gleich dem lvalues ist. Jedoch kann ich aus dem ISO-Standard nicht erkennen, wo solche Fälle beschrieben sind.</p>
<p>Ich wäre sehr dankbar für alle hilfreichen Beiträge :).</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280390/c-parsen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 03:58:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280390.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Jan 2011 19:03:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 19:03:44 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich bin gerade dabei, zu planen, wie man einen C++-Parser umsetzen könnte (der Sinn und Zweck sei erstmal dahin gestellt :)). Da es wenig Sinn macht, C++ nach meinem Wissen zu parsen, halte ich mich selbstverständlich an den ISO-Standard. Dafür benutze ich folgendes Dokument:</p>
<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf</a></p>
<p>Ich hab schon eine Idee wie ich den lexikalischen Scanner umsetzen könnte / werde. Die eigentlichen Probleme hab ich damit, die ganzen möglichen Audrücke (Expressions, Statements, Declarations, Declarators, Classes usw.) zu parsen. Jedoch ist mir aufgefallen, dass am Ende des Dokuments im Kapitel &quot;A Grammar summary&quot; die exakte Definition wie etwas zu machen ist, schön zusammengefasst aufgelistet ist. Dabei bekam ich die Idee, ob es denn möglich ist (oder sogar empfohlen ist), die Beschreibung einfach 1 zu 1 umzusetzen.</p>
<p>Beispiel:</p>
<p>Im Kapitel A.4 Expressions steht ganz oben:</p>
<pre><code class="language-cpp">primary-expression:
   literal
   this
   ( expression )
   id-expression
   lambda-expression
</code></pre>
<p>Nun wäre es doch denkbar, im Parser eine Methode get_primary_expression bereit zu stellen, die wiederum die verschiedenen Möglichkeiten aufruft (bspw. get_literal usw.), bis es einen Treffer gab und somit die Art des Tokens ermittelt wurde. Ich habe bewusst das Präfix get_ anstatt is_ verwendet, da es mir direkt einen Token-Typ zurück liefern soll, falls es einen Treffer gab. Wenn es keine primary-expression ist, wird irgendein Kennzeichen zurückgegeben, welches besagt, dass es keinen Treffer gab. Wenn das Parsen auf diese Art und Weise möglich wäre, hätte ich dennoch ein Problem. Ich müsste auch andere Sachen (weiss nicht wie ich es beschreiben soll, evtl Semantik?) prüfen.</p>
<p>Beispiel:</p>
<p>Angenommen in der Definition wird beschrieben, dass ein primitiver Typ mit irgendwelchen Spezifizierern deklariert werden kann (bspw. &quot;unsigned&quot;). Jedoch gibt es für den Typ &quot;bool&quot; kein unsigned. Also solche Typ-spezifischen Sachen usw. Darunter zähle ich mal das validieren, ob der Rückgabetyp einer Funktion gleich dem lvalues ist. Jedoch kann ich aus dem ISO-Standard nicht erkennen, wo solche Fälle beschrieben sind.</p>
<p>Ich wäre sehr dankbar für alle hilfreichen Beiträge :).</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006677</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 19:22:30 GMT]]></title><description><![CDATA[<p>Einen Parser für C++ zu schreiben ist alles andere als ein Kinderspiel. Man sieht das auch bei aktuellen Compilern, die Leerzeichen bei Templates erzwingen, um diese als solche überhaupt erkennen zu können. Überhaupt sind diese Compiler über Jahrzehnte entstanden - und das nicht als Ein-Mann-Projekt.</p>
<p>Wenn du neben der Prüfung der Syntax dann auch noch die Semantik, etc. überprüfen willst, du also im Prinzip schon (fast) einen ganzen Compiler programmierst, dann ist das einfach nur sinnlos. Du wirst damit in absehbarer Zeit nicht fertig werden.</p>
<p>Ansonsten gibt es zum Thema Compilerbau im Artikelbereich 2 Artikel:<br />
<a href="http://www.c-plusplus.net/forum/268247" rel="nofollow">http://www.c-plusplus.net/forum/268247</a><br />
<a href="http://www.c-plusplus.net/forum/201764" rel="nofollow">http://www.c-plusplus.net/forum/201764</a></p>
<p>Ich würde dir nicht gänzlich von deinem Vorhaben abraten. Es macht ja auch sehr viel Spaß und ist wahnsinnig interessant. Du solltest aber nicht versuchen die gesamten Sprachfeatures, etc. zu implementieren, sondern nur einen ganz kleinen Bruchteil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006687</guid><dc:creator><![CDATA[öklöklökl]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 21:39:16 GMT]]></title><description><![CDATA[<p>Der Hintergrund der ganzen Geschichte ist, dass ich eine Art Live-Parser (um in einer IDE eine gute Code-Completion + Refactoring für C++ bereitzustellen) erstellen möchte. Ich bin der Meinung, dass es nach wie vor keine solche Funktionalität gibt, die wirklich gut funktioniert. Wer schonmal Java mit eclipse programmiert hat, weiss was ich unter &quot;gut funktionieren&quot; verstehe.</p>
<p>- IntelliSense ist komplett fürn Po. Sogar mit Visual Assist X ist es nicht unbedingt das Gelbe vom Ei.<br />
- C++ mit eclipse (CDT) funktioniert die Code-Completion bzw. Fehler-Anzeige immer erst nach der Kompilierung (wahrscheinlich weil er die Fehler aus dem Compiler Output parsed).<br />
- KDevelop4 finde ich ganz schick, der Nachteil an der ganzen Geschichte ist, dass es diese IDE nur für Linux gibt, bzw. im Moment noch &quot;nur brauchbar für Linux&quot;</p>
<p>Des Weiteren finde ich das Thema wirklich sehr interessant. Ich bin jemand, der sich nicht unbedingt zufrieden gibt, einfach alles hin zu nehmen wie es ist, sondern viele Dinge die mich interessieren zu hinterfragen und zu verstehen. Ich weiss, dass das parsen von C++ ein harter Brocken ist, aber ich versteh nicht unbedingt warum. Sicher ist es schwer wenn man sich die ewig lange Definition aus dem ISO-Standard anschaut, aber wenn man sich doch direkt an die dort definierten Regeln hält, sollte es doch eigentlich möglich sein einen standardkonformen C++ Parser zu erstellen oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006696</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Fri, 14 Jan 2011 21:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 19:47:39 GMT]]></title><description><![CDATA[<blockquote>
<p>- IntelliSense ist komplett fürn Po. Sogar mit Visual Assist X ist es nicht unbedingt das Gelbe vom Ei.</p>
</blockquote>
<p>Schonmal VS 2010 ausprobiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006697</guid><dc:creator><![CDATA[VS2010]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:47:39 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 19:55:31 GMT]]></title><description><![CDATA[<p>Ja auch. In Visual Studio ist es meiner Meinung nach generell so, dass sich das Fenster der Code-Completion sogar manchmal erst gar nicht öffnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006702</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 20:02:10 GMT]]></title><description><![CDATA[<p>Nun du hast mit deine Beobachtung total recht und bewunder dein Mut dich mit so eine komplex Sprache dein Parser zu bauen, aber du solltest davon abgehen und Erfahrung mit einfache Sprache oder -stücken und mit den verwendeten Algorithmen sammeln. Das Problem mit der Spezifikation ist, dass sie je nach Paseralgorithmen nicht entscheidbar ist, weil sie für Menschen geschrieben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006703</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Fri, 14 Jan 2011 20:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 20:04:36 GMT]]></title><description><![CDATA[<p>Du musst die Sprache C++ in ihrer gesamten Einheit sehen. Bevor überhaupt etwas passiert, muss natürlich der Präprozessor ran, welcher die Dateien inkludiert und sich um die Makros, usw. kümmert.</p>
<p>Wenn das geschehen ist, dann hat man den Code, welcher geparst werden kann. Betrachtet man die Syntax-Ebene erkennt man sofort, dass C++ schon mal nicht kontextfrei ist. Der Parser muss also an vielen Stellen entscheiden, ob es sich z.B. um ein Funktionsaufruf oder eine Zuweisung handelt. Von diesen Mehrdeutigkeiten gibt es in C++ sehr sehr sehr viele.</p>
<p>Um diese Mehrdeutigkeiten aber aufzulösen benötigt der Parser sehr viele Informationen. Zum Beispiel Variablentyp, usw. Aber auch das reicht nicht, denn die Variable könnte ja an dieser Stelle auch in einen anderen Typ gecastet werden. Auch solche Dinge müssen beachtet werden.</p>
<p>Und auch bei einem Funktionsaufruf muss die korrekte Funktion (Überladungen) aufgerufen werden. Und dann kommen noch die Templates dazu. Die Klassen mit ihrer Polymorphie und allen möglichen anderen Zeugs.</p>
<p>Die Sprache macht also zunächst einen sehr einfachen Eindruck, aber umso weiter man denkt, umso schneller stellt man fest, dass man sich plötzlich in einem riesigen Dschungel befindet. Es gibt so viele Sonderfälle und Ausnahmen oder auch lückenhafte Standardisierungen. Da muss man sich dann als Entwickler eines Compilers auch noch Gedanken machen, wie sich der Compiler in diesem Fall am sinnvollsten verhalten soll, da der Standard nur eine oberflächliche Beschreibung gibt.</p>
<p>Tja, und dann gibt es noch den Faktor Zeit. Und das gleich auf zwei Seiten. Einerseits muss man selber erst mal einen funktionsfähigen Parser geschrieben haben - das kostet ganz sicher viel Zeit. Andererseits muss dieser Parser auch sehr schnell viel Code verarbeiten können. Denken wir an den Anfang zurück, dann wird klar, dass durch die vielen Includes sehr viel Code anfällt. Das muss alles geparst werden bzw. muss man sich sehr viele Gedanken machen, wie man das optimieren kann.</p>
<p>Vielleicht wird einem dann auch klar, warum aktuelle &quot;Live-Parser&quot; nicht die besten Ergebnisse bieten. Sie müssen einfach irgendwo Abstriche machen, damit sie dem Benutzer auch genau dann unterstützen können, wenn er es gerade braucht und nicht erst nach Minuten an Rechenzeit und wenn der Code schon wieder ganz anders aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006706</guid><dc:creator><![CDATA[öklöklökl]]></dc:creator><pubDate>Fri, 14 Jan 2011 20:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 20:25:27 GMT]]></title><description><![CDATA[<p>Erstmal danke für die Antworten bisher :).</p>
<p>Ich habe mich ja schon etwas damit befasst. Im Kapitel &quot;2.2 Phases of translation&quot; wird auch beschrieben, was vorher geschehen muss um erstmal zum eigentlichen parsen des Codes zu kommen. Ich bin mir sicher, dass es diverse Möglichkeiten gibt, die Ausführungs- bzw. Parsezeit zu verkürzen. Bspw. könnte man (bzw. sollte man grundsätzlich) Header-Dateien aus verwendeten Bibliotheken nur einmal vorher parsen (Standard-Lib, boost etc.). So dass nur die Dateien analysiert werden, die auch aktiv verändert werden. Des Weiteren hatte ich schon einmal das Vergnügen etwas in der Richtung eines Parsers zu erstellen (spricht mich irgendwie an :)) ... natürlich nicht in einem solchen Umfang. Mir ist dabei aufgefallen, dass die Rechner mittlerweile doch sehr schnell sind, so konnte ich auch lange Dateien in einer Ausführungszeit (laut GetTickCounts) von 0 - 16 ms parsen (inkl. Datei öffnen und die ganzen Spielerein drum herum). Zusätzlich könnte man sich auch diverse Algorithmen überlegen, um nur Code teilweise zu parsen. Also die komplette Source einmal und danach nur noch wenn bestimmte Events auftreten (Programmierer beendet eine Anweisung oder sowas). Was am sinnvollsten ist, müsste man sich eben zu einem späteren Zeitpunkt noch genauer überlegen.</p>
<p>Naja ich werde mich mal weiterhin damit beschäftigen und C++-Code weiter analysieren um ein besseres Verständnis für die inneren Vorgänge aus der Sicht des Parsers zu bekommen. Natürlich würde ich mich über weitere Beiträge freuen :).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006717</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Fri, 14 Jan 2011 20:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 20:26:16 GMT]]></title><description><![CDATA[<p>skNiNe schrieb:</p>
<blockquote>
<p>Ja auch. In Visual Studio ist es meiner Meinung nach generell so, dass sich das Fenster der Code-Completion sogar manchmal erst gar nicht öffnet.</p>
</blockquote>
<p>Die betonung liegt auf <strong>2010</strong> da wurde nämlich genau der teil komplett neugeschrieben und ich muss sagen, ich kann mich nicht beschweren. Die intelli sense kennt so ziemlich alles und das auch korrekt. Zugegeben, ganz an java oder c# kommt sie noch nicht ran, aber sehr nah.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006719</guid><dc:creator><![CDATA[2010!]]></dc:creator><pubDate>Fri, 14 Jan 2011 20:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 21:32:59 GMT]]></title><description><![CDATA[<p>Wenn dir die Code-Completion von KDevelop so gut gefällt, dann bau dir diesen Teil aus und verbessere ihn. Selber schreiben würde ich mir nicht zutrauen, ausser du hast etwas Erfahrung im Compilerbau und das scheint ja nicht der Fall zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006741</guid><dc:creator><![CDATA[mission impossible]]></dc:creator><pubDate>Fri, 14 Jan 2011 21:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 21:38:36 GMT]]></title><description><![CDATA[<p>Ich hab tatsächlich keine Erfahrung im Compilerbau. Aber ohne einen Anfang zu machen kommt man sicherlich auch nicht weiter. Ein Parser für eine Sprache wie C++ ist zwar kein guter Einstieg, aber es ist das, was ich brauche bzw. machen möchte. Ich werde mich hier ab und zu mal melden und euch über den aktuellen Stand informieren. Evtl. hat ja der ein oder andere interesse daran.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006742</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Fri, 14 Jan 2011 21:38:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Fri, 14 Jan 2011 23:38:53 GMT]]></title><description><![CDATA[<blockquote>
<p>Ein Parser für eine Sprache wie C++ ist zwar kein guter Einstieg, aber es ist das, was ich brauche bzw. machen möchte.</p>
</blockquote>
<p>Du hoerst dich wie so ein Kiddi an, dass das naechste WoW oder Crysis entwickeln will aber vom Programmieren keinen Schimmer hat. Dann wird diesem Kiddi geraten doch erstmal Programmieren zu lernen, TicTacToe zu programmieren dann Tetris, Pong oder Packman. Als naechster Schritt waere dann ein Mehrspielermodus in den 4 Spielen oder gar sie netzwerkfaehig zu machen.</p>
<p>Einsicht bei solchen ist selten zu finden. Du verwendest zwar Worte der Beschwichtigung aber im Endeffekt steht da nur: Ich will, ich will, ich will ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006765</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 14 Jan 2011 23:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 00:06:20 GMT]]></title><description><![CDATA[<p>Und? Lass ihn doch! Die Erfahrung muss jeder mal machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006770</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Sat, 15 Jan 2011 00:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 09:51:15 GMT]]></title><description><![CDATA[<p>Kiddie ist genauso unzutreffend wie nicht programmieren können. Es gibt zwar tatsächlich oft Threads, in denen irgendwelche Kiddies Spiele programmieren wollen und nach den ersten Anblick eines Codes dann doch lieber alles bleiben lassen. Jedoch muss ich dich hier enttäuschen, da es sich nicht um einen solchen Thread handelt.</p>
<p>Ich sehe keinen Grund, warum ich mich nicht damit beschäftigen sollte. Jedenfalls bin ich kein Entwickler, der tagtäglich nur seine Verwaltungsprogramme auf der Arbeit schreibt, sondern sich auch mit anderen und evtl. interessanteren Themen beschäftigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006808</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Sat, 15 Jan 2011 09:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 10:46:51 GMT]]></title><description><![CDATA[<p>Dich abhalten liegt mir fern, es sind nur gutgemeinte Ratschlaege. Leider hast du die Analogie nicht verstanden.</p>
<p>Crysis -&gt; C++ Compiler<br />
Nicht Programmieren koennen -&gt; keine Ahnung von Compilerbau<br />
Beschaeftige dich mit den Grundlagen -&gt; Fange nicht mit einem C++ Compiler an<br />
Kiddi -&gt; ich will, ich will, ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006821</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 15 Jan 2011 10:46:51 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 10:59:38 GMT]]></title><description><![CDATA[<p>Warum beschäftigst du dich nicht zuerst mit einer einfacheren Sprache, z.B. einer Skriptsprache? Wenn du noch keine Erfahrung mit Code parsen hast, wäre das doch ein guter Einstieg. Interessant ist es genauso, und du musst dich nicht ins Terrain der C++-Spitzfindigkeiten und Fallunterscheidungen begeben, die sogar vielen Programmierern nicht bekannt sind. Alleine schon die ganze Überladungsauflösung ist ziemlich komplex. Von Templates wollen wir gar nicht erst anfangen...</p>
<p>Jedenfalls wird eine Skriptsprache deine Frustration verhindern, wenn du merkst, dass dich mit dem funktionierenden C++-Parser doch etwas überschätzt hast.</p>
<p>Und Autovervollständigungstools für C++ funktionieren nicht immer 100% zuverlässig, <em>gerade weil</em> C++ im Gegensatz zu Java oder C# wahnsinnig komplex zu parsen ist. Ich halte es für sehr unrealistisch, dass du daran einfach mal so etwas ändern kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006825</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Jan 2011 10:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 11:20:59 GMT]]></title><description><![CDATA[<p>skNiNe schrieb:</p>
<blockquote>
<p>Ich hab tatsächlich keine Erfahrung im Compilerbau. Aber ohne einen Anfang zu machen kommt man sicherlich auch nicht weiter. Ein Parser für eine Sprache wie C++ ist zwar kein guter Einstieg, aber es ist das, was ich brauche bzw. machen möchte. Ich werde mich hier ab und zu mal melden und euch über den aktuellen Stand informieren. Evtl. hat ja der ein oder andere interesse daran.</p>
</blockquote>
<p>da c ein subset von c++ ist würd ich erstmal damit anfangen... die erste hürde an der ich mir die zähne ausgebissen hab ist das typsystem. da würde ich mir speziell gedanken machen. die templates würd ich für den anfang rauslassen. die sollten wenn alles steht &quot;leicht&quot; umzusetzen sein. zeig doch mal deinen tokenizer. das schonmal ein guter anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006831</guid><dc:creator><![CDATA[__--]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 11:48:45 GMT]]></title><description><![CDATA[<p>Ich war eben dabei mir den ISO-Standard von C anzuschauen. Ich bin mir aber nicht sicher ob es sehr viel leichter sein wird. Natürlich fallen Themen wie Operatorüberladung, Templates, Klassen usw. weg, aber dennoch müsste man den größten Teil von C++ bzw. die vielen Überschneidungen abbilden. Mein lexikalischer Scanner existiert bisher nur auf Blättern. Laut den Definitionen im C und C++ (sind da ja beide diesbezüglich recht ähnlich) wird bzw. sollte das so auch umsetzbar sein.</p>
<p>Edit:<br />
Ich kann mich zum parsen einer Skriptsprache irgendwie nicht motivieren. Es soll ein Parser für etwas sein, was ich aktiv verwende. Mein Sprachspektrum liegt in C, C++, C# und Java. Dazu muss man sagen, dass ich C# nur zwangsweise lernen musste (und mich nicht überzeugt hat). Des Weiteren gibt es für C# und Java schon gute Lösungen für das Problem, welches ich lösen wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006847</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 11:48:39 GMT]]></title><description><![CDATA[<p>Ich würde dir mal einen Blick auf Boost::wave empfehlen, die haben nicht nur einen Präprozessor sondern auch einen C++ Lexer, damit konnte man schon mal einen C++ Parser durchaus in angriff nehmen, aber das ist ein sehr langfristiges Projekt, gerade wenn du auch noch C++0x unterstützen willst (was sinnvoll wäre).</p>
<p>Ich habe selber schon parser für verschiedene Sprachen und für C++ schon Teilparser geschrieben (Funktions deklarationen z.b.).</p>
<p>Für die Praxis, schau dir mal boost::spirit an, da gibts auch einen minimal C Parser afaik in den Beispielen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006851</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 11:55:13 GMT]]></title><description><![CDATA[<p>Hallo skNiNe,</p>
<p>gerade wenn du noch keine Erfahrung im Compilerbau hast, solltest du ein bestehendes Framework verwenden, z.B. <a href="http://boost-spirit.com/home/" rel="nofollow">boost::spirit</a>.</p>
<p>Dafür gibt es auch schon einige C++-Parser Implementierungen (wahrscheinlich nicht komplett vollständig, aber als ersten Anfang besser als ganz bei Null zu beginnen!):<br />
<a href="http://boost-spirit.com/repository/grammars/show_contents.php" rel="nofollow">http://boost-spirit.com/repository/grammars/show_contents.php</a><br />
<a href="http://www.mailund.dk/index.php/2008/10/03/newick-c-parser-in-boostspirit/" rel="nofollow">http://www.mailund.dk/index.php/2008/10/03/newick-c-parser-in-boostspirit/</a></p>
<p>Viele Beispiele (dazu auch ein paar für den C++-Parser) gibt es unter <a href="http://boost-spirit.com/repository/applications/show_contents.php" rel="nofollow">http://boost-spirit.com/repository/applications/show_contents.php</a></p>
<p>Und hier ein Kurzeinstieg zu Parser mit boost::spirit: <a href="http://www.highscore.de/cpp/boost/parser.html" rel="nofollow">http://www.highscore.de/cpp/boost/parser.html</a></p>
<p>Außerdem habe ich noch einen Parser gefunden, der intern auf boost::spirit aufsetzt: <a href="http://www.sweetsoftware.co.nz/parser_overview.php" rel="nofollow">http://www.sweetsoftware.co.nz/parser_overview.php</a></p>
<p>Hier übrigens eine ähnliche Anfrage bzgl. eigenen C++-Parser: <a href="http://www.gamedev.net/topic/349261-c-parser-for-visual-assist----suggestions/" rel="nofollow">http://www.gamedev.net/topic/349261-c-parser-for-visual-assist----suggestions/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006853</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 13:42:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/642">@phlox81</a><br />
Für welche Sprachen und aus welchen Grund hast du schon Parser geschrieben? Die Motivation anderer Leute die auch schonmal einen Parser geschrieben haben finde ich interessant :). Den Lexer an sich finde ich eigtl nicht unbedingt so schwer, das Problem liegt meiner Meinung nach in der Überprüfung der Semantik.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a><br />
Danke für die Informationen :). Vorallem den Thread bei gamedev finde ich interessant. Leider wurde es ja bisher noch nicht geschafft, einen C++-Parser an Hand von boost::spirit zu entwickeln. Wie auch in gamedev schon beschrieben steht, läuft es darauf hinaus, dass man es doch selbst entwickeln muss.</p>
<p>Edit:<br />
Ich habe mir nun folgendes Buch gegönnt. Ich hoffe mal, dass es sein Geld wert ist.<br />
<a href="http://www.amazon.de/Compiler-Prinzipien-Techniken-Pearson-Studium/dp/3827370973/ref=sr_1_1?ie=UTF8&amp;qid=1295098835&amp;sr=8-1" rel="nofollow">http://www.amazon.de/Compiler-Prinzipien-Techniken-Pearson-Studium/dp/3827370973/ref=sr_1_1?ie=UTF8&amp;qid=1295098835&amp;sr=8-1</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006894</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Sat, 15 Jan 2011 13:42:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 17:51:11 GMT]]></title><description><![CDATA[<p>skNiNe schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/642">@phlox81</a><br />
Für welche Sprachen und aus welchen Grund hast du schon Parser geschrieben? Die Motivation anderer Leute die auch schonmal einen Parser geschrieben haben finde ich interessant :). Den Lexer an sich finde ich eigtl nicht unbedingt so schwer, das Problem liegt meiner Meinung nach in der Überprüfung der Semantik.</p>
</blockquote>
<p>Das ist immer die Frage was man machen will, ich habe mich eigentlich immer darauf beschränkt, nur Code zu generieren, und bedingt auch zu parsen (statt 10 Editboxen eine).<br />
Schwierig wirds natürlich wenn man auch den eigentlichen Logikcode parsen will, ansonsten kann man relativ einfach eine Regel bauen die den inhalt zwischen zwei {} in einen String schreibt.</p>
<p>Ich habe 2 Parser für TTCN3 geschrieben, unter anderem dort auch die Aufrufe später überprüft. Und Parser für diverse andere Dinge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006979</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 15 Jan 2011 17:51:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 17:52:53 GMT]]></title><description><![CDATA[<p>wieviele jahre bist du denn bereit dafür zeit zu investieren? das ist fast ne lebensaufgabe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006981</guid><dc:creator><![CDATA[gutefrage]]></dc:creator><pubDate>Sat, 15 Jan 2011 17:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 18:45:00 GMT]]></title><description><![CDATA[<p>skNiNe schrieb:</p>
<blockquote>
<p>Leider wurde es ja bisher noch nicht geschafft, einen C++-Parser an Hand von boost::spirit zu entwickeln. Wie auch in gamedev schon beschrieben steht, läuft es darauf hinaus, dass man es doch selbst entwickeln muss.</p>
</blockquote>
<p>Es ist nicht so, dass es ganz von Hand einfacher wäre als mit <em>Boost.Spirit</em>. Aber vielleicht musst du zu einem mächtigeren Lexer-/Parserframework (z.B. Flex/Bison-Kombination) greifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007009</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Jan 2011 18:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sat, 15 Jan 2011 22:55:07 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>skNiNe schrieb:</p>
<blockquote>
<p>Leider wurde es ja bisher noch nicht geschafft, einen C++-Parser an Hand von boost::spirit zu entwickeln. Wie auch in gamedev schon beschrieben steht, läuft es darauf hinaus, dass man es doch selbst entwickeln muss.</p>
</blockquote>
<p>Es ist nicht so, dass es ganz von Hand einfacher wäre als mit <em>Boost.Spirit</em>. Aber vielleicht musst du zu einem mächtigeren Lexer-/Parserframework (z.B. Flex/Bison-Kombination) greifen.</p>
</blockquote>
<p>lol. Tschuldigung, aber spirit ist mächtig genug, und ich kann mir nicht vorstellen, was Flex/Bison besser als Spirit könnte.<br />
Evtl. interessant könnte hier der Quellcode von LLVM/clang sein, die haben ja einen kompletten Kompiler neu gebaut, also müssten sie auch einen Parser haben.<br />
Dieser ist zumindest Opensource, evtl. sogar unter einer BSD ähnlichen Lizenz (also nich GPL).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007089</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 15 Jan 2011 22:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to C++ parsen on Sun, 16 Jan 2011 00:15:56 GMT]]></title><description><![CDATA[<p>phlox81 schrieb:</p>
<blockquote>
<p>lol. Tschuldigung, aber spirit ist mächtig genug, und ich kann mir nicht vorstellen, was Flex/Bison besser als Spirit könnte.</p>
</blockquote>
<p>Ich kenne die Frameworks zu wenig, um das zu beurteilen. Jedoch hat g++ meines Wissens früher auf Bison basiert. Das muss natürlich nichts heissen (ausser dass man sich vielleicht eher an einer existierenden Implementierung orientieren kann).</p>
<p>Das mit dem &quot;mächtiger&quot; habe ich schon ein paar Male gehört, aber offenbar zu Unrecht. Danke für die Anmerkung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2007108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2007108</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 16 Jan 2011 00:15:56 GMT</pubDate></item></channel></rss>