Transpile the global var section
This commit is contained in:
parent
731e9c700a
commit
ddc5865c7d
@ -68,7 +68,7 @@ TYPE
|
|||||||
|
|
||||||
VAR
|
VAR
|
||||||
Classification: ARRAY[1..128] OF TransitionClass;
|
Classification: ARRAY[1..128] OF TransitionClass;
|
||||||
Transitions: ARRAY[0..MAX(TransitionState)] OF ARRAY[0..MAX(TransitionClass)] OF Transition;
|
Transitions: ARRAY[0..15] OF ARRAY[0..21] OF Transition;
|
||||||
|
|
||||||
PROCEDURE InitializeClassification();
|
PROCEDURE InitializeClassification();
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -140,6 +140,7 @@ BEGIN
|
|||||||
TranspileImportPart(AContext, ALexer);
|
TranspileImportPart(AContext, ALexer);
|
||||||
TranspileConstantPart(AContext, ALexer);
|
TranspileConstantPart(AContext, ALexer);
|
||||||
TranspileTypePart(AContext, ALexer);
|
TranspileTypePart(AContext, ALexer);
|
||||||
|
TranspileVariablePart(AContext, ALexer);
|
||||||
|
|
||||||
Token := LexerCurrent(ALexer);
|
Token := LexerCurrent(ALexer);
|
||||||
WHILE Token.Kind <> lexerKindEof DO
|
WHILE Token.Kind <> lexerKindEof DO
|
||||||
@ -163,11 +164,11 @@ BEGIN
|
|||||||
Token := TranspilerLex(ALexer);
|
Token := TranspilerLex(ALexer);
|
||||||
WriteString(': ');
|
WriteString(': ');
|
||||||
TranspileTypeExpression(AContext, ALexer);
|
TranspileTypeExpression(AContext, ALexer);
|
||||||
Token := TranspilerLex(ALexer);
|
Token := TranspilerLex(ALexer);
|
||||||
|
|
||||||
IF Token.Kind = lexerKindSemicolon THEN
|
IF Token.Kind = lexerKindSemicolon THEN
|
||||||
Token := TranspilerLex(ALexer);
|
Token := TranspilerLex(ALexer);
|
||||||
WriteSemicolon()
|
WriteSemicolon()
|
||||||
ELSE
|
ELSE
|
||||||
WriteLn()
|
WriteLn()
|
||||||
END
|
END
|
||||||
@ -197,7 +198,25 @@ END TranspilePointerType;
|
|||||||
PROCEDURE TranspileArrayType(AContext: PTranspilerContext; ALexer: PLexer);
|
PROCEDURE TranspileArrayType(AContext: PTranspilerContext; ALexer: PLexer);
|
||||||
VAR
|
VAR
|
||||||
Token: LexerToken;
|
Token: LexerToken;
|
||||||
|
WrittenBytes: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
WriteString('ARRAY');
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
|
||||||
|
IF Token.Kind <> lexerKindOf THEN
|
||||||
|
Write('[');
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
WrittenBytes := WriteNBytes(StdOut, ADDRESS(ALexer^.Current - ALexer^.Start), ALexer^.Start);
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
WriteString('..');
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
WrittenBytes := WriteNBytes(StdOut, ADDRESS(ALexer^.Current - ALexer^.Start), ALexer^.Start);
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
Write(']');
|
||||||
|
Token := TranspilerLex(ALexer)
|
||||||
|
END;
|
||||||
|
WriteString(' OF ');
|
||||||
|
TranspileTypeExpression(AContext, ALexer)
|
||||||
END TranspileArrayType;
|
END TranspileArrayType;
|
||||||
|
|
||||||
PROCEDURE TranspileEnumerationType(AContext: PTranspilerContext; ALexer: PLexer);
|
PROCEDURE TranspileEnumerationType(AContext: PTranspilerContext; ALexer: PLexer);
|
||||||
@ -216,12 +235,12 @@ BEGIN
|
|||||||
|
|
||||||
WHILE Token.Kind = lexerKindComma DO
|
WHILE Token.Kind = lexerKindComma DO
|
||||||
Write(',');
|
Write(',');
|
||||||
WriteLn();
|
WriteLn();
|
||||||
WriteString(' ');
|
WriteString(' ');
|
||||||
Token := TranspilerLex(ALexer);
|
Token := TranspilerLex(ALexer);
|
||||||
WrittenBytes := WriteNBytes(StdOut, ADDRESS(ALexer^.Current - ALexer^.Start), ALexer^.Start);
|
WrittenBytes := WriteNBytes(StdOut, ADDRESS(ALexer^.Current - ALexer^.Start), ALexer^.Start);
|
||||||
|
|
||||||
Token := TranspilerLex(ALexer)
|
Token := TranspilerLex(ALexer)
|
||||||
END;
|
END;
|
||||||
WriteLn();
|
WriteLn();
|
||||||
WriteString(' )')
|
WriteString(' )')
|
||||||
@ -303,12 +322,48 @@ BEGIN
|
|||||||
Token := TranspilerLex(ALexer);
|
Token := TranspilerLex(ALexer);
|
||||||
|
|
||||||
WHILE Token.Kind = lexerKindIdentifier DO
|
WHILE Token.Kind = lexerKindIdentifier DO
|
||||||
TranspileTypeDeclaration(AContext, ALexer);
|
TranspileTypeDeclaration(AContext, ALexer);
|
||||||
Token := TranspilerLex(ALexer)
|
Token := TranspilerLex(ALexer)
|
||||||
END
|
END;
|
||||||
|
WriteLn()
|
||||||
END
|
END
|
||||||
END TranspileTypePart;
|
END TranspileTypePart;
|
||||||
|
|
||||||
|
PROCEDURE TranspileVariableDeclaration(AContext: PTranspilerContext; ALexer: PLexer);
|
||||||
|
VAR
|
||||||
|
Token: LexerToken;
|
||||||
|
WrittenBytes: CARDINAL;
|
||||||
|
BEGIN
|
||||||
|
WriteString(' ');
|
||||||
|
Token := LexerCurrent(ALexer);
|
||||||
|
WrittenBytes := WriteNBytes(StdOut, ADDRESS(ALexer^.Current - ALexer^.Start), ALexer^.Start);
|
||||||
|
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
WriteString(': ');
|
||||||
|
TranspileTypeExpression(AContext, ALexer);
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
WriteSemicolon()
|
||||||
|
END TranspileVariableDeclaration;
|
||||||
|
|
||||||
|
PROCEDURE TranspileVariablePart(AContext: PTranspilerContext; ALexer: PLexer);
|
||||||
|
VAR
|
||||||
|
Token: LexerToken;
|
||||||
|
BEGIN
|
||||||
|
Token := LexerCurrent(ALexer);
|
||||||
|
|
||||||
|
IF Token.Kind = lexerKindVar THEN
|
||||||
|
WriteString('VAR');
|
||||||
|
WriteLn();
|
||||||
|
Token := TranspilerLex(ALexer);
|
||||||
|
|
||||||
|
WHILE Token.Kind = lexerKindIdentifier DO
|
||||||
|
TranspileVariableDeclaration(AContext, ALexer);
|
||||||
|
Token := TranspilerLex(ALexer)
|
||||||
|
END;
|
||||||
|
WriteLn()
|
||||||
|
END
|
||||||
|
END TranspileVariablePart;
|
||||||
|
|
||||||
PROCEDURE Transpile(ALexer: PLexer);
|
PROCEDURE Transpile(ALexer: PLexer);
|
||||||
VAR
|
VAR
|
||||||
Token: LexerToken;
|
Token: LexerToken;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user