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(); }
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(); /*подія - коли відбулася помилка в средині то воно вибиває на верх */ }
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); } }