<?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[Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite mit einer Sprache, welche kontextabhängige Schlüsselwörter kennt. Z.B. ist 'of' in dem Code <code>Instance X of Y</code> in diesem Kontext ein Schlüsselwort, im Kontext <code>Var of = 42</code> jedoch nicht.</p>
<p>Ich habe einen Lexer für die Sprache; daran können verschiedene Filter angekoppelt und Ausgabemodule aufgesetzt werden (ein Filter kann Tokens zurückweisen oder transformieren; ein Ausgabemodul arbeitet mit dem resultierenden Token-Strom weiter). Ein solches Modul soll nun ein HTML- (oder beliebiges anderes) Syntaxhighlighting erzeugen. Gut. Aber wie bekomme ich es hier hin, solche kontextabhängigen Schlüsselwörter korrekt darzustellen. Generell gibt es für jedes Schlüsselwort einen eigenen Token-Typ. 'of' ist da aber nicht enthalten, denn es kann ja auch ein ganz normaler Bezeichner sein. Für einen Parser wäre das natürlich kein Problem, ich möchte aber aus Effizienzgründen *keinen* Parser für das Syntax-Highlighting benutzen. Gibt es trotzdem irgend einen netten Trick, um solche bedingten Schlüsselwörter korrekt zu formatieren, *ohne* einen Parser für den entsprechenden Ausdruck implementieren zu müssen?</p>
<p>Zusatz: Die Konstrukte sind leider nicht immer so einfach wie oben, denn sonst wäre das ja einfach; man merkt sich einfach, dass das vorletzte Token 'Instance' war. Allerdings kann an der Stelle von 'X' auch ein komplexer Ausdruck stehen.</p>
<p>Ich befürchte, eine gute Lösung gibt es nicht aber vielleicht belehrt mich jemand eines anderen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184488/lexer-syntaxhighlighting-mit-kontextsensitiven-schlüsselwörtern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 15:26:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184488.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Jun 2007 17:41:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Fri, 15 Jun 2007 17:42:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite mit einer Sprache, welche kontextabhängige Schlüsselwörter kennt. Z.B. ist 'of' in dem Code <code>Instance X of Y</code> in diesem Kontext ein Schlüsselwort, im Kontext <code>Var of = 42</code> jedoch nicht.</p>
<p>Ich habe einen Lexer für die Sprache; daran können verschiedene Filter angekoppelt und Ausgabemodule aufgesetzt werden (ein Filter kann Tokens zurückweisen oder transformieren; ein Ausgabemodul arbeitet mit dem resultierenden Token-Strom weiter). Ein solches Modul soll nun ein HTML- (oder beliebiges anderes) Syntaxhighlighting erzeugen. Gut. Aber wie bekomme ich es hier hin, solche kontextabhängigen Schlüsselwörter korrekt darzustellen. Generell gibt es für jedes Schlüsselwort einen eigenen Token-Typ. 'of' ist da aber nicht enthalten, denn es kann ja auch ein ganz normaler Bezeichner sein. Für einen Parser wäre das natürlich kein Problem, ich möchte aber aus Effizienzgründen *keinen* Parser für das Syntax-Highlighting benutzen. Gibt es trotzdem irgend einen netten Trick, um solche bedingten Schlüsselwörter korrekt zu formatieren, *ohne* einen Parser für den entsprechenden Ausdruck implementieren zu müssen?</p>
<p>Zusatz: Die Konstrukte sind leider nicht immer so einfach wie oben, denn sonst wäre das ja einfach; man merkt sich einfach, dass das vorletzte Token 'Instance' war. Allerdings kann an der Stelle von 'X' auch ein komplexer Ausdruck stehen.</p>
<p>Ich befürchte, eine gute Lösung gibt es nicht aber vielleicht belehrt mich jemand eines anderen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306762</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 15 Jun 2007 17:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Fri, 15 Jun 2007 19:37:52 GMT]]></title><description><![CDATA[<p>Naja, so rein intuitiv würde ich fast vermuten dass du die Information, in welchem Kontext du dich befindest, nicht verwenden kannst wenn du sie nicht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306877</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 15 Jun 2007 19:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 11:01:01 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Naja, so rein intuitiv würde ich fast vermuten dass du die Information, in welchem Kontext du dich befindest, nicht verwenden kannst wenn du sie nicht hast.</p>
</blockquote>
<p>Klar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /> Aber in welchem Kontext ich bin, kann ich relativ prüfen indem ich einfach schaue, ob irgendwann ein 'Instance'-Token kommt, dann weiß ich ja, dass ein 'of' folgt, nur eben nicht genau *wo*; eben, weil das 'X' ein komplexer Typenbezeichner sein kann. Ich habe das jetzt so gelöst, dass ich einfach ab einem 'Instance'-Token die Position des 'of'-Tokens &quot;rate&quot;, indem ich verschiedene Dinge (Klammerungstiefe …) heranziehe. Scheint zu klappen, ich bin mir aber nicht sicher, ob ich jeden Fall abgedeckt habe. Na ja, muss reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307118</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 16 Jun 2007 11:01:01 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 14:31:40 GMT]]></title><description><![CDATA[<p>hmm -für pygments könnte man einen passenden lexer schreiben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307255</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Sat, 16 Jun 2007 14:31:40 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 15:27:57 GMT]]></title><description><![CDATA[<p>r0nny schrieb:</p>
<blockquote>
<p>hmm -für pygments könnte man einen passenden lexer schreiben</p>
</blockquote>
<p>Da hätte man doch aber dasselbe Problem; man müsste für das 'X' aus meinem Beispiel die gesamte hier anwendbare Produktion implementieren. Im Fall von <code>Instance X of Y</code> hält sich das noch in Grenzen. Für <code>For X in Y</code> ('in' ist ein bedingtes Schlüsselwort) ist das hingegen schon ganz schön kompliziert, denn anstelle von 'X' kann hier ein beliebiger L-Value oder eine Deklaration stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307295</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 16 Jun 2007 15:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 15:48:56 GMT]]></title><description><![CDATA[<p>Tja, dann musst du halt in deinem Lexer entsprechende Regeln erstellen, z.b. welche die dann ein Instance of halt komplett verarbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307314</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 16 Jun 2007 15:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 15:51:59 GMT]]></title><description><![CDATA[<p>phlox81 schrieb:</p>
<blockquote>
<p>Tja, dann musst du halt in deinem Lexer entsprechende Regeln erstellen, z.b. welche die dann ein Instance of halt komplett verarbeitet.</p>
</blockquote>
<p>Ja, ich sehe schon, das wird wohl nix. Die Frage war ja eben, &quot;Gibt es trotzdem irgend einen netten Trick, […] *ohne* einen Parser für den entsprechenden Ausdruck implementieren zu müssen?&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307320</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 16 Jun 2007 15:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 16:01:34 GMT]]></title><description><![CDATA[<p>Eigentlich müsstest du mit einem Symboltable auskommen, aber in den meisten Programmiersprachen die ich kenne, sind schlüsselwörter halt<br />
nicht kontextsensitiv, sondern gelten entsprechend. Daher wirst du wohl zumindest den tokenizer etwas aufbohren müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307324</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 16 Jun 2007 16:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 16:32:03 GMT]]></title><description><![CDATA[<p>phlox81 schrieb:</p>
<blockquote>
<p>Eigentlich müsstest du mit einem Symboltable auskommen</p>
</blockquote>
<p>Huh? Kannst du das mal erläutern? Eine Symboltabelle bringt hier doch gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307345</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 16 Jun 2007 16:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 17:01:42 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>phlox81 schrieb:</p>
<blockquote>
<p>Eigentlich müsstest du mit einem Symboltable auskommen</p>
</blockquote>
<p>Huh? Kannst du das mal erläutern? Eine Symboltabelle bringt hier doch gar nichts.</p>
</blockquote>
<p>Wenns nicht kontextsensitiv wäre <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307355</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 16 Jun 2007 17:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Lexer (Syntaxhighlighting) mit kontextsensitiven Schlüsselwörtern on Sat, 16 Jun 2007 17:07:26 GMT]]></title><description><![CDATA[<p>Ich versteh's immer noch nicht. Zum einen geht's hier gerade um die Kontextsensivität, zum anderen wäre eine Symboltabelle auch ansonsten sinnlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307357</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 16 Jun 2007 17:07:26 GMT</pubDate></item></channel></rss>