ANTLR:必需(...)+循环与字符处的任何内容都不匹配

时间:2012-11-28 21:56:31

标签: antlr antlr3

我得到了:

  

行n:m required(...)+ loop与字符u'#'

中的任何内容都不匹配

但是解析器以0 = parser.getNumberOfSyntaxErrors()结束,并生成一个正确的AST。进一步的检查确认了词法分析器正在打印错误消息,该错误消息会抛出一个antlr3.exceptions.EarlyExitException以某种方式永远不会到达解析器。

此时应该匹配的词汇规则是:

LOCALVAR
    :
    '#' NAME_CHAR+ 
    ;

输入中的失败点为#I)

为什么lexing和解析成功了?为什么消息有效输入?

1 个答案:

答案 0 :(得分:0)

我解决类似问题的方法:

DOT : '.' ;

INTEGER
    :
    DIGITS
    ;

FLOAT
    :
    (DIGITS DOT DIGITS)=> DIGITS DOT DIGITS
    ;

解析以下短语时:

#J := #X(75.W)

词法分子抗议:

  

行n:m required(...)+ loop与字符u'W'上的任何内容都不匹配

将规则更改为:

FLOAT
    :
    DIGITS 
    (
       (DOT DIGIT)=>  DOT DIGITS 
    |
        () { $type=INTEGER }
    )
    ;

解决了问题。

问题在于,ANTLR词法分析师不是RE而是LL。