Antlr: несоответствующий ввод начальный ожидающий идентификатор

Как начинающий, когда я изучал ANTLR4 изОкончательный справочник ANTLR 4 книгу, я попытался запустить мою модифицированную версию упражнения из главы 7:

/**
 * to parse properties file
 * this example demonstrates using embedded actions in code
 */
grammar PropFile;

@header  {
    import java.util.Properties;
}
@members {
    Properties props = new Properties();
}
file
    : 
    {
        System.out.println("Loading file...");
    }
        prop+
    {
        System.out.println("finished:\n"+props);
    }
    ;

prop
    : ID '=' STRING NEWLINE 
    {
        props.setProperty($ID.getText(),$STRING.getText());//add one property
    }
    ;

ID  : [a-zA-Z]+ ;
STRING  :(~[\r\n])+; //if use  STRING : '"' .*? '"'  everything is fine
NEWLINE :   '\r'?'\n' ;

Поскольку свойства Java являются просто парой ключ-значение, я используюSTRING соответствовать всем, кромеNEWLINE (Я не хочу, чтобы он просто поддерживал строки в двойных кавычках). При выполнении следующего предложения я получил:

D:\Antlr\Ex\PropFile\Prop1>grun PropFile prop -tokens
driver=mysql
^Z
[@0,0:11='driver=mysql',<3>,1:0]
[@1,12:13='\r\n',<4>,1:12]
[@2,14:13='<EOF>',<-1>,2:14]
line 1:0 mismatched input 'driver=mysql' expecting ID

Когда я используюSTRING : '"' .*? '"' вместо этого это работает.

Я хотел бы знать, где я был неправ, чтобы я мог избежать подобных ошибок в будущем.

Пожалуйста, дайте мне предложение, спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос