protected Parsing(ParsingKeeper keeper, //Накопитель ошибок string fieldName, //Имя разбираемого поля (для сообщений об ошибках) string fieldValue) //Разбираемое выражение { _keeper = keeper; keeper.SetFieldName(fieldName); var reader = new StringReader(fieldValue); var input = new AntlrInputStream(reader.ReadToEnd()); var lexer = GetLexer(input); var errorLexerListener = new LexerErrorListener(keeper, fieldValue); lexer.RemoveErrorListeners(); lexer.AddErrorListener(errorLexerListener); var tokens = new CommonTokenStream(lexer); var parser = GetParser(tokens); var errorParserListener = new ParserErrorListener(keeper); parser.RemoveErrorListeners(); parser.AddErrorListener(errorParserListener); ResultTree = RunVisitor(parser, keeper); }
public LexerErrorListener(ParsingKeeper keeper, string fieldValue) { _fieldValue = fieldValue; _keeper = keeper; }
//Создать и запустить визитор, возвращает дерево разбора protected abstract Node RunVisitor(Parser parser, ParsingKeeper keeper);
public ParserErrorListener(ParsingKeeper keeper) { _keeper = keeper; }