0

我越来越:

第 n:m 行需要 (...)+ 循环在字符 u'#' 处不匹配任何内容

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

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

LOCALVAR
    :
    '#' NAME_CHAR+ 
    ;

输入中的故障点为#I).

为什么词法分析和解析成功?为什么有效输入的消息?

4

1 回答 1

0

我对类似问题的解决方案:

DOT : '.' ;

INTEGER
    :
    DIGITS
    ;

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

解析以下短语时:

#J := #X(75.W)

词法分析器抗议:

第 n:m 行需要 (...)+ 循环与字符 u'W' 处的任何内容都不匹配

将规则更改为:

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

修复了问题。

问题部分在于 ANTLR 词法分析器不是 RE 而是 LL。

于 2012-12-13T03:58:09.300 回答