Вам нужно будет опубликовать ввод, с которым вы получаете эту ошибку, версию ANTLR, которую вы используете, и способ выполнения ваших тестов, потому что я не вижу проблем с этой грамматикой, так каквы можете увидеть:
Tg
grammar T;
rule
: STRING_LITERAL {System.out.println("parsed : " + $STRING_LITERAL.text);}
;
STRING_LITERAL
: '"' STRING_GUTS '"'
;
fragment
STRING_GUTS
: (ESC | ~('\\' | '"'))*
;
// also a fragment rule perhaps?
ESC
: '\\' ('\\' | '"')
;
Main.java
import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
String src = "\"a\\\"b\\\\c\"";
TLexer lexer = new TLexer(new ANTLRStringStream(src));
TParser parser = new TParser(new CommonTokenStream(lexer));
System.out.println("src : " + src);
parser.rule();
}
}
Если я сгенерирую лексер и парсер из вашей грамматики (1), скомпилируйте все java-Исходные файлы (2) и запуск класса Main (3):
java -cp antlr-3.3.jar org.antlr.Tool T.g # 1
javac -cp antlr-3.3.jar *.java # 2
java -cp .;antlr-3.3.jar Main # 3
На консоль выводится следующее:
src : "a\"b\\c"
parsed : "a\"b\\c"
Т.е.: вход src
анализируется какожидается.
Если у вас возникли проблемы с интерпретатором ANTLRWorks: не используйте его, он немного глючит.Либо используйте отладчик ANTLRWorks, либо используйте пользовательский класс, как я делал выше.