Class Pl0Lexer
Tokenisiert PL/0-Quellcode in eine Folge von Token mit Diagnosen.
public sealed class Pl0Lexer
- Inheritance
-
Pl0Lexer
- Inherited Members
Constructors
Pl0Lexer(string, CompilerOptions?)
Erstellt einen Lexer für den angegebenen Quelltext.
public Pl0Lexer(string text, CompilerOptions? options = null)
Parameters
textstringDer PL/0-Quelltext.
optionsCompilerOptionsOptionale Compiler-Optionen; Standard wird verwendet wenn null.
Fields
_column
Aktuelle 1-basierte Spaltennummer.
private int _column
Field Value
_culture
Zielsprache für Fehlertexte.
private readonly CultureInfo _culture
Field Value
_diagnostics
Gesammelte Lexer-Diagnosen.
private readonly List<LexerDiagnostic> _diagnostics
Field Value
_index
Aktueller absoluter Index im Quelltext.
private int _index
Field Value
_line
Aktuelle 1-basierte Zeilennummer.
private int _line
Field Value
_options
Compiler-Optionen für Grenzwerte und Dialekte.
private readonly CompilerOptions _options
Field Value
_rm
ResourceManager für lokalisierte Fehlertexte.
private readonly ResourceManager _rm
Field Value
_text
Zu tokenisierender Quelltext.
private readonly string _text
Field Value
_tokens
Gesammelte Token.
private readonly List<Pl0Token> _tokens
Field Value
Properties
Current
Gibt das aktuelle Zeichen oder den Null-Terminator am Eingabeende zurück.
private char Current { get; }
Property Value
CurrentPosition
Gibt die aktuelle Textposition zurück.
private TextPosition CurrentPosition { get; }
Property Value
Methods
AddSingleCharToken(TokenKind)
Fügt ein Token hinzu, das durch ein einzelnes Zeichen repräsentiert wird.
private void AddSingleCharToken(TokenKind kind)
Parameters
kindTokenKindAuszugebende Token-Art.
Advance()
Rückt den Lexer um ein Zeichen vor und aktualisiert Zeilen- und Spaltenzähler.
private void Advance()
Lex()
Führt die lexikalische Analyse durch und gibt Token und Diagnosen zurück.
public LexerResult Lex()
Returns
- LexerResult
Das Lexer-Ergebnis mit Token und Diagnosen.
LexBecomesOrDiagnostic()
Liest den :=-Operator oder meldet einen Fehler für ein einzelnes ':'.
private void LexBecomesOrDiagnostic()
LexGreaterOrGreaterEqual()
Liest den >- oder >=-Operator.
private void LexGreaterOrGreaterEqual()
LexIdentifierOrKeyword()
Liest einen Bezeichner oder ein Schlüsselwort-Token.
private void LexIdentifierOrKeyword()
LexLessOrLessEqual()
Liest den <- oder <=-Operator.
private void LexLessOrLessEqual()
LexNumber()
Liest ein numerisches Literal-Token.
private void LexNumber()
MapIdentifierKind(string)
Ordnet ein Bezeichner-Lexem seiner Schlüsselwort-Token-Art zu, wenn zutreffend.
private static TokenKind MapIdentifierKind(string lexeme)
Parameters
lexemestringDer Bezeichnertext.
Returns
- TokenKind
Die Token-Art für das Lexem.
Peek(int)
Liest voraus um einen gegebenen Offset ohne Vorrücken.
private char Peek(int offset)
Parameters
offsetintZeichen-Offset vom aktuellen Index.
Returns
- char
Das Zeichen am Offset oder Null-Terminator.
ReportUnexpectedCharacter(char)
Meldet eine Diagnose für ein unerwartetes Zeichen.
private void ReportUnexpectedCharacter(char ch)
Parameters
chcharDas unerwartete Zeichen.
SkipWhiteSpace()
Überspringt Leerzeichen.
private void SkipWhiteSpace()