예제 #1
0
        protected override Node RunVisitor(Parser parser, ParsingKeeper keeper)
        {
            var p = (FieldsParsemes)parser;
            var v = new FieldsVisitor((GenKeeper)keeper);

            return(v.Go(p.fieldGen()));
        }
예제 #2
0
        protected Parsing(string fieldName,  //Имя разбираемого поля (для сообщений об ошибках)
                          string fieldValue) //Разбираемое выражение
        {
            FieldName = fieldName;
            var reader             = new StringReader(fieldValue);
            var input              = new AntlrInputStream(reader.ReadToEnd());
            var lexer              = GetLexer(input);
            var errorLexerListener = new LexerErrorListener(fieldName, fieldValue);

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(errorLexerListener);
            var tokens = new CommonTokenStream(lexer);
            var parser = GetParser(tokens);
            var errorParserListener = new ParserErrorListener(fieldName);

            parser.RemoveErrorListeners();
            parser.AddErrorListener(errorParserListener);
            var keeper = new ParsingKeeper(fieldName);

            ResultTree = RunVisitor(parser, keeper);
            ErrMess    = errorLexerListener.ErrMess + errorParserListener.ErrMess + keeper.ErrMess;
        }
예제 #3
0
 protected override Node RunVisitor(Parser parser, ParsingKeeper keeper)
 {
     return(new RuleVisitor((GenKeeper)keeper).Go(((RuleParser)parser).subTablGen()));
 }
예제 #4
0
 //Создать и запустить визитор, возвращает дерево разбора
 protected abstract Node RunVisitor(Parser parser, ParsingKeeper keeper);