summaryrefslogtreecommitdiff
path: root/source/Lexer.def
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-12-02 10:22:06 +0100
committerEugen Wissner <belka@caraus.de>2025-12-02 17:14:18 +0100
commit23b6f074c7f560d701e9a1fa5713a965af3a18a3 (patch)
tree87549a4eba3da8d8ed6e3fbb2e337e152a8bc96a /source/Lexer.def
parent5f7d83974114c73327ce9fff3635927df050b5e4 (diff)
downloadelna-23b6f074c7f560d701e9a1fa5713a965af3a18a3.tar.gz
Merge GCC frontend into the branch
Diffstat (limited to 'source/Lexer.def')
-rw-r--r--source/Lexer.def107
1 files changed, 107 insertions, 0 deletions
diff --git a/source/Lexer.def b/source/Lexer.def
new file mode 100644
index 0000000..883c604
--- /dev/null
+++ b/source/Lexer.def
@@ -0,0 +1,107 @@
+DEFINITION MODULE Lexer;
+
+FROM FIO IMPORT File;
+
+FROM Common IMPORT Identifier, ShortString, TextLocation;
+
+TYPE
+ PLexerBuffer = POINTER TO CHAR;
+ BufferPosition = RECORD
+ iterator: PLexerBuffer;
+ location: TextLocation
+ END;
+ PBufferPosition = POINTER TO BufferPosition;
+ Lexer = RECORD
+ input: File;
+ buffer: PLexerBuffer;
+ size: CARDINAL;
+ length: CARDINAL;
+ start: BufferPosition;
+ current: BufferPosition
+ END;
+ PLexer = POINTER TO Lexer;
+ LexerKind = (
+ lexerKindEof,
+ lexerKindIdentifier,
+ lexerKindIf,
+ lexerKindThen,
+ lexerKindElse,
+ lexerKindElsif,
+ lexerKindWhile,
+ lexerKindDo,
+ lexerKindProc,
+ lexerKindBegin,
+ lexerKindEnd,
+ lexerKindXor,
+ lexerKindConst,
+ lexerKindVar,
+ lexerKindCase,
+ lexerKindOf,
+ lexerKindType,
+ lexerKindRecord,
+ lexerKindUnion,
+ lexerKindPipe,
+ lexerKindTo,
+ lexerKindBoolean,
+ lexerKindNull,
+ lexerKindAnd,
+ lexerKindOr,
+ lexerKindTilde,
+ lexerKindReturn,
+ lexerKindDefer,
+ lexerKindRange,
+ lexerKindLeftParen,
+ lexerKindRightParen,
+ lexerKindLeftSquare,
+ lexerKindRightSquare,
+ lexerKindGreaterEqual,
+ lexerKindLessEqual,
+ lexerKindGreaterThan,
+ lexerKindLessThan,
+ lexerKindNotEqual,
+ lexerKindEqual,
+ lexerKindSemicolon,
+ lexerKindDot,
+ lexerKindComma,
+ lexerKindPlus,
+ lexerKindMinus,
+ lexerKindAsterisk,
+ lexerKindDivision,
+ lexerKindRemainder,
+ lexerKindAssignment,
+ lexerKindColon,
+ lexerKindHat,
+ lexerKindAt,
+ lexerKindComment,
+ lexerKindInteger,
+ lexerKindWord,
+ lexerKindCharacter,
+ lexerKindString,
+ lexerKindFrom,
+ lexerKindPointer,
+ lexerKindArray,
+ lexerKindArrow,
+ lexerKindProgram,
+ lexerKindModule,
+ lexerKindImport
+ );
+ LexerToken = RECORD
+ CASE kind: LexerKind OF
+ lexerKindBoolean: booleanKind: BOOLEAN |
+ lexerKindIdentifier: identifierKind: Identifier |
+ lexerKindInteger: integerKind: INTEGER |
+ lexerKindString: stringKind: ShortString
+ END;
+ start_location: TextLocation;
+ end_location: TextLocation
+ END;
+ PLexerToken = POINTER TO LexerToken;
+
+PROCEDURE lexer_initialize(lexer: PLexer; input: File);
+PROCEDURE lexer_destroy(lexer: PLexer);
+(* Returns the last read token. *)
+PROCEDURE lexer_current(lexer: PLexer): LexerToken;
+(* Read and return the next token. *)
+PROCEDURE lexer_lex(lexer: PLexer): LexerToken;
+
+END Lexer.