Welchen Schritt muss ich machen, um ein solches Programm zu erstellen.Wie parse Quellcode in Englisch?
Ich möchte ein Programm haben, das ein einfaches (begrenztes) Java-Schlüsselwort in die englische menschliche Sprache aufnimmt.
zB
public class HelloWorld {
public static void main(String[] args) {
int x;
int y;
System.out.println("Hello, World");
}
}
zu
Deklarieren Hello World Class
wichtigste Methode deklarieren
Deklarieren Variable x
Variable y
Drucken Deklarieren Sie das Wort "Hallo, Welt"
Schließen geschweifte Klammern
Schließen geschweifte Klammern
Das Programm liest den Quellcode Zeile für Zeile.
Ich versuchte
cl-ppcre
verwenden, aber das Problem ist, ich kann es nicht herausfinden, wie man ein Wort Temp zu nehmen.beispiels
Declare
HelloWord
fügen Sie dann "Klasse" Wort.nicht
Declare class HelloWorld
, aber ich willDeclare Helloworld class
oder es schwierig ist, zu ersetzen ");" am Ende des Druckes. Weil ein anderes Wort ersetzt werden muss.
Ich habe versucht, Zeile für Zeile
(with-open-file (input "~/test.java")
(loop for line = (read-line input nil)
while line do (format t "~a~%" (parse-laporan line))))
zu lesen und es
(defun parse-laporan (isi)
(cond
((cl-ppcre:scan "int " isi)
(cl-ppcre:regex-replace "int" isi "Declare variable"))
((cl-ppcre:scan "System.out.print+" isi)
(cl-ppcre:regex-replace "System.out.print+" isi "print word "))
((cl-ppcre:scan "System.out.println+" isi)
(cl-ppcre:regex-replace "System.out.println+" isi "print word "))
((cl-ppcre:scan "(" isi)
(cl-ppcre:regex-replace "()" isi " "))
((cl-ppcre:scan "public class" isi)
(cl-ppcre:regex-replace "public class" isi "Declare Kelas "))))
analysieren, aber es funktioniert nicht gut.
Muss ich den gesamten Inhalt der Datei lesen und einen Abstract Syntax Tree erstellen? (wie ein Dolmetscher tut) oder kann ich es nur erreichen, indem ich Wort für Wort ersetze?
sehr interessantes Projekt, [Lintj] (https://github.com/xach/linj) von António Menezes Leitão und es ist [Präsentation Folie] (https://github.com/xach/linj/blob/master/ doc/java-for-lispers.pdf) – azzamsa
Was Sie in Ihrem Code tun, hat nichts mit 'Parsen' zu tun. Sie müssen lediglich ein Textmuster durch eine Zeichenfolge für jede Zeile ersetzen. –
Ja, das stimmt. so dass ich in meinem Repo keinen "Parse" Namen gebe. Ich muss diese Idee aussetzen. Ich denke, ich kann es erreichen, indem ich hier und da nur das Wort "awk" oder "RegEx" vertausche. Aber als [Basile Starynkevitch] (https://Stackoverflow.com/a/47726100/6000005) sagte: "Dein Problem ist wahrscheinlich härter als das, was du dir vorstellst". Ich denke, es ist richtig. Ich werde auf diese Idee zurückkommen, nachdem ich PCL und PAIP beendet habe. – azzamsa