Exemplo n.º 1
0
        public void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
        {
            string mess  = "Ошибка разбора выражения";
            IToken token = offendingSymbol;

            if (offendingSymbol != null)
            {
                if (offendingSymbol.Text == "<EOF>")
                {
                    mess  = "Ошибка в конце выражения";
                    token = null;
                }
                else
                {
                    mess = "Недопустимое использование лексемы";
                }
            }
            if (token != null)
            {
                _keeper.AddError(mess, token);
            }
            else
            {
                _keeper.AddError(mess, null, line, charPositionInLine);
            }
        }
Exemplo n.º 2
0
        public void SyntaxError(IRecognizer recognizer, int offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
        {
            var          lexer = (Lexer)recognizer;
            const string mess  = "Недопустимая последовательность символов";
            string       last  = "";

            if (lexer.CharIndex < _fieldValue.Length)
            {
                last += _fieldValue[lexer.CharIndex];
            }
            if (lexer.Token != null)
            {
                var t = lexer.Token;
                _keeper.AddError(mess, t.Text.Trim() + last, t.Line, t.Column, t);
            }
            else
            {
                _keeper.AddError(mess, lexer.Text.Trim() + last, line, charPositionInLine);
            }
        }
Exemplo n.º 3
0
        public INode Parse(Shape shape, string text)
        {
            Keeper = new ParsingKeeper();
            Keeper.SetFieldName("фигура");
            var reader             = new StringReader(text);
            var input              = new AntlrInputStream(reader.ReadToEnd());
            var lexer              = new ShapeViewLexer(input);
            var errorLexerListener = new LexerErrorListener(Keeper, text);

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

            parser.RemoveErrorListeners();
            parser.AddErrorListener(errorParserListener);
            IParseTree tree = parser.prog();

            if (tree == null)
            {
                Keeper.AddError("Недопустимое выражение", (IToken)null);
                return(new NodeError(null, "Недопустимое выражение"));
            }
            var visitor = new ShapeViewVisitor {
                GroupShape = shape, Keeper = Keeper
            };
            var n = Node.Visit(visitor, subParse => subParse[0], tree);

            if (n is NodeError && n.Token == null)
            {
                Keeper.AddError("Недопустимое выражение", (IToken)null);
                return(new NodeError(null, "Недопустимое выражение"));
            }
            return(n);
        }