ANTLR pas d'alternative viable à l'entrée '<EOF>'

Je suis toujours sur le chemin d'apprentissage avec ANTLR. J'ai construit une grammaire et pour la plupart, c'est ce que je pense, mais j'en ai besoin pour être en mesure de s'exécuter en mode silencieux (pas de sortie sur stdout ou stderr).

Grammaire

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();
        }
    }
}

Entrée

a = 1

Sortie

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

Je ne sais pas pourquoi je reçois les expressions du FOLKLORE d'erreur. Ce que je comprends de ma grammaire est l'analyse correctement, et j'obtiens le message d'erreur après le "parse" analyseur est évaluée, mais ce nœud est à la recherche pour les expressions du FOLKLORE. À l'aide de ANTLR 3.2

OriginalL'auteur Hounshell | 2010-07-20