Table of Contents

Class Pl0Lexer

Namespace
Pl0.Core
Assembly
Pl0.Core.dll

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

text string

Der PL/0-Quelltext.

options CompilerOptions

Optionale Compiler-Optionen; Standard wird verwendet wenn null.

Fields

_column

Aktuelle 1-basierte Spaltennummer.

private int _column

Field Value

int

_culture

Zielsprache für Fehlertexte.

private readonly CultureInfo _culture

Field Value

CultureInfo

_diagnostics

Gesammelte Lexer-Diagnosen.

private readonly List<LexerDiagnostic> _diagnostics

Field Value

List<LexerDiagnostic>

_index

Aktueller absoluter Index im Quelltext.

private int _index

Field Value

int

_line

Aktuelle 1-basierte Zeilennummer.

private int _line

Field Value

int

_options

Compiler-Optionen für Grenzwerte und Dialekte.

private readonly CompilerOptions _options

Field Value

CompilerOptions

_rm

ResourceManager für lokalisierte Fehlertexte.

private readonly ResourceManager _rm

Field Value

ResourceManager

_text

Zu tokenisierender Quelltext.

private readonly string _text

Field Value

string

_tokens

Gesammelte Token.

private readonly List<Pl0Token> _tokens

Field Value

List<Pl0Token>

Properties

Current

Gibt das aktuelle Zeichen oder den Null-Terminator am Eingabeende zurück.

private char Current { get; }

Property Value

char

CurrentPosition

Gibt die aktuelle Textposition zurück.

private TextPosition CurrentPosition { get; }

Property Value

TextPosition

Methods

AddSingleCharToken(TokenKind)

Fügt ein Token hinzu, das durch ein einzelnes Zeichen repräsentiert wird.

private void AddSingleCharToken(TokenKind kind)

Parameters

kind TokenKind

Auszugebende 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

lexeme string

Der 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

offset int

Zeichen-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

ch char

Das unerwartete Zeichen.

SkipWhiteSpace()

Überspringt Leerzeichen.

private void SkipWhiteSpace()