Пример #1
0
 public QLController()
 {
     LexerErrors  = new List <string>();
     ParserErrors = new List <string>();
     Memory       = new QLMemory();
     TypeChecker  = new QLTypeChecker();
 }
 public QLController()
 {
     LexerErrors = new List<string>();
     ParserErrors = new List<string>();
     Memory = new QLMemory();
     TypeChecker = new QLTypeChecker();
 }
Пример #3
0
        public void DeclareSelf()
        {
            if (!Referenced)
            {
                if (Identifiers.IsDefined(Identifier))
                {
                    QLException error = new QLException();

                    error.Message   = string.Format("Identifier '{0}' already defined!", Identifier);
                    error.TokenInfo = TokenInfo;

                    QLTypeChecker.QLError(error);
                    AlreadyDefined = true;
                }
                else
                {
                    Identifiers.AddIdentifier(Identifier, this);
                }
            }
        }
Пример #4
0
        public static MessageContainer ValidateForm(QuestionForm astForm)
        {
            var messages = new MessageContainer();

            messages.Add(QLDuplicateChecker.CheckDuplicates(astForm));
            if (AnyErrors(messages))
            {
                return(messages);
            }
            messages.Add(QLScopeChecker.CheckReferenceScopes(astForm));
            if (AnyErrors(messages))
            {
                return(messages);
            }
            messages.Add(QLCyclicDependencyChecker.CheckForCycles(astForm));
            if (AnyErrors(messages))
            {
                return(messages);
            }
            messages.Add(QLTypeChecker.CheckTypes(astForm));
            return(messages);
        }
Пример #5
0
        private void btnParse_Click(object sender, EventArgs e)
        {
            txtMessages.Clear();
            pnlErrors.Controls.Clear();

            _qlController = new QLController();
            _errorYPos    = 0;

            //build AST + check types
            _qlController.BuildAST(txtInput.Text);

            foreach (string lexerError in _qlController.LexerErrors)
            {
                WriteMessage(lexerError);
            }

            if (_qlController.LexerErrors.Any())
            {
                WriteErrorLabel("Lexer errors occurred, see messages");
            }

            foreach (string parserError in _qlController.ParserErrors)
            {
                WriteMessage(parserError);
            }

            if (_qlController.ParserErrors.Any())
            {
                WriteErrorLabel("Parser errors occurred, see messages");
            }

            //get type errors
            QLTypeChecker typeChecker = _qlController.TypeChecker;

            foreach (QLTypeError typeError in typeChecker.TypeErrors.OrderBy((te) => te.IsWarning))
            {
                string error = string.Format("{5} QLTypeChecker: {0} {1}" +
                                             "<At token '{2}' on line {3}, column {4}>",
                                             typeError.Message, Environment.NewLine,
                                             typeError.TokenInfo.TokenText,
                                             typeError.TokenInfo.TokenLine,
                                             typeError.TokenInfo.TokenColumn,
                                             typeError.IsWarning ? "(Warning)" : "(Error)");

                WriteErrorLabel(error, typeError.IsWarning);
            }

            WriteMessage(string.Format(@"Generated parse tree: 
                                              {0} {1}"
                                       , Environment.NewLine
                                       , _qlController.GetParseTreeString()));

            //check if generate is possible
            if (_qlController.LexerErrors.Any() || _qlController.ParserErrors.Any() || typeChecker.TypeErrors.Any((te) => !te.IsWarning))
            {
                lblSuccess.Visible = btnGenerate.Enabled = false;
            }
            else
            {
                lblSuccess.Visible = btnGenerate.Enabled = true;
            }
        }