【问题标题】:This antlr example is not working properly此 antlr 示例无法正常工作
【发布时间】:2010-05-01 18:40:47
【问题描述】:

此 ANTLR 示例不解析输入“1;” .你能解释一下为什么吗?它解析“11;”。

grammar TestGrammar;

options {
    output=AST;
}

expr:       mexpr (PLUS^ mexpr)* SEMI!;
mexpr:      atom (STAR^ atom)*; 
atom:       INT; 

LPAREN:     '('; 
RPAREN:     ')'; 
STAR:       '*'; 
PLUS:       '+'; 
SEMI:       ';';

protected
DIGIT:      '0'..'9';
INT:        (DIGIT)+;

WS:         (' ' | '\t' | '\n' | '\r') {
                $channel = HIDDEN;
            };

【问题讨论】:

    标签: antlr antlr3


    【解决方案1】:

    对于java目标,如果你改变: 受保护 数字 :'0'..'9' ;

    到 分段 数字 :'0'..'9' ;

    它会起作用的。

    希望对你有所帮助。

    【讨论】:

    • 确认,将protected改为fragment。
    • 我想通了。说明:受保护的关键字在 ANTLR 的早期版本中有效。它在 ANTLR 3 中不起作用。现在必须使用受保护的片段插入。在 ANTLR 3 中,protected 可能被忽略了。那么会发生什么? ANTLR 将 INT 和 DIGIT 都解释为令牌。由于它们非常相似,因此解析失败。通过使用片段,DIGIT 不再是一个令牌。 Fragment 表示 DIGIT 是规则或另一个令牌的一部分。然后示例开始工作。
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2020-09-17
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多