2

任何人都知道一些从 JavaServer Page 中删除所有 HTML 的方法。只保留 Java 代码和所有 JSP 属性。

我搜索它,但没有找到任何方法来做到这一点。我知道遗嘱有效的唯一方法是为 jsp 创建一个解析器,然后分析 AST 以保留重要的节点,但这种解决方案很痛苦。

如果有人知道一种简单的方法,请告诉我,否则如果你知道解析器是唯一可能的方法,我也很感激。

编辑:

我需要它来计算每个 JSP 中包含 Java 代码或 JSP 属性的行数。

4

1 回答 1

2

你不能轻易做到这一点,因为 HTML 和 JSP 都是丰富的结构,无论是就原子(词素)和更复杂的结构(表、语句等)而言,一个能够识别所有这些结构的完整解析器都可以解决问题. 如果你能得到这样的解析器,那么这是一个简单的方法。

但是,如果您只需要HTML 与 JSP 的物理行数,那么您只需要此任务所需的解析器部分。特别是,您不需要所有构造识别机制;只是识别原子的部分,例如,只是解析引擎的词法部分。

您可以通过为每种类型的语法(例如 HTML 和 JSP)定义词法分析器来做到这一点,当遇到它们之间的转换时,它们会相互传递控制。这是一个非常标准的任务模数汗水资产。然后行数非常简单;每个被识别的词位记录它的开始和结束行,并提供必要的原始数据。

为 HTML 和 JSP 构建词法分析器在技术上并不难,但它可能需要大量工作(“痛苦”就是你所说的)。尤其是 HTML 多年来变得相当复杂,而 JSP 现在大概将 Java7 的大部分内容作为子集包含在内。

如果你能得到这样的解析器,对于物理行数,实际上你应该能够只提取词法分析器部分。但是只使用未更改的解析器可能更容易。

如果您决定要测量 JSP 页面的更复杂的属性(例如,HTML 结构的嵌套深度、 逻辑语句计数、代码耦合,您将别无选择;您将真的需要解析器,因为这些测量是基于关于语言结构的复杂结构而不仅仅是词位。

可能有可用的开源 JSP 解析器。当然,执行 JSP 的 Web 服务器必须包含这样的解析器;检查Tomcat的胆量。您必须从 Web 服务器中提取解析器,这可能需要一些工作。我知道有商业 JSP 解析器旨在支持这种任务(我的公司有一个)。

如果您只想要计数而不想要这项工作,您可以获得一个已经内置此指标收集的工具。请参阅我公司的源代码搜索引擎 (SCSE) 产品,该产品在文件上生成 SLOC、McCabe 和 Cyclometric 度量,作为其代码索引步骤的副产品。SCSE 使用我们必须的 JSP 解析器来实现这个效果,开箱即用。

于 2013-09-28T02:40:37.987 回答