3 data PascalUnit = |
3 data PascalUnit = |
4 Program Identifier Implementation Phrase |
4 Program Identifier Implementation Phrase |
5 | Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize) |
5 | Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize) |
6 | System [TypeVarDeclaration] |
6 | System [TypeVarDeclaration] |
7 | Redo [TypeVarDeclaration] |
7 | Redo [TypeVarDeclaration] |
8 deriving (Show, Eq) |
8 deriving (Show, Read, Eq) |
9 data Interface = Interface Uses TypesAndVars |
9 data Interface = Interface Uses TypesAndVars |
10 deriving (Show, Eq) |
10 deriving (Show, Read, Eq) |
11 data Implementation = Implementation Uses TypesAndVars |
11 data Implementation = Implementation Uses TypesAndVars |
12 deriving (Show, Eq) |
12 deriving (Show, Read, Eq) |
13 data Identifier = Identifier String BaseType |
13 data Identifier = Identifier String BaseType |
14 deriving (Show, Eq) |
14 deriving (Show, Read, Eq) |
15 data TypesAndVars = TypesAndVars [TypeVarDeclaration] |
15 data TypesAndVars = TypesAndVars [TypeVarDeclaration] |
16 deriving (Show, Eq) |
16 deriving (Show, Read, Eq) |
17 data TypeVarDeclaration = TypeDeclaration Identifier TypeDecl |
17 data TypeVarDeclaration = TypeDeclaration Identifier TypeDecl |
18 | VarDeclaration Bool Bool ([Identifier], TypeDecl) (Maybe InitExpression) |
18 | VarDeclaration Bool Bool ([Identifier], TypeDecl) (Maybe InitExpression) |
19 | FunctionDeclaration Identifier Bool Bool Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase)) |
19 | FunctionDeclaration Identifier Bool Bool Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase)) |
20 | OperatorDeclaration String Identifier Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase)) |
20 | OperatorDeclaration String Identifier Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase)) |
21 deriving (Show, Eq) |
21 deriving (Show, Read, Eq) |
22 data TypeDecl = SimpleType Identifier |
22 data TypeDecl = SimpleType Identifier |
23 | RangeType Range |
23 | RangeType Range |
24 | Sequence [Identifier] |
24 | Sequence [Identifier] |
25 | ArrayDecl (Maybe Range) TypeDecl |
25 | ArrayDecl (Maybe Range) TypeDecl |
26 | RecordType [TypeVarDeclaration] (Maybe [[TypeVarDeclaration]]) |
26 | RecordType [TypeVarDeclaration] (Maybe [[TypeVarDeclaration]]) |
30 | Set TypeDecl |
30 | Set TypeDecl |
31 | FunctionType TypeDecl [TypeVarDeclaration] |
31 | FunctionType TypeDecl [TypeVarDeclaration] |
32 | DeriveType InitExpression |
32 | DeriveType InitExpression |
33 | VoidType |
33 | VoidType |
34 | VarParamType TypeDecl -- this is a hack |
34 | VarParamType TypeDecl -- this is a hack |
35 deriving (Show, Eq) |
35 deriving (Show, Read, Eq) |
36 data Range = Range Identifier |
36 data Range = Range Identifier |
37 | RangeFromTo InitExpression InitExpression |
37 | RangeFromTo InitExpression InitExpression |
38 | RangeInfinite |
38 | RangeInfinite |
39 deriving (Show, Eq) |
39 deriving (Show, Read, Eq) |
40 data Initialize = Initialize String |
40 data Initialize = Initialize String |
41 deriving (Show, Eq) |
41 deriving (Show, Read, Eq) |
42 data Finalize = Finalize String |
42 data Finalize = Finalize String |
43 deriving (Show, Eq) |
43 deriving (Show, Read, Eq) |
44 data Uses = Uses [Identifier] |
44 data Uses = Uses [Identifier] |
45 deriving (Show, Eq) |
45 deriving (Show, Read, Eq) |
46 data Phrase = ProcCall Reference [Expression] |
46 data Phrase = ProcCall Reference [Expression] |
47 | IfThenElse Expression Phrase (Maybe Phrase) |
47 | IfThenElse Expression Phrase (Maybe Phrase) |
48 | WhileCycle Expression Phrase |
48 | WhileCycle Expression Phrase |
49 | RepeatCycle Expression [Phrase] |
49 | RepeatCycle Expression [Phrase] |
50 | ForCycle Identifier Expression Expression Phrase Bool -- The last Boolean indicates wether it's up or down counting |
50 | ForCycle Identifier Expression Expression Phrase Bool -- The last Boolean indicates wether it's up or down counting |
52 | Phrases [Phrase] |
52 | Phrases [Phrase] |
53 | SwitchCase Expression [([InitExpression], Phrase)] (Maybe [Phrase]) |
53 | SwitchCase Expression [([InitExpression], Phrase)] (Maybe [Phrase]) |
54 | Assignment Reference Expression |
54 | Assignment Reference Expression |
55 | BuiltInFunctionCall [Expression] Reference |
55 | BuiltInFunctionCall [Expression] Reference |
56 | NOP |
56 | NOP |
57 deriving (Show, Eq) |
57 deriving (Show, Read, Eq) |
58 data Expression = Expression String |
58 data Expression = Expression String |
59 | BuiltInFunCall [Expression] Reference |
59 | BuiltInFunCall [Expression] Reference |
60 | PrefixOp String Expression |
60 | PrefixOp String Expression |
61 | PostfixOp String Expression |
61 | PostfixOp String Expression |
62 | BinOp String Expression Expression |
62 | BinOp String Expression Expression |
68 | FloatLiteral String |
68 | FloatLiteral String |
69 | HexNumber String |
69 | HexNumber String |
70 | Reference Reference |
70 | Reference Reference |
71 | SetExpression [Identifier] |
71 | SetExpression [Identifier] |
72 | Null |
72 | Null |
73 deriving (Show, Eq) |
73 deriving (Show, Read, Eq) |
74 data Reference = ArrayElement [Expression] Reference |
74 data Reference = ArrayElement [Expression] Reference |
75 | FunCall [Expression] Reference |
75 | FunCall [Expression] Reference |
76 | TypeCast Identifier Expression |
76 | TypeCast Identifier Expression |
77 | SimpleReference Identifier |
77 | SimpleReference Identifier |
78 | Dereference Reference |
78 | Dereference Reference |
79 | RecordField Reference Reference |
79 | RecordField Reference Reference |
80 | Address Reference |
80 | Address Reference |
81 | RefExpression Expression |
81 | RefExpression Expression |
82 deriving (Show, Eq) |
82 deriving (Show, Read, Eq) |
83 data InitExpression = InitBinOp String InitExpression InitExpression |
83 data InitExpression = InitBinOp String InitExpression InitExpression |
84 | InitPrefixOp String InitExpression |
84 | InitPrefixOp String InitExpression |
85 | InitReference Identifier |
85 | InitReference Identifier |
86 | InitArray [InitExpression] |
86 | InitArray [InitExpression] |
87 | InitRecord [(Identifier, InitExpression)] |
87 | InitRecord [(Identifier, InitExpression)] |