Parsing 如何将源代码解析为英语?

Parsing 如何将源代码解析为英语?,parsing,common-lisp,Parsing,Common Lisp,我必须采取什么步骤来建立这样的计划 我想有一个程序,将一个简单(有限)的java关键字转换成英语人类语言 e、 g 至 声明HelloWorld类 声明主方法 声明变量x 声明变量y 打印单词“你好,世界” 闭合花括号 闭花括号 程序将逐行读取源代码 我试着使用cl-ppcre,但问题是,我想不出该如何把一个词带到temp e、 g 声明HelloWord,然后添加“class”单词 不是声明类HelloWorld,而是声明HelloWorld类 或者,很难在打印结束时替换“;”。因为另一个词

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

我想有一个程序,将一个简单(有限)的java关键字转换成英语人类语言

e、 g

声明HelloWorld类
声明主方法
声明变量x
声明变量y
打印单词“你好,世界”
闭合花括号
闭花括号

程序将逐行读取源代码

  • 我试着使用
    cl-ppcre
    ,但问题是,我想不出该如何把一个词带到temp

    e、 g

    声明
    HelloWord
    ,然后添加“class”单词

    不是
    声明类HelloWorld
    ,而是
    声明HelloWorld类

  • 或者,很难在打印结束时替换“;”。因为另一个词必须被替换

我试着逐行阅读

(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 "))))
但效果并不理想

我必须阅读文件的所有内容并建立一个抽象语法树吗?(就像翻译一样) 或者我可以通过逐字替换来实现它

我必须阅读文件的所有内容并建立一个抽象语法树吗

当然可以

你可能希望它不仅仅是一棵树,而是一些树

因此,您可能希望保留源代码的多个表示形式。你可能想要几张通行证


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

非常有趣的项目,由蚂蚁NIO MeeZes LeIT AO o,你在代码中所做的与解析无关。你所要做的就是用一个字符串替换每行的文本模式。是的,没错。这样我就不会在回购协议中给出任何“解析”名称。我不得不中止这个想法。它认为我可以通过像
awk
RegEx
那样在这里或那里替换单词来实现它。但正如所说,“你的问题可能比你想象的更难”。我认为这是对的。所以在完成PCL和PAIP后,我会回到这个想法。
(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 "))))