区分代码注释和文本注释

时间:2016-11-28 22:10:16

标签: javascript validation abstract-syntax-tree

是否有一种最佳方法可以查看单个行或块注释是否仅仅是已注释掉的代码,或者它是否是实际注释。

e.g。

// console.log('foo'); 
  

应验证true是否为代码注释。

// This does stuff
  

应验证false是否为代码注释。

当前解决方案:

将评论内容解析为AST并查看它是否是代码,有点像验证者。

假设:

  • 我已经可以访问已经解析为AST的原始代码,并且可以访问注释节点。
  • 将成为节点脚本。

1 个答案:

答案 0 :(得分:1)

您需要收集评论文本,并通过语言子字符串识别器运行它。你可能有:

 /*  X=2.7*Y^3+9.3^Y2+2.7*  */

这看起来像我的代码,即使它不完整。

因此,一般而言,您希望检测语言的子串,而不是任意选择的语言结构。 (即使你选择语法扩展只是语法定义的非终结符,你是否在你的复杂语法中包含了所有1000个非终结符?只是“语句”或“表达式”?

您的第一个问题是决定“评论”的开始或结束位置。是

 //  X=X+1;
 /*  foo(bar);
     bar(baz);
 */

一个代码块还是两个(或三个)?如果指定的代码在评论中分开怎么办?

//  X=X+
/*  1;  */

我猜你最大的问题是找到一个语言子字符串解析器。仅仅因为你有一个完整语言的解析器并不意味着你很容易用它构建一个子串识别器。 (我们通过为我们的工具弯曲GLR解析器来做到这一点,如果你想了解更多,请参阅我的生物。)

你最难的问题是:程序员是否真的注释掉了实际的代码,还是只是在评论中草拟了一个计算?除非你能读出久违的思想,否则你无法知道。