public override LatteParser.TypeContext VisitENewObject(LatteParser.ENewObjectContext context) { switch (context.type()) { case LatteParser.TTypeNameContext typeContext: if (!_environment.NameToClassDef.ContainsKey(typeContext.GetText())) { _errorState.AddErrorMessage(new ErrorMessage( context.start.Line, ErrorMessages.ClassNotDefinedException(typeContext.GetText()))); } break; default: _errorState.AddErrorMessage(new ErrorMessage( context.start.Line, ErrorMessages.IncorrectNewException)); break; } return(context.type()); }
public void SyntaxError(IRecognizer recognizer, Symbol offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e) { _errorState.AddErrorMessage(new ErrorMessage(line, charPositionInLine, msg)); }
public override void EnterProgram(LatteParser.ProgramContext context) { _environment.AddPredefinedFunctions(); context.topDef().ToList().ForEach(topDef => { var id = topDef switch { LatteParser.FunctionDefContext fDef => fDef.ID().GetText(), LatteParser.ClassDefContext cDef => cDef.ID()[0].GetText() }; if (_environment.NameToFunctionDef.ContainsKey(id) || _environment.NameToClassDef.ContainsKey(id)) { _errorState.AddErrorMessage(new ErrorMessage( topDef.start.Line, ErrorMessages.FuncOrClassAlreadyDefined(id))); } if (topDef is LatteParser.ClassDefContext classDef) { CheckClassDef(classDef); } FrontendEnvironment.Instance.AddTopDef(topDef); }); _environment.NameToClassDef.Values.ToList().ForEach(classDef => { if (classDef.ParentId != null && !_environment.NameToClassDef.ContainsKey(classDef.ParentId)) { _errorState.AddErrorMessage( new ErrorMessage(ErrorMessages.ParentNorDefinedException(classDef.Id, classDef.ParentId))); } }); }