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); } }
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); } }
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); }