2017-12-09 25 views
-1

このようなプログラムを構築するためにはどのようなステップが必要ですか。ソースコードを英語に解析するには?

単純な(限定された)javaキーワードを英語の人間の言語に変換するプログラムが必要です。

例えば

public class HelloWorld { 

public static void main(String[] args) { 
    int x; 
    int y; 
    System.out.println("Hello, World"); 
} 

} 

には、変数x
は、変数y
印刷する単語の "Hello、World" の
を閉じる宣言したHelloWorldクラスが
宣言し、mainメソッド
宣言宣言します中括弧
中かっこを閉じる

プログラムはソースコードを1行ずつ読み込みます。

  • 私はcl-ppcreを使用してみましたが、問題は一時に単語を取るためにどのように、私はそれを把握するカント、です。

    例えば

    その後、 "クラス" という単語を追加HelloWordを宣言します。

    ないDeclare class HelloWorld、私はDeclare Helloworld class

  • をしたいか、それを置き換えることは困難です ");"印刷の終わりに別の単語を置き換える必要があるためです。

私はライン

(with-open-file (input "~/test.java") 
    (loop for line = (read-line input nil) 
     while line do (format t "~a~%" (parse-laporan line)))) 

でラインを読み、

(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 ")))) 

それを解析しようとしたが、それはうまく動作しません。

ファイルのすべての内容を読み込んで、抽象構文木を構築する必要がありますか? (通訳のように) とか、私は単語を単語で置き換えるだけで達成できますか?

+0

AntónioMenezesLeitãoと[プレゼンテーションスライド](https://github.com/xach/linj/blob/master/)の[lintj](https://github.com/xach/linj)という非常に興味深いプロジェクトです。 doc/java-for-lispers.pdf) – azzamsa

+1

あなたのコードで何をしているかは、 '解析'とは関係ありません。テキストパターンを各行の文字列に置き換えるだけです。 –

+0

はい、そうです。私のレポには「解析する」名前は何も付いていません。私はこの考えを中断しなければならない。 'awk'や' RegEx'のように、ここで言葉を置き換えるだけで達成できると思います。しかし、[Basile Starynkevitch](https://stackoverflow.com/a/47726100/6000005)のように、「あなたの問題はおそらく想像以上に難しい」と述べています。私はそれが正しいと思う。だから私はPCLとPAIPを終えた後、このアイディアに戻ります。 – azzamsa

答えて

0

ファイルのすべての内容を読み込んで、抽象構文木を構築する必要がありますか?

もちろんです。

そしておそらくそれは単にツリーではなく、DAGであることが必要です。

したがって、には、ソースコードの表現をいくつかにすることをお勧めします。あなたはをいくつかにすることができます。

PS。あなたの問題は想像以上に難しいでしょう。私はいくつか考えてみましょうrule-based systemアプローチ。

関連する問題