Пример #1
0
        public SyntaxError(SyntaxErrorTypes type, Error error)
        {
            errorType       = type;
            errorDefinition = error;
            var message = new StringBuilder();

            switch (type)
            {
            case SyntaxErrorTypes.Semicolon:
                message.Append(@""";""");
                break;

            case SyntaxErrorTypes.OpenBracket:
                message.Append(@"""(""");
                break;

            case SyntaxErrorTypes.CloseBracket:
                message.Append(@""")""");
                break;

            case SyntaxErrorTypes.Colon:
                message.Append(@""":""");
                break;

            default:
                message.Append(Enum.GetName(typeof(SyntaxErrorTypes), type).ToUpper());
                break;
            }
            message.Append(" expected!\n");
            errorDefinition.message = message.ToString();
        }
Пример #2
0
 private void ErrorHandler(SyntaxErrorTypes type)
 {
     if (currentLexem < LexemString.Count)
     {
         Error = new SyntaxError(type, new Error(LexemString[currentLexem].line, LexemString[currentLexem].column));
     }
     else
     {
         Error = new SyntaxError(type, new Error(LexemString[currentLexem - 1].line, LexemString[currentLexem - 1].column + LexemString[currentLexem - 1].value.Length));
     }
     OnError?.Invoke();             /*подія - коли відбулася помилка в средині то воно вибиває на верх */
 }
Пример #3
0
        private void RiseErrorOrAddNodeToTree(int currentLevel, string expectedString)
        {
            if (currentLexem < LexemString.Count && LexemString[currentLexem].value == expectedString)             /*перевіряє чи не вийшли рядку лексем і чи відновідає значення поточної лексеми на яку ми очікуємо*/
            {
                Tree.Add(new Node(expectedString, currentLevel, LexemString[currentLexem]));
                currentLexem++;
            }
            else
            {
                SyntaxErrorTypes type = SyntaxErrorTypes.Begin;                 /*для визначення типу */
                switch (expectedString)
                {
                case "PROGRAM":
                    type = SyntaxErrorTypes.Program;
                    break;

                case "BEGIN":
                    type = SyntaxErrorTypes.Begin;
                    break;

                case "END":
                    type = SyntaxErrorTypes.End;
                    break;

                case "PROCEDURE":
                    type = SyntaxErrorTypes.Procedure;
                    break;

                case "ATTRIBUTE":
                    type = SyntaxErrorTypes.Attribute;
                    break;

                case "VARIABLE":
                    type = SyntaxErrorTypes.Variable;
                    break;

                case "IDENTIFIER":
                    type = SyntaxErrorTypes.Identifier;
                    break;

                case ";":
                    type = SyntaxErrorTypes.Semicolon;
                    break;

                case ":":
                    type = SyntaxErrorTypes.Colon;
                    break;

                case "(":
                    type = SyntaxErrorTypes.OpenBracket;
                    break;

                case ")":
                    type = SyntaxErrorTypes.CloseBracket;
                    break;

                default:
                    break;
                }
                ErrorHandler(type);
            }
        }