繁体   English   中英

用于Java类/代码的PHP解析器?

[英]PHP parser for Java class / code?

我有一个Java类(更确切地说是一个jpa实体),我想在PHP中“解析”。 我想获得该类的字段,与每个字段相关的注释等。

是否有任何PHP工具可以读取java源代码并“解析”它? 我想避免使用我自己的自定义正则表达式重新发明轮子......

我建议编写一个小型Java应用程序,它编译/加载目标Java文件,最后返回/打印例如调用Java内省API生成的JSON数据。

这可能有助于或提供有用的类: Java(TM)Platform 1.0的内省工具

虽然它没有提供类的签名的简单可读表示,但Java的XMLEncoder提供了JavaBean的XML表示,如下所示:

 <?xml version="1.0" encoding="UTF-8"?>
 <java version="1.0" class="java.beans.XMLDecoder">
 <object class="javax.swing.JFrame">
   <void property="name">
     <string>frame1</string>
   </void>
   <void property="bounds">
     <object class="java.awt.Rectangle">
       <int>0</int>
       <int>0</int>
       <int>200</int>
       <int>200</int>
     </object>
   </void>
   <void property="contentPane">
     <void method="add">
       <object class="javax.swing.JButton">
         <void property="label">
           <string>Hello</string>
         </void>
       </object>
     </void>
   </void>
   <void property="visible">
     <boolean>true</boolean>
   </void>
 </object>
 </java>

另外,我建议看看这个页面 ,这也解释了Java的API refelection

截至本文档,一个非常简单的Java程序:

import java.lang.reflect.*;

   public class DumpMethods {
      public static void main(String args[])
      {
         try {
            // @see Hint from Nicolas Bousquet below
            Class c = Class.forName(args[0], false, this.getClass().getClassLoader() );
            Method m[] = c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++)
            System.out.println(m[i].toString());
         }
         catch (Throwable e) {
            System.err.println(e);
         }
      }
   }

像这样应用于Java的Stack类

java DumpMethods java.util.Stack

生成此文本输出:

public java.lang.Object java.util.Stack.push(
    java.lang.Object)
   public synchronized 
     java.lang.Object java.util.Stack.pop()
   public synchronized
      java.lang.Object java.util.Stack.peek()
   public boolean java.util.Stack.empty()
   public synchronized 
     int java.util.Stack.search(java.lang.Object

解析Java源代码或(更复杂的)Java字节码的任何努力都比使用Java检查Java要复杂几倍。

而且,如果Java源代码或类文件的语法稍后以某种方式改变,那么PHP解决方案甚至可能会失败。 因此,从架构的角度来看,使用PHP来实现所需的功能,与糟糕的风格并不遥远。

因此,我想知道,任何人都曾尝试过 - 因为Java替代方案是直截了当的。

最好的解决方案是使用自定义doclet调用javadoc ,因为这不需要编译要记录的java源代码。 要将它与PHP集成,只需通过exec()调用javadoc即可。

如果您希望我为您整理实现,请通过编辑帖子提供有关如何通过PHP访问信息(例如解析文本描述,数组等)的更多详细信息。

ANTLR(http://www.antlr.org/)可能是个不错的选择。 您可以将它与Java语法规范(http://www.antlr.org/grammar/list)一起使用,以获取Java代码文件的语法树。 在Java语法中,我看到像methodDeclaration,fieldDeclaration和classDeclaration这样的东西 - 听起来就像你在寻找的东西。 一个快速的谷歌搜索开启了ANTLR的PHP运行时,虽然该网站声称是新的,可能“破损”倾向。

我正在使用PHP / Java Bridge

http://php-java-bridge.sourceforge.net/pjb/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM