是什么

JavaParser库以其最简单的形式允许您与Java源代码进行交互,作为Java环境中的Java对象表示形式。

更正式地说,我们将此对象表示形式称为抽象语法树(AST)。

此外,它提供了一种方便的机制,可以使用我们称为“访客支持”的功能来导航树。

这使开发人员能够专注于在源代码中识别有趣的模式,而不必编写费力的树遍历代码。

该库的最终主要功能是能够操纵源代码的基础结构。

然后可以将其写入文件,为开发人员提供构建自己的代码生成软件的便利

不是什么

不是JavaParser虽然该库适合作为库的一部分使用,但它不是代码重构工具箱。

这也许是我们所看到的关于图书馆的最受欢迎的误解。

可以将库视为提供一种机制来回答“这是什么代码?”的问题,语言工程师可以根据自己的意愿选择原因和方式,以及如何选择对其进行操作或报告。

它不是符号求解器,不会回答“此变量在哪里定义”的问题。

为此,您将需要另一个库,我们建议为其使用 JavaSymbolSolver¹²。

它也不是编译器。可以由库解析的语法正确的源代码并不一定意味着它将成功编译。

尽管可以成功编译的文件在语法上具有内在的正确性,但是解析只是编译过程的一个阶段。

例如,如果在未定义变量v的情况下对其进行引用,则在语法上是正确的,但是会导致编译过程中出现语义错误。

这本书是给谁的?

听起来没什么好玩的:大多数Java开发人员。

如果不是JavaParser库,则他们可能将从了解解析器可以提供的日常工作中受益。

为了解决这个问题,在大多数情况下,当选择解析源代码时,您正在寻找的是识别某些东西(通常是代码中的问题)或使代码自动生成的方式。

人们普遍认为这两种做法都可以提高质量和效率。我可以自动发现问题,可以更快地生成此代码吗?

所有开发人员都应该对如何实现这两者感兴趣。

但是,很有可能您将很少在最终用户软件中包括JavaParser库。

通常,它构成工具组件的一部分,该工具组件将对项目的源代码进行操作,或者生成最终将为用户服务的代码。

语言工具可能是我们看到的库最常用的例子。

我们可以在代码中识别兴趣点然后执行操作的想法。

更广泛地说,它是针对语言工程师和工具开发人员的。

作为Java的库,假定您已经对Java有一定的了解。

这本书不适合

那些希望学习Java的人,通过以上本书的扩展,不会教读者Java。

除了用户会感兴趣的功能之外,它也不会给您提供关于如何编写解析器的深刻见解。

我们也不会深入研究Java语法或库的基础语法定义。

那些希望在该领域获得更多了解的读者可以访问Java Language Specification³网站。

也许最有争议的是那些缺乏测试的人。

像大多数事物一样,测试方法是主观的,因此就此问题发表意见并不是本书的目标。

这样的例子是本书主要通过主要方法进行说明的。

如何使用这本书?

本书旨在用作使用JavaParser库的人员的学习帮助。

它不是参考指南,我们已尽力为此目的维护JavaDoc⁴。

如果您发现缺少文档,请在GitHub上提问。

我们将本书分为两部分,第一部分旨在使您快速掌握抽象语法树,库的关键组件以及如何在计算机上获取一些可用的示例。

如果您是新手,建议您阅读第一部分,以便在该主题上获得良好的基础。

本书的第二部分是用例的集合,这些用例更加详细地介绍了我们如何经常看到所使用的库。

可能会乱序读取用例,也许从用户最关注的用例开始。

尽管阅读所有内容当然没有害处。

本书中使用的约定

斜体-用于主题中重要概念的首次引入。

粗体-在当前主题范围内强调特定概念。

代码-用于突出显示内嵌的程序代码字

代码样例

您可以不受限制地自由使用本书中的所有代码示例。

原始资源可以在 GitHub⁵上找到。

我们感谢您,但无需注明出处。

这通常包括书名及其作者。

例如:JavaParser:Smith,Van Bruggen和Tomassetti所访问

如何联络我们

如有任何问题,意见或疑虑,请来Gitter访问我们。

关于本书的反馈:https://gitter.im/javaparser/javaparserbook

JavaParser库支持:https://gitter.im/javaparser/javaparser

作者简介

尼古拉斯·史密斯

Nicholas是一位经验丰富的软件工程师,目前正在伦敦从事其业务。

他一直幸运的是,他的工作也带点旅行,在此期间他曾在丹麦,印度和意大利工作他的事业。

他的教育背景主要是软件工程学士学位和学士学位和硕士学位,后者专门研究金融服务。

尽管他曾涉猎多种语言,但他主要将自己视为Java程序员,从1.3开始使用该语言有空的时候,除了为JavaParser项目做贡献之外,还可以找到他忽略了技术博客nicholaspaulsmith.com⁶或入侵了一些有头脑的计划,

让他提前退休。

费德里科·托马塞蒂(Federico Tomassetti)

Federico是一位独立的软件架构师,专注于构建语言:解析器,编译器,编辑器,模拟器和其他类似工具。

他在tomassetti.me⁷的博客上分享了他对语言工程的想法。

之前,他获得了语言工程博士学位,在这里和那里(包括TripAdvisor和Groupon)工作,现在他专注于咨询和为JavaParser和JavaSymbolSolver等开源项目做出贡献。

致谢

我们要感谢JavaParser的原始作者:Sreenivasa Viswanadha和JúlioVilmar Gesser。

此外,但最重要的是,我们要感谢围绕JavaParser成长的所有贡献者和精彩的社区。

今天,有数十个人发送了补丁,数百人在论坛,Stack Overflow,GitHub和Gitter上提出了问题。

与他们的讨论有助于理解JavaParser的使用方式以及需要澄清的部分。

参考资料

官方语法书