it-swarm.dev

Einfache Methode zur zuverlässigen Erkennung von Code im Text?

GMail verfügt über diese Funktion, mit der Sie gewarnt werden, wenn Sie versuchen, eine E-Mail zu senden, dass denkt möglicherweise einen Anhang enthält.

Did you mean to attach files?

Weil GMail die Zeichenfolge see the attached in der E-Mail, aber ohne tatsächlichen Anhang, warnt es mich mit einem OK/Abbrechen-Dialogfeld, wenn ich auf die Schaltfläche Senden klicke.

Wir haben ein ähnliches Problem mit dem Stapelüberlauf. Das heißt, wenn ein Benutzer einen Beitrag eingibt wie dieser :

 Mein Problem ist, dass ich die Datenbank ändern muss, aber keine 
 neue Verbindung herstellen möchte. Beispiel: 
 
 DataSet dsMasterInfo = new DataSet (); 
 Database db = DatabaseFactory.CreateDatabase ("ConnectionString"); 
 DbCommand dbCommand = db.GetStoredProcCommand (" uspGetMasterName "); 

Dieser Benutzer hat seinen Code nicht als Code ! formatiert.

Das heißt, sie haben nicht um 4 Leerzeichen pro Markdown eingerückt oder die Codetaste (oder die Tastenkombination) verwendet ctrl+k) was das für sie tut.

Daher akzeptiert unser System viele Änderungen, bei denen Benutzer Code für Personen manuell formatieren müssen, die dies irgendwie nicht herausfinden können. Dies führt zu viel Bauchschmerzen . Wir haben die Editor-Hilfe mehrmals verbessert, aber wenn wir nicht zum Haus des Benutzers fahren und die richtigen Tasten auf der Tastatur drücken, können wir nicht sehen, was als nächstes zu tun ist.

Aus diesem Grund erwägen wir eine Warnung im Google GMail-Stil:

Wollten Sie eine Postleitzahl schreiben?

Sie haben Dinge geschrieben, von denen wir glauben, dass sie wie Code aussehen, aber Sie haben sie nicht als Code formatiert, indem Sie 4 Leerzeichen mit der Symbolleisten-Code-Schaltfläche oder der Schaltfläche eingerückt haben ctrl+k Code-Formatierungsbefehl.

Um diese Warnung anzuzeigen, müssen wir jedoch feststellen, ob in einer Frage unformatierter Code vorhanden ist. Was ist eine einfache, halbzuverlässige Methode, um dies zu tun?

  • Per Markdown wird der Code immer um 4 Leerzeichen oder innerhalb von Backticks eingerückt, sodass alles, was korrekt formatiert ist, sofort aus der Prüfung entfernt werden kann.
  • Dies ist nur eine Warnung und gilt nur für Benutzer mit geringer Reputation, die ihre ersten Fragen stellen (oder ihre ersten Antworten geben). Daher sind einige Fehlalarme in Ordnung, solange sie ungefähr 5 sind % oder weniger.
  • Fragen zum Stapelüberlauf können in der Sprache any sein, obwohl wir unsere Prüfung realistisch auf beispielsweise die "großen zehn" Sprachen beschränken können. Auf der Tag-Seite wären dies C #, Java, PHP, JavaScript, Objective-C, C, C++, Python, Ruby.
  • Verwenden Sie Creative Commons Data Dump für Stapelüberlauf , um Ihre potenzielle Lösung zu prüfen (oder wählen Sie einfach ein paar Fragen in Top 10 Tags für Stapelüberlauf aus) und sehen Sie, wie dies funktioniert.
  • Pseudocode ist in Ordnung, aber wir verwenden c #, wenn Sie besonders freundlich sein möchten.
  • Je einfacher desto besser (solange es funktioniert). KUSS! Wenn Ihre Lösung erfordert, dass wir versuchen, Beiträge in 10 verschiedenen Compilern zu kompilieren, oder eine Armee von Menschen, um eine Bayes'sche Inferenzmaschine manuell zu trainieren, ist das ... nicht genau das, was wir uns vorgestellt haben.
144
Jeff Atwood

Eine richtige Lösung wäre wahrscheinlich ein erlerntes/statistisches Modell, aber hier sind einige lustige Ideen:

  1. Semikolons am Ende einer Zeile . Dies allein würde eine ganze Reihe von Sprachen erfassen.
  2. Klammern direkt nach dem Text ohne Leerzeichen zum Trennen: myFunc()
  3. Ein Punkt oder Pfeil zwischen zwei Wörtern: foo.bar = ptr->val
  4. Vorhandensein von geschweiften Klammern, Klammern: while (true) { bar[i]; }
  5. Vorhandensein der "Kommentar" -Syntax (/ *, // usw.): /* multi-line comment */
  6. Gelegentliche Zeichen/Operatoren: +, *, &, &&, |, ||, <, >, ==, !=, >=, <=, >>, <<, ::, __
  7. Führen Sie Ihren Syntax-Textmarker für den Text aus. Wenn es am Ende einen hohen Prozentsatz davon hervorhebt, ist es wahrscheinlich Code.
  8. camelCase Text im Beitrag.
  9. verschachtelte Klammern, Klammern und/oder Klammern.

Man könnte verfolgen, wie oft jede dieser Erscheinungen auftritt, und diese könnten als Merkmale in einem Algorithmus für maschinelles Lernen wie Perceptron verwendet werden, wie es SpamAssassin tut.

148

Ich wäre gespannt, wie hoch die durchschnittlichen Metriken für geschriebenes Englisch auf der einen Seite und Code auf der anderen Seite sind.

  • länge der Absätze
  • länge der Zeilen
  • größe der Wörter
  • zeichen verwendet
  • verhältnis zwischen alphabetischen, numerischen und anderen Symbolzeichen
  • anzahl der Symbole pro Wort
  • usw.

Vielleicht könnte das allein schon zwischen Code und dem Rest unterscheiden. Zumindest glaube ich, dass Code unabhängig von der Sprache in vielen Fällen einige merklich unterschiedliche Metriken aufweist.

Die gute Nachricht ist: Sie haben bereits viele Daten, auf denen Sie Ihre Statistiken aufbauen können.


Ok, ich bin mit einigen Daten zurück, um meine Annahmen zu stützen. :-)

Ich habe einen schnellen und schmutzigen Test für Ihren eigenen Beitrag und für den ersten Beitrag, den ich bei StackOverflow gefunden habe mit einem ziemlich fortgeschrittenen Tool durchgeführt: wc.

Folgendes hatte ich, nachdem ich wc im Textteil und im Codeteil dieser beiden Beispiele ausgeführt hatte:

Schauen wir uns zuerst den englischen Teil an :

  • Der englische Teil Ihres Beitrags (2635 Zeichen, 468 Wörter, 32 Zeilen)
    • 5 Zeichen/Wort, 82 Zeichen/Zeile, 14 Wörter/Zeile
  • Der englische Teil des anderen Beitrags (1499 Zeichen, 237 Wörter, 12 Zeilen)
    • 6 Zeichen/Wort, 124 Zeichen/Zeile, 19 Wörter/Zeile

Ziemlich ähnlich, findest du nicht?

Schauen wir uns nun den Code-Teil an!

  • Der Codeteil Ihres Beitrags (174 Zeichen, 13 Wörter, 3 Zeilen)
    • 13 Zeichen/Wort, 58 Zeichen/Zeile, 4 Wörter/Zeile
  • Der Codeteil des anderen Beitrags (4181 Zeichen, 287 Wörter, 151 Zeilen)
    • 14 Zeichen/Wort, 27 Zeichen/Zeile, 2 Wörter/Zeile

Sehen Sie, wie unterschiedlich diese Metriken nicht so unterschiedlich sind, aber was noch wichtiger ist, wie unterschiedlich sie von den englischen Metriken sind? Und dies ist nur ein begrenztes Werkzeug. Ich bin mir jetzt sicher, dass Sie etwas wirklich Genaues erreichen können, indem Sie mehr Metriken messen (ich denke insbesondere an Zeichenstatistiken).

Ich kann Kekse Haz?

54

Typischerweise werden Markov-Ketten verwendet, um Text zu erzeugen, aber sie können auch verwendet werden, um die Ähnlichkeit von Text (per C.E. Shannon 195 ) mit einem trainierten Modell vorherzusagen. Ich empfehle mehrere Markov-Ketten.

Trainieren Sie für jede vorherrschende Sprache eine Markov-Kette an einer großen, repräsentativen Stichprobe von Code in der Sprache. Führen Sie dann für einen Stapelüberlaufpfosten, für den Sie Code erkennen möchten, die folgenden Schritte für jede der Ketten aus:

  • Schleife durch die Zeilen in der Post.
    • Deklarieren Sie zwei Variablen: ACTUAL = 1.0 und HIGHEST = 1.0
    • Durchlaufen Sie jedes Zeichen in der Zeile.
      • Bestimmen Sie für jedes Zeichen die Wahrscheinlichkeit in der Markov-Kette, dass das aktuelle Zeichen dasjenige ist, das den vorherigen N Zeichen folgt. Setzen Sie ACTUAL = ACTUAL * PROB1. Wenn das aktuelle Zeichen nicht in der Kette vorhanden ist, verwenden Sie einen winzigen Wert für PROB1wie 0,000001.
      • Finden Sie nun das Zeichen, das am wahrscheinlichsten (d. H. Mit der höchsten Wahrscheinlichkeit) den vorherigen N Zeichen folgt. Setze HIGHEST = HIGHEST * PROB2.
      • Offensichtlich PROB2 > = PROB1

Für jede Zeile sollten Sie einen IST- und einen HÖCHSTEN Wert haben. Teilen Sie IST durch HÖCHSTES. Dadurch erhalten Sie den Fitness-Score, ob eine bestimmte Zeile Quellcode ist. Das würde jeder Zeile in dem Beispiel, das Sie gegeben haben, eine Zahl zuordnen:

my problem is I need to change the database but I don't won't to create // 0.0032
a new connection. example: // 0.0023

DataSet dsMasterInfo = new DataSet(); // 0.04
Database db = DatabaseFactory.CreateDatabase("ConnectionString");   // 0.05
DbCommand dbCommand = db.GetStoredProcCommand("uspGetMasterName");  // 0.04

Schließlich müssen Sie einen Schwellenwert auswählen, um festzustellen, wann der Beitrag Code enthält. Dies könnte einfach eine durch Beobachtung ausgewählte Zahl sein, die eine hohe Leistung ergibt. Es könnte auch die Anzahl der Zeilen mit einer hohen Punktzahl berücksichtigen.

Training

Besorgen Sie sich zum Trainieren ein großes, repräsentatives Codebeispiel in der Sprache. Schreiben Sie ein Programm, um den Codetext zu durchlaufen und jedes N-Gramm in der Datei (der Bereich für N sollte parametrisiert werden) mit der statistischen Häufigkeit des nachfolgenden Zeichens zu verknüpfen. Dies ergibt mehrere mögliche Zustände von Zeichen, die dem Bigram folgen und jeweils einer Wahrscheinlichkeit zugeordnet sind. Zum Beispiel könnte das Bigram "()" einige folgende Zeichenwahrscheinlichkeiten haben:

"()" 0.5-> ";"
"()" 0.2-> "."
"()" 0.3-> "{"

Das erste sollte beispielsweise als "Die Wahrscheinlichkeit, dass ein Semikolon auf eine leere Klammer folgt, beträgt 0,5" gelesen werden.

Für das Training empfehle ich N-Gramm der Größen zwei bis fünf. Damals, als ich darüber recherchierte , fanden wir, dass N-Gramm der Größen zwei bis fünf gut für Englisch funktionieren. Da ein Großteil des Quellcodes englisch ist, würde ich empfehlen, mit diesem Bereich zu beginnen und dann anzupassen, um die optimalen Parameterwerte zu finden, sobald Sie herausfinden, was funktioniert.

Eine Einschränkung: Das Modell wird durch Bezeichner, Methodennamen, Leerzeichen usw. beeinflusst. Sie können das Training jedoch so einstellen, dass bestimmte Funktionen des Trainingsbeispiels weggelassen werden. Beispielsweise könnten Sie alle unnötigen Leerzeichen reduzieren. Das Vorhandensein von Leerzeichen in der Eingabe (der Stapelüberlauf-Beitrag) kann ebenfalls ignoriert werden. Sie können auch die alphabetische Groß- und Kleinschreibung ignorieren, die angesichts unterschiedlicher Namenskonventionen für Bezeichner widerstandsfähiger wäre.

Während meine Forschung fanden wir heraus, dass unsere Methoden sowohl für Spanisch als auch für Englisch gut funktionierten. Ich verstehe nicht, warum dies nicht auch für Quellcode gut funktionieren würde. Der Quellcode ist noch strukturierter und vorhersehbarer als die menschliche Sprache.

23
Matthew Rodatus

Darf ich einen radikal anderen Ansatz vorschlagen? On SO die einzige erlaubte menschliche Sprache ist Englisch, also alles, was nicht Englisch ist, hat 99,9% der Chancen, ein Code-Snippet zu sein.

Meine Lösung wäre also: Verwenden Sie einen der vielen englischen Sprachprüfer (stellen Sie nur sicher, dass sie - neben Rechtschreibfehlern - auch Syntaxfehler wie Doppelpunkte oder nichtsprachliche Symbole wie # Oder ~). Dann sollte jede Zeile/jeder Absatz, die eine große Anzahl von Fehlern und Warnungen auslöst, das "Ist dieser Code?" Auslösen. Frage.

Dieser Ansatz kann natürlich auch für StackExchange-Sites angepasst werden, die andere Sprachen als Englisch verwenden.

Nur meine 2 ¢ ...

13
mac

Pseudocode wäre eine echte Herausforderung, da alle Programmiersprachen von Sonderzeichen wie '[]', ';', '()' usw. abhängen. Zählen Sie einfach das Auftreten dieser Sonderzeichen. Genau wie Sie eine Binärdatei erkennen würden (mehr als 5% eines Beispiels enthalten den Bytewert 0).

11
Ivo Limmen

Ich werde wahrscheinlich ein paar Stimmen dafür bekommen, aber ich denke, Sie nähern sich dem aus dem falschen Blickwinkel.

Diese Zeile hat mich:

leute müssen hineingehen und Code für Leute manuell formatieren, die das irgendwie nicht herausfinden können

IMO ist dieser Standpunkt irgendwie arrogant. Ich finde das sehr oft im Software-Design, wo Programmierer und Designer sich über Benutzer ärgern, die nicht herausfinden können, wie man die Software richtig verwendet, wenn das Problem nicht der Benutzer ist, sondern die Software selbst - oder zumindest die Benutzeroberfläche.

Die Hauptursache für dieses Problem ist nicht der Benutzer, sondern die Tatsache, dass es für sie nicht offensichtlich ist, dass sie dies tun können.

Wie wäre es mit einer Änderung der Benutzeroberfläche, um dies deutlicher zu machen? Sicher wird dies sein:

  1. für neue Benutzer ist es offensichtlicher, was sie genau tun müssen
  2. es ist für Sie einfacher zu erstellen, als komplexe Algorithmen zu schreiben, um die Codelogik einer Vielzahl von Sprachen zu erkennen

Beispiel:

enter image description here

11
matt_asbury

Ich denke, Sie müssen dies möglicherweise nur auf bestimmte Sprachen ausrichten. Im Allgemeinen ist dieses Problem wahrscheinlich nicht zu lösen, da Sie Sprachen erhalten können, die Englisch ziemlich ähnlich sind (z. B. inform7 ). aber zum Glück konnten die am häufigsten verwendeten ziemlich leicht abgedeckt werden.

Mein erster Schnitt wäre, nach der Sequenz ";\n" zu suchen, mit der Sie gut zu C, C++, Java, C # und jeder anderen Sprache passen, die eine ähnliche Syntax verwendet und wirklich einfach ist. Es ist auch weniger wahrscheinlich, auf Englisch verwendet zu werden als a; ohne Zeilenumbruch

4
jk.

Jemand erwähnte, dass er sich die Tags ansah und dann nach der Syntax dafür suchte, aber das wurde abgeschossen, weil dies für neue Benutzer gedacht ist.

Eine mögliche bessere Lösung wäre, im Hauptteil der Frage nach Sprachnamen zu suchen und dann dieselbe Strategie anzuwenden. Wenn ich "Javascript", "Java" oder "C #" erwähne, ist es wahrscheinlich, dass es darum geht, und Code in der Frage ist wahrscheinlich in dieser Sprache.

4
Omar Kooheji

Führen Sie zunächst die Rechtschreibprüfung durch. Es werden nur sehr wenige richtige englische Wörter gefunden. Es sollten jedoch viele Wörter vorhanden sein, die die Rechtschreibprüfung zum Teilen vorschlägt.

Dann gibt es Satzzeichen/Sonderzeichen, die nicht typisch für einfaches Englisch sind, typisch für Code:

  • something(); kann einfach kein einfaches Englisch sein;
  • $something wobei something nicht nur numerisch ist;
  • -> zwischen Wörtern ohne Leerzeichen;
  • . zwischen Wörtern ohne Leerzeichen;

Damit es gut funktioniert, sollten Sie natürlich einen Bayes'schen Klassifikator auf diesen Eigenschaften aufbauen lassen.

1
vartec

es gibt mehrere Sprachen, die eine ähnliche Syntax haben. Die meisten Sprachen wurden von einigen Sprachen beeinflusst, daher die Sprachen [AMPL, AWK, csh, C++, C--, C #, Ziel-C, BitC, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Pike, Processing [wurden alle von C beeinflusst. Wenn Sie also C erkennen, werden Sie wahrscheinlich alle diese Sprachen erkennen. Sie müssen also nur ein einfaches Muster schreiben, um diese Sprachsätze zu erkennen.

ich würde den Text auch in Blöcke aufteilen, da der meiste Code durch zwei Zeilenumbrüche oder ähnliches aus den anderen Textblöcken im Beitrag geteilt wird.

dies kann einfach mit Javascript durchgeführt werden (ein sehr einfaches unvollständiges Beispiel für die c-Familie):

var txt = "my problem is I need to change the database but I don't won't to create a new connection. example:\n\nDataSet dsMasterInfo = new DataSet();Database db = DatabaseFactory.CreateDatabase(&quot;ConnectionString&quot;);DbCommand dbCommand = db.GetStoredProcCommand(&quot;uspGetMasterName&quot;);";
var blocks = txt.split(/\n\n/gi); console.dir(blocks);
var i = blocks.length;
var cReg = /if\s*\(.+?\)|.*(?:int|char|string|short|long).*?=.+|while\s*\(.+?\)/gi;

while ( i-- ){
   var current = blocks[i];
   if ( cReg.test( current ) ){
      console.log("found code in block[" +  i + "]");
   }
}
1

Was möglicherweise am zukunftssichersten ist und auf lange Sicht die geringste manuelle Anpassung erfordert, da andere Sprachen (die etwas anders aussehen als die derzeit am häufigsten verwendeten Programmiersprachen) populärer werden und die derzeit verwendeten Sprachen weniger populär werden, ist zu tun so etwas wie was Google Translate macht (siehe den Absatz mit dem Titel "Wie funktioniert es?"), anstatt nach bestimmten Dingen wie ab und a () usw. zu suchen.

Mit anderen Worten, anstatt manuell an Muster zu denken, nach denen im Code gesucht werden muss , kann der Computer dies selbst herausfinden . Dies kann durch haben

  1. viel Code in vielen verschiedenen Programmiersprachen

    • Vorschlag: Nehmen Sie automatisch Codebeispiele aus webbasierten Quellcode-Repositorys wie Google Code oder Github oder sogar aus Dingen in Stackoverflow, die bereits als Code markiert sind

    • Hinweis: Es kann eine gute Idee sein, Codekommentare zu analysieren

  2. viel englischer Text aus Artikeln im Web

    • obwohl nicht aus Artikeln über Programmierung (sonst könnten sie Code enthalten und das System verwechseln :-))

und eine Art Algorithmus haben automatisch Muster im Code finden, die nicht auf Englisch sind, und umgekehrt, und diese Muster verwenden, um zu erkennen, was Code ist und was nicht, indem der Algorithmus ausgeführt wird auf Beiträge.

(Ich bin mir jedoch nicht sicher, wie ein solcher Algorithmus funktionieren würde. Andere Antworten auf die aktuelle Frage können nützliche Informationen dafür enthalten.)

Dann kann das System den Code von Zeit zu Zeit erneut scannen, um Änderungen in der Darstellung des Codes zu diesem Zeitpunkt zu berücksichtigen.

0
Abbafei

Zählen Sie einfach Wörter/Satzzeichen für jede Zeile. Englisch hat normalerweise 4 oder mehr, Code weniger als 2.

Der obige Absatz enthält beispielsweise 18 Wörter und 4 Satzzeichen. Dieser Absatz enthält 19 Wörter und 4 Satzzeichen, also innerhalb der Erwartungen.

Natürlich müsste dies gegen Fragen von Neulingen getestet werden, die schlecht Englisch sprechen, und es kann sein, dass in diesen Fällen die Statistiken verzerrt sind.

Ich gehe davon aus, dass [Nicht-Leerzeichen]. [Leerzeichen oder Zeilenumbruch] im Code sehr selten ist, im Englischen jedoch häufig vorkommt, sodass dies als Wörter und nicht als Interpunktion gezählt werden kann.

Ich denke, das größte Problem wird Inline-Code sein, bei dem jemand eine Frage stellt wie:

Wenn ich für (i = 0; i> 100; i ++) {} sage, was bedeutet das?

Das ist Code und Englisch und sollte wie mit Back-Ticks gekennzeichnet werden:

Wenn ich for (i=0; i>100; i++) {} sage, was bedeutet das?

0
rjmunro

Ich denke, Sie sollten zuerst zwischen (ausreichend) formatiertem Code, der nur tatsächlich als solcher gekennzeichnet werden muss, und (zu) schlecht formatiertem Code, der ohnehin manuell formatiert werden muss, unterscheiden.

Formatierter Code weist Unterbrechungen und Einrückungen auf. Das heißt: Wenn vor einer Zeile eine einzelne Unterbrechungslinie steht, haben Sie einen guten Kandidaten. Wenn es darüber hinaus führende Leerzeichen gibt, haben Sie einen sehr guten Kandidaten.

Normaler Text verwendet zwei Unterbrechungslinien oder zwei Leerzeichen und eine Unterbrechungslinie für die Formatierung, sodass es ein klares Unterscheidungskriterium gibt.

Im LISP-Code finden Sie keine Semikolons, im Ruby-Code finden Sie möglicherweise keine Klammern, im Pseudocode finden Sie möglicherweise überhaupt nicht viel. Aber in jeder (nicht esoterischen) Sprache finden Sie Anständiger Code, der mit Bruchkanten und Einrückungen formatiert werden muss. Nichts ist so universell wie das. Denn am Ende ist Code so geschrieben, dass er von Menschen gelesen werden kann.

Also zuerst Suche nach potenziellen Codezeilen . Außerdem kommen Codezeilen normalerweise in Gruppen vor. Wenn Sie eine haben, besteht eine gute Chance, dass die darüber oder darunter auch eine Codezeile ist.

Sobald Sie potenzielle Codezeilen herausgegriffen haben, können Sie überprüfen Sie sie anhand quantifizierbarer Kriterien und wählen Sie einen Schwellenwert aus:

  • häufigkeit von Nicht-Wort-Zeichen
  • häufigkeit von Bezeichnern: sehr kurze oder sehr lange Wörter im CamelCase- oder under_score-Stil
  • wiederholung ungewöhnlicher Wörter

Da es jetzt Programmierer und cs gibt, ist der Umfang des Stackoverflow deutlich eingeschränkt. Man könnte in Betracht ziehen, alle Sprach-Tags als Sprachen zu bezeichnen. Und wenn Sie etwas posten, werden Sie aufgefordert, entweder mindestens ein Sprach-Tag auszuwählen und das language-agnostic tag oder explizit weglassen.

Im ersten Fall wissen Sie, nach welchen Sprachen Sie suchen müssen, im zweiten Fall möchten Sie möglicherweise nach Pseudocode suchen, und im letzten Fall gibt es wahrscheinlich keinen Code, da es sich um eine Frage handelt, die sich auf eine Technologie bezieht oder Rahmen oder so.

0
back2dos

Sie können einen Parser für jede Sprache erstellen, die Sie erkennen möchten (Sprachdefinitionen für ANTLR sind normalerweise leicht zu finden), und dann jede Zeile der Frage durch jeden Parser führen. Wenn eine Zeile korrekt analysiert wird, haben Sie wahrscheinlich Code.

Das Problem dabei ist, dass einige englische Sätze (natürliche Sprache) möglicherweise als Code analysiert werden. Daher möchten Sie möglicherweise auch einige der anderen Ideen einbeziehen, oder Sie können positive Ergebnisse nur einschränken, wenn mehr als eine oder zwei aufeinanderfolgende Zeilen korrekt analysiert werden der gleiche Sprachparser.

Das andere mögliche Problem ist, dass dies wahrscheinlich keinen Pseudocode aufnimmt, aber das kann in Ordnung sein.

0
Jeff Knecht