用Rascal忽略Java文件中的注释的最佳方法是什么?

问题描述 投票:1回答:1

我建立了一个模块来计算Java项目的代码行(LOC)。为此,我不得不忽略:

  1. 空白行
  2. 单行注释
  3. 和多行注释(/*......*/)。

我使用正则表达式在文件行中使用列表理解来实现前两个,并且我还解决了第三点,即使用正确的模式匹配和替换来访问整个文件字符串。我想知道,是否有更好和/或更高性能的方法可以达到相同的目标?

PS:由于多行注释可以与同一行中的实际代码交织在一起,所以我选择了替换,即使它比计数和减法重。棘手的多行注释的示例可以是:

String test2 = "abc /* fake comment*/";
String cde = "this is a test";//an inline comment
String efg = "ciccio"; /*this is a 
        weird comment*/ String hil = "pluto";
rascal
1个回答
1
投票

是,您可以尝试其他方法。

  • 我的第一选择是使用lexical SingleLineComment = "//" ~[\n] "\n";lexical OtherStuff = ![\\]+ !>> ![\\]之类的东西为带注释的文件编写语法。可以访问出现的分析树以计算所有注释的大小,您可以从总数中减去它。
  • 使用现有的Java语法从lang::java中的库中解析文件,并类似地分析解析树
  • 使用现有的外部解析器(如JDT),并找到所有AST节点的起始行。起始AST节点的行不为空,其他行为空。所以减法又是你的朋友。
  • 您可以更好地锚定正则表达式,以使它们变得更加不确定。 (即使用^$,以便您编写的visit变得更快。

建议在REPL::set profiling true上启用Rascal CPU Profiler,并查看运行测试后打印的概要文件中实际瓶颈AST节点的位置。

© www.soinside.com 2019 - 2024. All rights reserved.