Пример #1
0
        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);
        }
Пример #2
0
 public LexerErrorListener(ParsingKeeper keeper, string fieldValue)
 {
     _fieldValue = fieldValue;
     _keeper     = keeper;
 }
Пример #3
0
 //Создать и запустить визитор, возвращает дерево разбора
 protected abstract Node RunVisitor(Parser parser, ParsingKeeper keeper);
Пример #4
0
 public ParserErrorListener(ParsingKeeper keeper)
 {
     _keeper = keeper;
 }