1module PascalUnitSyntaxTree where 2 3data PascalUnit = 4 Program Identifier Implementation Phrase 5 | Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize) 6 | System [TypeVarDeclaration] 7 | Redo [TypeVarDeclaration] 8 deriving (Show, Read, Eq) 9data Interface = Interface Uses TypesAndVars 10 deriving (Show, Read, Eq) 11data Implementation = Implementation Uses TypesAndVars 12 deriving (Show, Read, Eq) 13data Identifier = Identifier String BaseType 14 deriving (Show, Read, Eq) 15data TypesAndVars = TypesAndVars [TypeVarDeclaration] 16 deriving (Show, Read, Eq) 17data TypeVarDeclaration = TypeDeclaration Identifier TypeDecl 18 | VarDeclaration Bool Bool ([Identifier], TypeDecl) (Maybe InitExpression) 19 | FunctionDeclaration Identifier Bool Bool Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase)) 20 | OperatorDeclaration String Identifier Bool TypeDecl [TypeVarDeclaration] (Maybe (TypesAndVars, Phrase)) 21 deriving (Show, Read, Eq) 22data TypeDecl = SimpleType Identifier 23 | RangeType Range 24 | Sequence [Identifier] 25 | ArrayDecl (Maybe Range) TypeDecl 26 | RecordType [TypeVarDeclaration] (Maybe [[TypeVarDeclaration]]) 27 | PointerTo TypeDecl 28 | String 29 | AString 30 | Set TypeDecl 31 | FunctionType TypeDecl [TypeVarDeclaration] 32 | DeriveType InitExpression 33 | VoidType 34 | VarParamType TypeDecl -- this is a hack 35 deriving (Show, Read, Eq) 36data Range = Range Identifier 37 | RangeFromTo InitExpression InitExpression 38 | RangeInfinite 39 deriving (Show, Read, Eq) 40data Initialize = Initialize String 41 deriving (Show, Read, Eq) 42data Finalize = Finalize String 43 deriving (Show, Read, Eq) 44data Uses = Uses [Identifier] 45 deriving (Show, Read, Eq) 46data Phrase = ProcCall Reference [Expression] 47 | IfThenElse Expression Phrase (Maybe Phrase) 48 | WhileCycle Expression Phrase 49 | RepeatCycle Expression [Phrase] 50 | ForCycle Identifier Expression Expression Phrase Bool -- The last Boolean indicates wether it's up or down counting 51 | WithBlock Reference Phrase 52 | Phrases [Phrase] 53 | SwitchCase Expression [([InitExpression], Phrase)] (Maybe [Phrase]) 54 | Assignment Reference Expression 55 | BuiltInFunctionCall [Expression] Reference 56 | NOP 57 deriving (Show, Read, Eq) 58data Expression = Expression String 59 | BuiltInFunCall [Expression] Reference 60 | PrefixOp String Expression 61 | PostfixOp String Expression 62 | BinOp String Expression Expression 63 | StringLiteral String 64 | PCharLiteral String 65 | CharCode String 66 | HexCharCode String 67 | NumberLiteral String 68 | FloatLiteral String 69 | HexNumber String 70 | Reference Reference 71 | SetExpression [Identifier] 72 | Null 73 deriving (Show, Read, Eq) 74data Reference = ArrayElement [Expression] Reference 75 | FunCall [Expression] Reference 76 | TypeCast Identifier Expression 77 | SimpleReference Identifier 78 | Dereference Reference 79 | RecordField Reference Reference 80 | Address Reference 81 | RefExpression Expression 82 deriving (Show, Read, Eq) 83data InitExpression = InitBinOp String InitExpression InitExpression 84 | InitPrefixOp String InitExpression 85 | InitReference Identifier 86 | InitArray [InitExpression] 87 | InitRecord [(Identifier, InitExpression)] 88 | InitFloat String 89 | InitNumber String 90 | InitHexNumber String 91 | InitString String 92 | InitPChar String 93 | InitChar String 94 | BuiltInFunction String [InitExpression] 95 | InitSet [InitExpression] 96 | InitAddress InitExpression 97 | InitNull 98 | InitRange Range 99 | InitTypeCast Identifier InitExpression 100 deriving (Show, Read, Eq) 101 102data BaseType = BTUnknown 103 | BTChar 104 | BTString 105 | BTAString 106 | BTInt Bool -- second param indicates whether signed or not 107 | BTBool 108 | BTFloat 109 | BTRecord String [(String, BaseType)] 110 | BTArray Range BaseType BaseType 111 | BTFunction Bool Bool [(Bool, BaseType)] BaseType -- in (Bool, BaseType), Bool indiciates whether var or not 112 | BTPointerTo BaseType 113 | BTUnresolved String 114 | BTSet BaseType 115 | BTEnum [String] 116 | BTVoid 117 | BTUnit 118 | BTVarParam BaseType 119 deriving (Show, Read, Eq) 120