javascript - 使用 ANTLR 解析 JavaDoc 注释

标签 javascript javadoc antlr antlr3

我试图在我的 JavaScript 文件中解析一个特定的(自制的)JavaDoc 标记,我正在努力理解如何实现这一点。 Antlr 正在提示,如下所述:

jsDocComment 
    : '/**' (importJsDocCommand | ~('*/'))* '*/' <== See note 1
    ;

importJsDocCommand
    : '@import' gav
    ;

gav
    :  gavGroup ':' gavArtifact
    -> ^(IMPORT gavGroup gavArtifact)
    ;

gavGroup 
    : gavIdentifier
    ;

gavArtifact
    : gavIdentifier
    ;

gavIdentifier 
    : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|'.')* <== See note 2
    ;
  • 注意1:永远无法匹配以下备选方案:1

  • 注意 2:决策可以使用多个备选方案匹配诸如“'_'..'.'”之类的输入:1、2 因此,该输入的备选方案 2 被禁用

这是我要解析的内容:

/** a */
/** @something */
/** @import com.jquery:jquery */

所有行都应该解析正常,只有在名为“IMPORT”的 AST 树元素下创建的 @import 语句(连同它的 Maven group:artifact 值)。

感谢您的协助。

最佳答案

Christopher Hunt wrote:

  • Note 1: The following alternatives can never be matched: 1

~('*/') 不正确:您只能否定词法分析器规则中的单个字符 (!)。在您的代码段中,您试图否定解析器规则中的某些内容。在解析器规则中,您不是在否定字符,而是在否定标记。例如:

parse : ~A;
foo   : .;
A     : 'A';
B     : 'B';
C     : 'C';

parse 规则将匹配除'A' 之外的任何字符,但匹配'B''C'。并且 foo 匹配任何字符,但匹配任何标记(或词法分析器规则)。

Christopher Hunt wrote:

  • Note 2: Decision can match input such as "'_'..'.'" using multiple alternatives: 1, 2 As a result, alternative(s) 2 were disabled for that input

两个问题:

  1. 您发布了整个语法吗?
  2. 您是要解析整个 JS 文件还是只是“过滤”JS 文件并提取 JavaDoc 注释?

如果是后者,使用 ANTLR 有更简单的方法(如果是这种情况,可以给出解释)。

编辑

最简单的方法是添加一个新的 DocComment 规则词法分析器并将其放在(现有的)Comment 规则之上:

DocComment
  :  '/**' (options {greedy=false;} : .)* '*/'
  ;

Comment
  :  '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;}
  ;

关于javascript - 使用 ANTLR 解析 JavaDoc 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3836096/

相关文章:

javascript - 使用||在javascript中执行空/未定义检查?

javascript - 为什么我的 Chrome map 信息窗口中出现滚动条?

java - 任何将 javadoc 嵌入 jar 的方法

antlr - ANTLR 中 AST 的可选重写规则

antlr - 忽略 ANTLRworks 中的空格

javascript - Jquery slider 不适用于 Angular

javascript - 表达 Mongoose 在找到后在 View 上显示数据

javadoc - 如何记录 Java 副作用

Javadoc @link 不同的返回类型

antlr - 这个antlr语法有什么问题吗?通配符问题?