Remove modula-2 definitions
This commit is contained in:
@@ -1,16 +0,0 @@
|
|||||||
DEFINITION MODULE CommandLineInterface;
|
|
||||||
|
|
||||||
FROM Common IMPORT ShortString;
|
|
||||||
|
|
||||||
TYPE
|
|
||||||
CommandLine = RECORD
|
|
||||||
input: ShortString;
|
|
||||||
output: ShortString;
|
|
||||||
lex: BOOLEAN;
|
|
||||||
parse: BOOLEAN
|
|
||||||
END;
|
|
||||||
PCommandLine = POINTER TO CommandLine;
|
|
||||||
|
|
||||||
PROCEDURE parse_command_line(): PCommandLine;
|
|
||||||
|
|
||||||
END CommandLineInterface.
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
DEFINITION MODULE Common;
|
|
||||||
|
|
||||||
TYPE
|
|
||||||
ShortString = ARRAY[1..256] OF CHAR;
|
|
||||||
Identifier = ARRAY[1..256] OF CHAR;
|
|
||||||
PIdentifier = POINTER TO Identifier;
|
|
||||||
TextLocation = RECORD
|
|
||||||
line: CARDINAL;
|
|
||||||
column: CARDINAL
|
|
||||||
END;
|
|
||||||
|
|
||||||
END Common.
|
|
||||||
107
source/Lexer.def
107
source/Lexer.def
@@ -1,107 +0,0 @@
|
|||||||
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.
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
DEFINITION MODULE Parser;
|
|
||||||
|
|
||||||
FROM Common IMPORT Identifier, PIdentifier, ShortString;
|
|
||||||
FROM Lexer IMPORT PLexer;
|
|
||||||
|
|
||||||
TYPE
|
|
||||||
Parser = RECORD
|
|
||||||
lexer: PLexer
|
|
||||||
END;
|
|
||||||
PParser = POINTER TO Parser;
|
|
||||||
|
|
||||||
AstLiteralKind = (
|
|
||||||
astLiteralKindInteger,
|
|
||||||
astLiteralKindString,
|
|
||||||
astLiteralKindNull,
|
|
||||||
astLiteralKindBoolean
|
|
||||||
);
|
|
||||||
AstLiteral = RECORD
|
|
||||||
CASE kind: AstLiteralKind OF
|
|
||||||
astLiteralKindInteger: integer: INTEGER |
|
|
||||||
astLiteralKindString: string: ShortString |
|
|
||||||
astLiteralKindNull: |
|
|
||||||
astLiteralKindBoolean: boolean: BOOLEAN
|
|
||||||
END
|
|
||||||
END;
|
|
||||||
PAstLiteral = POINTER TO AstLiteral;
|
|
||||||
|
|
||||||
AstUnaryOperator = (
|
|
||||||
astUnaryOperatorReference,
|
|
||||||
astUnaryOperatorNot,
|
|
||||||
astUnaryOperatorMinus
|
|
||||||
);
|
|
||||||
AstBinaryOperator = (
|
|
||||||
astBinaryOperatorSum,
|
|
||||||
astBinaryOperatorSubtraction,
|
|
||||||
astBinaryOperatorMultiplication,
|
|
||||||
astBinaryOperatorDivision,
|
|
||||||
astBinaryOperatorRemainder,
|
|
||||||
astBinaryOperatorEquals,
|
|
||||||
astBinaryOperatorNotEquals,
|
|
||||||
astBinaryOperatorLess,
|
|
||||||
astBinaryOperatorGreater,
|
|
||||||
astBinaryOperatorLessEqual,
|
|
||||||
astBinaryOperatorGreaterEqual,
|
|
||||||
astBinaryOperatorDisjunction,
|
|
||||||
astBinaryOperatorConjunction,
|
|
||||||
astBinaryOperatorExclusiveDisjunction,
|
|
||||||
astBinaryOperatorShiftLeft,
|
|
||||||
astBinaryOperatorShiftRight
|
|
||||||
);
|
|
||||||
|
|
||||||
AstExpressionKind = (
|
|
||||||
astExpressionKindLiteral,
|
|
||||||
astExpressionKindIdentifier,
|
|
||||||
astExpressionKindArrayAccess,
|
|
||||||
astExpressionKindDereference,
|
|
||||||
astExpressionKindFieldAccess,
|
|
||||||
astExpressionKindUnary,
|
|
||||||
astExpressionKindBinary,
|
|
||||||
astExpressionKindCall
|
|
||||||
);
|
|
||||||
AstExpression = RECORD
|
|
||||||
CASE kind: AstExpressionKind OF
|
|
||||||
astExpressionKindLiteral: literal: PAstLiteral |
|
|
||||||
astExpressionKindIdentifier: identifier: Identifier |
|
|
||||||
astExpressionKindDereference: reference: PAstExpression |
|
|
||||||
astExpressionKindArrayAccess:
|
|
||||||
array: PAstExpression;
|
|
||||||
index: PAstExpression |
|
|
||||||
astExpressionKindFieldAccess:
|
|
||||||
aggregate: PAstExpression;
|
|
||||||
field: Identifier |
|
|
||||||
astExpressionKindUnary:
|
|
||||||
unary_operator: AstUnaryOperator;
|
|
||||||
unary_operand: PAstExpression |
|
|
||||||
astExpressionKindBinary:
|
|
||||||
binary_operator: AstBinaryOperator;
|
|
||||||
lhs: PAstExpression;
|
|
||||||
rhs: PAstExpression |
|
|
||||||
astExpressionKindCall:
|
|
||||||
callable: PAstExpression;
|
|
||||||
argument_count: CARDINAL;
|
|
||||||
arguments: PPAstExpression
|
|
||||||
END
|
|
||||||
END;
|
|
||||||
PAstExpression = POINTER TO AstExpression;
|
|
||||||
PPAstExpression = POINTER TO PAstExpression;
|
|
||||||
|
|
||||||
AstStatementKind = (
|
|
||||||
astStatementKindIf,
|
|
||||||
astStatementKindWhile,
|
|
||||||
astStatementKindAssignment,
|
|
||||||
astStatementKindReturn,
|
|
||||||
astStatementKindCall
|
|
||||||
);
|
|
||||||
AstStatement = RECORD
|
|
||||||
CASE kind: AstStatementKind OF
|
|
||||||
astStatementKindIf:
|
|
||||||
if_condition: PAstExpression;
|
|
||||||
if_branch: AstCompoundStatement |
|
|
||||||
astStatementKindWhile:
|
|
||||||
while_condition: PAstExpression;
|
|
||||||
while_body: AstCompoundStatement |
|
|
||||||
astStatementKindAssignment:
|
|
||||||
assignee: PAstExpression;
|
|
||||||
assignment: PAstExpression |
|
|
||||||
astStatementKindReturn: returned: PAstExpression |
|
|
||||||
astStatementKindCall: call: PAstExpression
|
|
||||||
END
|
|
||||||
END;
|
|
||||||
PAstStatement = POINTER TO AstStatement;
|
|
||||||
PPAstStatement = POINTER TO PAstStatement;
|
|
||||||
AstCompoundStatement = RECORD
|
|
||||||
count: CARDINAL;
|
|
||||||
statements: PPAstStatement
|
|
||||||
END;
|
|
||||||
|
|
||||||
AstImportStatement = RECORD
|
|
||||||
package: Identifier;
|
|
||||||
symbols: PIdentifier
|
|
||||||
END;
|
|
||||||
PAstImportStatement = POINTER TO AstImportStatement;
|
|
||||||
PPAstImportStatement = POINTER TO PAstImportStatement;
|
|
||||||
|
|
||||||
AstConstantDeclaration = RECORD
|
|
||||||
constant_name: Identifier;
|
|
||||||
constant_value: INTEGER
|
|
||||||
END;
|
|
||||||
PAstConstantDeclaration = POINTER TO AstConstantDeclaration;
|
|
||||||
PPAstConstantDeclaration = POINTER TO PAstConstantDeclaration;
|
|
||||||
|
|
||||||
AstFieldDeclaration = RECORD
|
|
||||||
field_name: Identifier;
|
|
||||||
field_type: PAstTypeExpression
|
|
||||||
END;
|
|
||||||
PAstFieldDeclaration = POINTER TO AstFieldDeclaration;
|
|
||||||
|
|
||||||
AstTypeExpressionKind = (
|
|
||||||
astTypeExpressionKindNamed,
|
|
||||||
astTypeExpressionKindRecord,
|
|
||||||
astTypeExpressionKindEnumeration,
|
|
||||||
astTypeExpressionKindArray,
|
|
||||||
astTypeExpressionKindPointer,
|
|
||||||
astTypeExpressionKindProcedure
|
|
||||||
);
|
|
||||||
AstTypeExpression = RECORD
|
|
||||||
CASE kind: AstTypeExpressionKind OF
|
|
||||||
astTypeExpressionKindNamed: name: Identifier |
|
|
||||||
astTypeExpressionKindEnumeration: cases: PIdentifier |
|
|
||||||
astTypeExpressionKindPointer: target: PAstTypeExpression |
|
|
||||||
astTypeExpressionKindRecord: fields: PAstFieldDeclaration |
|
|
||||||
astTypeExpressionKindArray:
|
|
||||||
base: PAstTypeExpression;
|
|
||||||
length: CARDINAL |
|
|
||||||
astTypeExpressionKindProcedure: parameters: PPAstTypeExpression
|
|
||||||
END
|
|
||||||
END;
|
|
||||||
PAstTypeExpression = POINTER TO AstTypeExpression;
|
|
||||||
PPAstTypeExpression = POINTER TO PAstTypeExpression;
|
|
||||||
|
|
||||||
AstTypedDeclaration = RECORD
|
|
||||||
identifier: Identifier;
|
|
||||||
type_expression: PAstTypeExpression
|
|
||||||
END;
|
|
||||||
PAstTypedDeclaration = POINTER TO AstTypedDeclaration;
|
|
||||||
PPAstTypedDeclaration = POINTER TO PAstTypedDeclaration;
|
|
||||||
|
|
||||||
AstVariableDeclaration = RECORD
|
|
||||||
variable_name: Identifier;
|
|
||||||
variable_type: PAstTypeExpression
|
|
||||||
END;
|
|
||||||
PAstVariableDeclaration = POINTER TO AstVariableDeclaration;
|
|
||||||
PPAstVariableDeclaration = POINTER TO PAstVariableDeclaration;
|
|
||||||
|
|
||||||
AstProcedureDeclaration = RECORD
|
|
||||||
name: Identifier;
|
|
||||||
parameter_count: CARDINAL;
|
|
||||||
parameters: PAstTypedDeclaration;
|
|
||||||
return_type: PAstTypeExpression;
|
|
||||||
constants: PPAstConstantDeclaration;
|
|
||||||
variables: PPAstVariableDeclaration;
|
|
||||||
statements: AstCompoundStatement
|
|
||||||
END;
|
|
||||||
PAstProcedureDeclaration = POINTER TO AstProcedureDeclaration;
|
|
||||||
PPAstProcedureDeclaration = POINTER TO PAstProcedureDeclaration;
|
|
||||||
|
|
||||||
AstModule = RECORD
|
|
||||||
main: BOOLEAN;
|
|
||||||
imports: PPAstImportStatement;
|
|
||||||
constants: PPAstConstantDeclaration;
|
|
||||||
types: PPAstTypedDeclaration;
|
|
||||||
variables: PPAstVariableDeclaration;
|
|
||||||
procedures: PPAstProcedureDeclaration;
|
|
||||||
statements: AstCompoundStatement
|
|
||||||
END;
|
|
||||||
PAstModule = POINTER TO AstModule;
|
|
||||||
|
|
||||||
PROCEDURE parse(lexer: PLexer): PAstModule;
|
|
||||||
|
|
||||||
END Parser.
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
DEFINITION MODULE Transpiler;
|
|
||||||
|
|
||||||
FROM FIO IMPORT File;
|
|
||||||
|
|
||||||
FROM Common IMPORT ShortString;
|
|
||||||
FROM Lexer IMPORT PLexer, Lexer;
|
|
||||||
FROM Parser IMPORT PAstModule;
|
|
||||||
|
|
||||||
TYPE
|
|
||||||
TranspilerContext = RECORD
|
|
||||||
input_name: ShortString;
|
|
||||||
output: File;
|
|
||||||
definition: File;
|
|
||||||
indentation: CARDINAL
|
|
||||||
END;
|
|
||||||
PTranspilerContext = POINTER TO TranspilerContext;
|
|
||||||
|
|
||||||
PROCEDURE transpile(ast_module: PAstModule; output: File; definition: File; input_name: ShortString);
|
|
||||||
|
|
||||||
END Transpiler.
|
|
||||||
Reference in New Issue
Block a user