Was ist ein geeigneter Lexer Generator, dass ich Identifikatoren Streifen aus vielen Sprachquelldateien verwenden kann?

StackOverflow https://stackoverflow.com/questions/2120026

  •  22-09-2019
  •  | 
  •  

Frage

Ich arbeite an einem Gruppenprojekt für meine Universität, die für Plagiaterkennung in der Informatik verwendet werden wird.

Meine Fraktion wird aus in erster Linie das Hashing / Fingerabdrücke beschriebenen Techniken in diesem Fachartikel: Worfelnd: Lokale Algorithms for Document Fingerprinting . Dies ist sehr ähnlich wie das MOSS Plagiat Detektionssystem funktioniert.

Wir sind im Grunde nehmen k-Gramm-Hashes von Kommilitonen Quellcode und suchen sie nach relevanten Treffern in einer Datenbank (zusammen mit vielen Optimierung, wie wir bestimmen, welche als Dokument Fingerabdrücke wählen Hashes).

Der erste Aspekt unseres Projektes ist der „Front-End“ Teil davon, was eine gewisses semantisches Wissen über jedes Dateiformat verarbeiten kann unser Erfassungssystem halten wird. Dies ermöglicht es uns, einige Details aus dem Dokument strippen, dass wir nicht mehr zum Zweck der Plagiaterkennung sollen. Grundsätzlich wollen wir in der Lage sein, alle Variablen in verschiedenen Programmiersprachen auf einen konstanten String oder Brief zu benennen.

Was ist eine leichte Lösung (Lexer Generator oder so ähnlich), dass wir in der Umbenennung alle Variablen in verschiedenen Sprachen Quellcodedateien zu Konstanten unterstützen verwenden können?

Unser Projekt wird in Java geschrieben.

Im Idealfall würde ich einfach gerne in der Lage sein, eine Grammatik für jede Sprache zu definieren und dann unser Frontend wird in der Lage sein Umbenennungs all Bezeichner in dieser Sprachen Quelldatei eine Konstante. Wir würden dann tun Sie dies für jedes Dateiformat wir Unterstützung (Java, C ++, Python, etc.) gesucht.

War es hilfreich?

Lösung

Für einen Lexer / Parser-Generator, sollten Sie bei ANTLR suchen. TXL, die eine textuelle Transformation Interpreter ist, ist auch ein Blick wert. Fertige Grammatiken sollten für beide zur Verfügung stehen.

Andere Tipps

Neben ANTLR, die bereits vorgeschlagen wurde, können Sie auch einen Blick auf JFlex .

Bitte beachten Sie, dass es einige Sprachen, in denen es nicht wirklich möglich ist, zu tun, was Sie versuchen zu tun. Insbesondere bestimmen diejenigen, bei denen es nicht möglich ist, was ist oder nicht, eine Variable auf der Grammatik basiert. Tcl ist ein Beispiel für eine solche, aber es gibt eine Reihe von dynamischen Sprachen, die das gleiche Problem (Lisp?) Haben.

Akazien lex Lexer hat Methode ersetzen.

In Lexer Token zu definieren, was aussieht wie Identifikatoren,   zum Beispiel "Ident1" -> "[A..D]", "ident2." -> "[e..h]"

ersetzt Methode Eingangskarte liefert die Informationen, die Kennung Typen, mit der konstanten (Objekt) zu ersetzen,   zum Beispiel "Ident1" -> "Ident1", "ident2" -> "ident2".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top