Create a parser context

This commit is contained in:
2025-06-13 15:23:59 +02:00
parent fdaeb25f73
commit fac024d1f3
9 changed files with 278 additions and 246 deletions

View File

@ -346,68 +346,65 @@ BEGIN
DEC(token^.identifierKind[1], lexer^.start.iterator);
MemCopy(lexer^.start.iterator, ORD(token^.identifierKind[1]), ADR(token^.identifierKind[2]));
IF compare_keyword('PROGRAM', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('program', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindProgram
END;
IF compare_keyword('IMPORT', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('import', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindImport
END;
IF compare_keyword('CONST', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('const', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindConst
END;
IF compare_keyword('VAR', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('var', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindVar
END;
IF compare_keyword('IF', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('if', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindIf
END;
IF compare_keyword('THEN', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('then', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindThen
END;
IF compare_keyword('ELSIF', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('elsif', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindElsif
END;
IF compare_keyword('ELSE', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('else', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindElse
END;
IF compare_keyword('WHILE', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('while', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindWhile
END;
IF compare_keyword('DO', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('do', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindDo
END;
IF compare_keyword('proc', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindProc
END;
IF compare_keyword('BEGIN', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('begin', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindBegin
END;
IF compare_keyword('END', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('end', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindEnd
END;
IF compare_keyword('TYPE', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('type', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindType
END;
IF compare_keyword('RECORD', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindRecord
END;
IF compare_keyword('UNION', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('union', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindUnion
END;
IF compare_keyword('NIL', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindNull
END;
IF compare_keyword('AND', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindAnd
END;
IF compare_keyword('OR', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindOr
END;
IF compare_keyword('RETURN', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('return', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindReturn
END;
IF compare_keyword('DEFINITION', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindDefinition
IF compare_keyword('defer', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindDefer
END;
IF compare_keyword('TO', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindTo
@ -421,11 +418,11 @@ BEGIN
IF compare_keyword('FROM', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindFrom
END;
IF compare_keyword('MODULE', lexer^.start, lexer^.current.iterator) THEN
IF compare_keyword('module', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindModule
END;
IF compare_keyword('IMPLEMENTATION', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindImplementation
IF compare_keyword('xor', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindXor
END;
IF compare_keyword('POINTER', lexer^.start, lexer^.current.iterator) THEN
token^.kind := lexerKindPointer