Closed
Milestone
Feb 21, 2020–Mar 5, 2020
Lexer
Schreiben Sie einen Scanner für Rappi# wie definiert unter «Spezifikationen» (vom Modul vorgegebene Syntax). Verwenden Sie Microsoft Visual Studio / C# und basieren Sie Ihre Arbeit auf der zur Verfügung gestellten Vorlage. Benutzen Sie insbesondere die Modellierungsklassen im Namespace Lexer.Tokens.
Es bestehen folgende Anforderungen:
- Der Scanner soll jeden möglichen Text akzeptieren.
- Solange der Text die Lexer-Syntax einhält, soll die Methode Next() die Token der Reihe nach liefern.
- Sobald der Text sich nicht mehr an die Lexer-Syntax hält, soll dies der Diagnosis-Instanz rapportiert werden.
- Die Behandlung von Fehler (Aufhören, Weiterführen, Korrigieren) liegt in Ihrer Entscheidung.
Empfehlung: Definieren Sie Unit/Integration-Tests für den Lexer.
Optional: Speichern Sie die korrekte Anfangs- und Endposition in die Token-Objekte. Alternativ können Sie sich auch auf die Anfangsposition beschränken.
Tipps: Beachten Sie insbesondere folgende Sonderfälle:
- Hexadezimalzahlen
- Einzelnes & und | sind ungültig
- Gültige und ungültige Escapes in Character und String
- Ungültige Whitespaces in Character und String
- Nicht geschlossene Character oder Strings
- Nicht geschlossene Kommentarblöcke
- Ungültige Symbole wie $, ? etc.
- Zu grosse Integer-Literale, die nicht in 32-Bit passen (jenseits minimale/maximale Integer-Werte)
- Leerer Programmtext (im Lexer erlaubt)
- Der Lexer behandelt Fehlerfälle, ohne dass er in Endlosschlaufen etc. ausartet.