tools/pas2c/PascalUnitSyntaxTree.hs
branchsdl2transition
changeset 11362 ed5a6478e710
parent 10747 07ade56c3b4a
child 13887 5988e73080a3
equal deleted inserted replaced
11361:31570b766315 11362:ed5a6478e710
       
     1 module PascalUnitSyntaxTree where
       
     2 
       
     3 data PascalUnit =
       
     4     Program Identifier Implementation Phrase
       
     5     | Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize)
       
     6     | System [TypeVarDeclaration]
       
     7     | Redo [TypeVarDeclaration]
       
     8     deriving (Show, Eq)
       
     9 data Interface = Interface Uses TypesAndVars
       
    10     deriving (Show, Eq)
       
    11 data Implementation = Implementation Uses TypesAndVars
       
    12     deriving (Show, Eq)
       
    13 data Identifier = Identifier String BaseType
       
    14     deriving (Show, Eq)
       
    15 data TypesAndVars = TypesAndVars [TypeVarDeclaration]
       
    16     deriving (Show, Eq)
       
    17 data 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, Eq)
       
    22 data 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, Eq)
       
    36 data Range = Range Identifier
       
    37            | RangeFromTo InitExpression InitExpression
       
    38            | RangeInfinite
       
    39     deriving (Show, Eq)
       
    40 data Initialize = Initialize String
       
    41     deriving (Show, Eq)
       
    42 data Finalize = Finalize String
       
    43     deriving (Show, Eq)
       
    44 data Uses = Uses [Identifier]
       
    45     deriving (Show, Eq)
       
    46 data 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, Eq)
       
    58 data 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, Eq)
       
    74 data 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, Eq)
       
    83 data 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, Eq)
       
   101 
       
   102 data 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, Eq)