我必须采取什么步骤来建立这样的计划。
我希望有一个将简单(有限)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 "))))
但效果不佳。
那么,我必须阅读该文件的所有内容并构建一个抽象语法树? (就像翻译一样) 或者我只是逐字逐句地实现它?
答案 0 :(得分:0)
是否,我必须阅读该文件的所有内容并构建一个抽象语法树?
当然是的。
你可能希望它不仅仅是一个树,而是一些DAG。
因此,您可能希望保留源代码的几个表示形式。你可能想要几个传球。
PS。你的问题可能比你想象的更难。我会考虑一些rule-based system方法。