【问题标题】:ANTLR no viable alternative at input '<EOF>'ANTLR 在输入 '<EOF>' 处没有可行的替代方案
【发布时间】:2010-07-21 03:58:44
【问题描述】:

我仍在学习 ANTLR。我已经构建了一个语法,并且在大多数情况下它可以满足我的期望,但我需要它能够静默运行(不输出到 stdout 或 stderr)。

语法

grammar MyPredicate;

options 
{
    output=AST; 
} 

parse   :   expression EOF
    ;

expression 
    :   field WS? OPERATOR_BINARY WS? value
    ;

OPERATOR_BINARY
    :   '=' | '<' | '>' | '<=' | '>=' | '!=' | 'has'
    ;

value   :   VALUE_STRING
    |   VALUE_NUMERIC
    |   VALUE_BOOLEAN
    ;

VALUE_STRING
    :   '""'
    |   '"' (ESC_SEQ | ~('\\'|'"'))+ '"'
    ;

VALUE_NUMERIC
    :   ('0'..'9')+ ('.' ('0'..'9')+)?
    ;

VALUE_BOOLEAN 
    :   'true'
    |   'false'
    ;

field   :   FIELD_NAME
    ;

FIELD_NAME 
    :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

ESC_SEQ
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    ;

WS  :   (' ' | '\t' | '\r' | '\n') {skip();}
    ;

Java

import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;

public class Main {
    public static void main(String[] args) throws Exception {
        MyPredicateParser parser = new MyPredicateParser(new CommonTokenStream(new MyPredicateLexer(new ANTLRStringStream(args[0]))));
        MyPredicateParser.parse_return r = parser.parse();
        parser.parse();

        if ( r.tree!=null ) {
            System.out.println(((Tree)r.tree).toStringTree());
            ((CommonTree)r.tree).sanityCheckParentAndChildIndexes();
        }
    }
}

输入

a = 1

输出

line 0:-1 mismatched input '<EOF>' expecting FIELD_NAME
a = 1 null

我不确定为什么会收到 EOF 错误。据我了解,我的语法正在正确解析,并且在评估“解析”解析器后出现错误,但该节点正在寻找 EOF。使用 ANTLR 3.2

【问题讨论】:

    标签: antlr eof


    【解决方案1】:

    问题是您在 Main 类中调用了两次 parse()。删除该行:

    parser.parse();
    

    只离开:

    MyPredicateParser.parse_return r = parser.parse();
    

    就位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-06
      • 2019-05-21
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      相关资源
      最近更新 更多