Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
 public void SyntaxError(IRecognizer recognizer, Symbol offendingSymbol, int line, int charPositionInLine, string msg,
                         RecognitionException e)
 {
     _errorState.AddErrorMessage(new ErrorMessage(line, charPositionInLine, msg));
 }
Ejemplo n.º 3
0
        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)));
                }
            });
        }