Я вижу ответ Как заставить ANTLR 3.2 выйти при первой ошибке? что полезно.
Тем не менее, я не могу добавить эти правила '@', не испугавшись грамматики. Мой файл грамматики прост:
grammar Exp;
options {
output=AST;
}
program
: includes decls (procedure)* main -> ^(SMALLCPROGRAM includes decls (procedure)* main) //AST - PROGRAM root
;
//Lexer and Parser rules continue below as normal..tested thoroughly and works
Но если я попытаюсь добавить любое из этих правил @, я получаю такие ошибки, как:
grammar file Exp.g has no rules
а также:
Exp.g:0:1: syntax error: assign.types: org.antlr.runtime.EarlyExitException
org\antlr\grammar\v3\DefineGrammarItemsWalker.g: node from line 202:4 required (...)+ loop did not match anything at input ';'
Кто-нибудь знает, в чем проблема? Я просто хочу изменить свою грамматику, чтобы, когда я запускаю ее из своего отдельного основного класса (передавая в него ввод с помощью ANTLRStringStream и т. Д.), Он фактически выдает ошибку в основном классе, когда возникает синтаксическая проблема, а не просто говорит что-то вроде:
line 1:57 missing RPAREN at '{'
Прежде чем продолжить синтаксический разбор остальной части ввода нормально. В конечном итоге мой основной класс должен отказываться от синтаксического анализа любого синтаксически искаженного ввода, как определено моей грамматикой, и должен сообщать об ошибках пользователю.