如何使用Python解析Java的语法和代码约定?

如何使用Python解析Java的语法和代码约定?,java,python,parsing,Java,Python,Parsing,我正在从事一个项目,我想就完全初学者编写的Java代码提供反馈。换句话说,我需要能够判断代码是否遵循约定,而不仅仅是它是否是有效的Java代码 我已经研究了和之类的模块,看起来它们至少可以解析Java的一个大子集,这很好。但是,我对解析不是很有经验,所以我不确定是否可以使用这些工具来检查代码约定?这取决于您所谈论的代码约定的类型 如果您讨论的是源语法和语义中反映的约定(例如,检查标识符约定、不分配参数、正确关闭资源),则可以根据由普通Java语法生成的解析器生成的Java解析树来检查这些约定

我正在从事一个项目,我想就完全初学者编写的Java代码提供反馈。换句话说,我需要能够判断代码是否遵循约定,而不仅仅是它是否是有效的Java代码


我已经研究了和之类的模块,看起来它们至少可以解析Java的一个大子集,这很好。但是,我对解析不是很有经验,所以我不确定是否可以使用这些工具来检查代码约定?

这取决于您所谈论的代码约定的类型

  • 如果您讨论的是源语法和语义中反映的约定(例如,检查标识符约定、不分配参数、正确关闭资源),则可以根据由普通Java语法生成的解析器生成的Java解析树来检查这些约定

  • 如果您讨论的是缩进、空格、注释等的使用约定,那么普通Java解析器会忽略这些约定,并且它们不会记录在解析树中。因此,您需要使用解析器(或其他类型的工具)进行分析,该解析器旨在识别和捕获这些内容


似乎最好的选择是使用EclipseJDT,或者通过Jython,或者通过编写一个小型Java程序,由Python作为一个单独的进程执行。

IMO,在评论代码约定之前,您需要确保源文件中没有语法错误。当文件中有20个错误时,我(在我看来)评论某人使用小写标识符作为类名有点愚蠢。为pyparsing、PLY或pyPEG编写Java语法(对于刚开始解析的人来说)不是一项简单的任务。即使是编辑一个现有的语法来满足您的需要,也是一项艰巨的任务。我知道这不会是微不足道的,没关系:)至于语法错误,我认为javac处理得足够好了。该项目的目的是帮助初学者完成学习。例如,拧紧压痕会更难注意到缺少或多余的花括号。因此,对这些事情给出反馈可以帮助新手更快地发现错误。嗯,编写Java解析器真的明智吗!?您也可以使用Jython和JDT进行解析。听起来很有趣@specialscope-您能为我指出研究这种方法的正确方向吗?请在这里查找JDT Java解析器。使用Jython可以访问JDT库。对,我说的是第二种情况。我想知道我可以使用什么工具或模块(必须是Python),因为我确实关心对正式语法不重要的事情。