如何将源代码解析成英文?

时间:2017-12-09 06:47:20

标签: parsing common-lisp

我必须采取什么步骤来建立这样的计划。

我希望有一个将简单(有限)java关键字带入英语人类语言的程序。

e.g

public class HelloWorld {

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

}

宣布HelloWorld班级 声明主要方法
声明变量x
声明变量y
打印“Hello,World”字样 关闭花括号
关闭花括号

程序将逐行读取源代码。

  • 我尝试使用cl-ppcre,但问题是,我无法弄明白,如何对temp进行说法。

    e.g

    声明HelloWord然后添加“class”字。

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

但效果不佳。

那么,我必须阅读该文件的所有内容并构建一个抽象语法树? (就像翻译一样) 或者我只是逐字逐句地实现它?

1 个答案:

答案 0 :(得分:0)

  

是否,我必须阅读该文件的所有内容并构建一个抽象语法树?

当然是的。

你可能希望它不仅仅是一个,而是一些DAG

因此,您可能希望保留源代码的几个表示形式。你可能想要几个传球。

PS。你的问题可能比你想象的更难。我会考虑一些rule-based system方法。