Quelltext mit Formatierungs- und Style-Informationen versehen

CodeCrack

Mitglied
Hallo,

ich möchte ein Programm schreiben, das einen C++-Quellcode nimmt und in einer neuen Datei speichert, dabei aber nicht die alte Formatierung übernimmt, sondern den Quelltext anhand von vozugebenden Regeln formatiert. Das Programm macht also im Wesentlichen das, was die Format-Funktion (Ctrl+Shift+F) von eclipse mit dem Code macht, soll dann aber zusätzlich Styleinformationen hinzufügen, sodass ich formatierte Quelltexte erhalte, die z.B. der tex- oder der HTML-Spezifikation entsprechen (um ein benutzerdefiniertes Syntax-Highligting bekommen).

Der erste Schritt wäre sicher, den Ursprungs-Quellcode zu parsen. Dafür habe ich schon verschiedene Ansätze ausprobiert. Ich habe überlegt, was besser wäre, die gesamte Quellcode-Datei zeilenweise einzulesen mit split() zu zerlegen und jedem Ausdruck die Information, um welche Art Ausdruck es sich handelt mitzugeben und abzuspeichern, oder ob es sinnvoll wäre, Zeichen für Zeichen zu untersuchen und nach Ausdrücken zu suchen, die meinen Kriterien entsprechen.

Im zweiten Schritt würde ich dann die gesammelten und gespeicherten Informationen auswerten und entsprechend "formatiert" (also inklusive Style-Informationen) abspeichern.

Wie würdet ihr an diese Aufgabe (vor allem im ersten Schritt) rangehen? Welche Klassen des SDK würdet ihr ggf. nutzen? Ich würde gerne (mit eurer Hilfe) erst eine ungefähre Richtung festlegen, bevor ich weitermache.

Zwei Fragen, die sich für mich ergeben haben, sind:
1. Sollte ich die Datei zeichenweise, zeilenweise oder als Ganzes verarbeiten?
2. Sollte ich, um den Quelltext in seine Bestandteile zu zerlegen, ein mehrstufiges oder ein flaches Verfahren verwenden?

Für die, die noch nicht genau wissen, was ich meine, hier ein Beispiel:
Aus folgendem Code:
C:
//---------------------------------------------------
// Game2.cpp :
// Kollisionskontrolle, Treppen und Gravitation
//---------------------------------------------------

#include "Game2.h"

//---------------------------------------------------

// Spiel initialisieren/"aufbauen"
void TGame::CreateGame (HWND GHandle)
{
  geRect   WorldScreen;    // Anzeigefläche
}

... macht mein Programm das:
Code:
<span class="preprocessor">#include "Game2.h"</span>

<span class="comment">// Spiel initialisieren/"aufbauen"</span>
<span class="keyword">void </span><span class="">TGame</span><span class="">::</span><span class="method">CreateGame</span><span class="operator">(</span><span class="">HWND </span><span class="">GHandle</span><span class="operator">) </span><span class="operator">{</span>
<tab indent=4><span class="type">geRect</span> <span class="class">WorldScreen</span><span class="operator">; </span><span class="comment">// Anzeigefläche</span>
<span class="operator">}</span>

Dies in einem Browser angezeigt, bekommt man in etwa:
C:
#include "Game2.h"

// Spiel initialisieren/"aufbauen"
void TGame::CreateGame(HWND GHandle) {
    geRect WorldScreen; // Anzeigefläche
}

Wie man an diesem Beispiel sieht, ist die Formatierung des Codes nach der Bearbeitung durch mein Programm verändert.

Ich freue mich über jeden Gedanken/Vorschlag/Idee.
 

Flown

Administrator
Mitarbeiter
Ich hab mal etwas ähnliches für JavaScript gebastelt. Es war zwar ein spezieller Highlighter für Sondefeatures, aber sollte ziemlich gleich sein.

Ich hatte einen AST mit dem Debugger Interface. Somit konnte ich die Speziellen Nodes herausholen und mit der Debugger API die Stellen raussuchen.
Wahrscheinlich ist es schlau soetwas mit ANTLR zu basteln. Ich hatte damals dafür den GraalVM Compiler zur Verfügung.
 

CodeCrack

Mitglied
Danke Flown, für deine Impulse. Allerdings sprichst du von Böhmischen Dörfern. Du hattest einen AST mit einem Debugger Interface? Was ein Debugger ist, weiß ich, aber was hat das in Kombination mit einem Interface zu bedeuten? Was ist ein "AST"? Was meinst du an dieser Stelle mit Knoten/Node? Wo konntest du das "herausholen" und was meinst du an dieser Stelle mit "herausholen"? Was eine API ist, weiß ich ebenfalls, doch auch hier wieder, ist mir die Verknüpfung mit einem Debugger unplausibel. Du schreibst, du hättest einen GraalVM Compiler für ANTLR gehabt. Was hat das eine mit dem anderen zu tun? Das erschließt sich mir - als Außenseiter - nicht von allein! Du meinst, du hattest das Framework ANTLR genutzt, um Code zu schreiben, den du dann mit dem GraalVM Compiler compiliert hast? Deine Antwort lässt mich denken, dass ich nichts weiß, außer, dass ich nichts weiß, aber eine praktische Hilfe ist das nicht.

Kann ich meine Aufgabe durchführen ohne mich zuvor in die Lage zu versetzen, einen Compiler zu programmieren?!

Edit: Wie ich gerade herausfand, ist GraalVM kein Compiler, sondern eine Alternative zur JVM. Dann stellt sich aber die Frage, was das Wort Compiler in diesem Zusammenhang bedeutet. Meinst du vielleicht Interpreter?
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Entschuldige, dass ich es nicht sehr gut formuliert habe.

Was ich gemacht habe: JavaScript-File -> GraalVM Compiler (genauer nur den Parser) -> AST (Abstract Syntax Tree) -> AST durchlaufen, die richtigen Nodes im AST suchen -> Mittels DebuggerAPI die Stelle im Quelltext suchen -> Ausgeben.

Was du benötigst ist definitiv einen Parser für die Sprache und die Verbindung wo die Knoten des AST im Quelltext sind (das macht normallerweise ein Debugger). AST durchlaufen und die Ausgabe in deinem Format tätigen.
 

CodeCrack

Mitglied
Entschuldigen? Hee, ich bin froh, dass du versuchst mir zu helfen!

Ich möchte aber eigentlich die Erfahrung machen, etwas Eigenes zu entwickeln. Allerdings will ich keinen kompletten Compiler schreiben, das wäre zu viel des Guten.

Ich will einfach nur Sprachelemente identifizieren und mit Stilinformationen für die Darstellung z.B. im Browser versehen.

Aber ich scheitere schon an der Frage, ob ein SAX-Parser prinzipiell ausreichen würde, oder ob es ein DOM-Parser sein muss.

Desweiteren wundert es mich, dass man "an jeder Ecke" XML-Parser findet, aber keinen "individuell konfigurierbaren" Parser, also einen Parser, mit dem ich beliebige Dokumente parsen kann.
 

CodeCrack

Mitglied
Uff, ganz schön aufwändig, sich da reinzuarbeiten. Aber der Ansatz gefällt mir. Trotzdem folgende Frage: Nehmen wir an, ich würde bei der Formatierung auf die Unterscheidung von Klassen und Methoden verzichten, sondern nur codestrukturierende Sonderzeichen auswerten, könnte ich dann auf eine weniger Komplexe Möglichkeit zurückgreifen, z.B. auf Reguläre Ausdrücke, oder so?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Quelltext mit komischen griechischen Zeichen Java Basics - Anfänger-Themen 4
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
S HTML-Quelltext hinter HTTPS Java Basics - Anfänger-Themen 1
D Erste Schritte Suche Quelltext Java Basics - Anfänger-Themen 7
J QuellText Frage Java Basics - Anfänger-Themen 1
X Quelltext einen Tic Tac Toe Spiels erklären Java Basics - Anfänger-Themen 4
U Website Quelltext auslesen - Javaskripte im Hintergrund? Java Basics - Anfänger-Themen 4
T Quelltext wird nicht compiliert obwohl er Fehlerfrei ist. Java Basics - Anfänger-Themen 4
O Java will mir den Quelltext nich zu Bytecode Compilieren Java Basics - Anfänger-Themen 24
J Quelltext einer Homepage auslesen Java Basics - Anfänger-Themen 14
R Problem mit Quelltext : Kommazeichen Java Basics - Anfänger-Themen 7
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
R Quelltext sachen rausfiltern Java Basics - Anfänger-Themen 16
R Input/Output Formular absenden und Quelltext auslesen Java Basics - Anfänger-Themen 5
A Komentieren von Quelltext Java Basics - Anfänger-Themen 12
D Quelltext richtig verstanden? Java Basics - Anfänger-Themen 7
E Korrekter Quelltext? Java Basics - Anfänger-Themen 17
F HttpURLConnection Fehler beim Quelltext holen Java Basics - Anfänger-Themen 6
K Erste Schritte quelltext hilfe anfänger Java Basics - Anfänger-Themen 8
M Quelltext auslesen und diesen in einen String schreiben Java Basics - Anfänger-Themen 3
G Internet-Zugriff // URL posten, Quelltext einlesen Java Basics - Anfänger-Themen 5
E Compiler-Fehler Quelltext aus Buch erzeugt Fehler Java Basics - Anfänger-Themen 3
H Methoden Problem mit get-methode im Quelltext Java Basics - Anfänger-Themen 17
B Quelltext einlesen Java Basics - Anfänger-Themen 12
L Quelltext von vorgefertigten Klassen ansehen Java Basics - Anfänger-Themen 4
StrikeTom Quelltext einer Internetseite auf JTextArea anzeigen Java Basics - Anfänger-Themen 4
K Passage im Quelltext verstehen Java Basics - Anfänger-Themen 2
M Quelltext kürzen Java Basics - Anfänger-Themen 8
F Aus UML Diagramm Quelltext Java Basics - Anfänger-Themen 7
A Quelltext Java Basics - Anfänger-Themen 21
N kommentierter Quelltext zum Üben erwünscht Java Basics - Anfänger-Themen 6
R Quelltext einfügen und kompilieren Java Basics - Anfänger-Themen 4
D Quelltext zu vereinfachen? Java Basics - Anfänger-Themen 4
G Mit Java Quelltext auf Element untersuchen. Java Basics - Anfänger-Themen 5
G Brauche ein paar erklärungen zu Quelltext Java Basics - Anfänger-Themen 5
Y Einfachen Quelltext in UML darstellen mit Eclipse Java Basics - Anfänger-Themen 8
M Quelltext - Urls filtern Java Basics - Anfänger-Themen 4
S Verständnissprobleme mit Quelltext - Make Typ Java Basics - Anfänger-Themen 13
G Quelltext von Methoden in der Klasse Math Java Basics - Anfänger-Themen 11
D Quelltext schützen ? Java Basics - Anfänger-Themen 16
M quelltext html-seite speichern + links speichern Java Basics - Anfänger-Themen 2
B NSD-Diagramme aus Java-Quelltext erstellen! Java Basics - Anfänger-Themen 3
P Quelltext nicht kompilierbar Java Basics - Anfänger-Themen 15
I translate.java - kein sichtbarer fehler im quelltext Java Basics - Anfänger-Themen 18
L Quelltext problem Java Basics - Anfänger-Themen 46
G Quelltext compilieren und öffnen Java Basics - Anfänger-Themen 11
M Quelltext vom Applet Java Basics - Anfänger-Themen 20
M brauche hilfe mit folgendem quelltext Java Basics - Anfänger-Themen 7
V Quelltext einer Homepage einlesen Java Basics - Anfänger-Themen 12
N Quelltext durchsuchen ggfls Alarm schlagen. Java Basics - Anfänger-Themen 29
L quelltext kompilieren Java Basics - Anfänger-Themen 2
G eigenen Quelltext ausgeben Java Basics - Anfänger-Themen 8
G Html Quelltext auslesen der passwortgeschützt ist Java Basics - Anfänger-Themen 4
R Quelltext einer HTML-Seite auslesen Java Basics - Anfänger-Themen 2
M Wo liegt der Quelltext von System.out.println() Java Basics - Anfänger-Themen 3
M Handy Programm, kompletter Quelltext.Methodische Fehler? Java Basics - Anfänger-Themen 3
S Quelltext mit Fehlern Java Basics - Anfänger-Themen 12
U Abkürzung in Quelltext :(( Java Basics - Anfänger-Themen 7
M Datei Einlesen Fortan-Style? Java Basics - Anfänger-Themen 3
D nur JOptionPane im Windows Style Java Basics - Anfänger-Themen 3
G JProgressBar - XP style Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben