(* * Modelicac * * Copyright (C) 2005 - 2007 Imagine S.A. * For more information or commercial use please contact us at www.amesim.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * *) (** This module defines the data structures necessary to hold parse trees built by the parser (see Parser module) *) type t = StoredDefinition of within * definition list and within = Within of name option | NotWithin and definition = Definition of final * class_definition and final = Final | NotFinal and class_definition = ClassDefinition of class_kind * ident * encapsulated * partial * class_specifier and class_kind = Class | Model | Record | Connector | Type | Package | Function and encapsulated = Encapsulated | NotEncapsulated and partial = Partial | NotPartial and class_specifier = Specifier of string_comment * composition * ident | ShortSpecifier of base_prefix * name * array_subscripts * class_modification option * comment | Enumeration of enumeration_literal list * comment and base_prefix = type_prefix and enumeration_literal = EnumerationLiteral of ident * comment and composition = Composition of element list * other_elements list * externalll option and element = AnnotationElement of annotation | ImportClause of import_clause | ExtendsClause of extends_clause | ClassDefinitionElement of class_definition * final * dynamic_scope | ComponentClauseElement of component_clause * final * dynamic_scope | ReplaceableClassDefinition of class_definition * (constraining_clause * comment) option * final * dynamic_scope | ReplaceableComponentClause of component_clause * (constraining_clause * comment) option * final * dynamic_scope and dynamic_scope = Inner | Outer | NoDynamicScope and extends_clause = name * class_modification option and constraining_clause = extends_clause and other_elements = Public of element list | Protected of element list | EquationClauseElement of equation_clause | AlgorithmClauseElement of algorithm_clause and externalll = External of string option * external_function_call option * annotation option and external_function_call = ExternalFunctionCall of component_reference option * ident * expression list and import_clause = NewIdentifier of ident * name * comment | Identifier of name * comment | AllIdentifiers of name * comment and component_clause = ComponentClause of type_prefix * type_specifier * array_subscripts * component_declaration list and type_prefix = TypePrefix of flow option * variability option * inout option and flow = Flow and variability = Discrete | Parameter | Constant and inout = Input | Output and type_specifier = name and component_declaration = ComponentDeclaration of declaration * comment and declaration = ident * array_subscripts * modification option and modification = Modification of class_modification * expression option | Eq of expression | ColEq of expression and class_modification = ClassModification of argument list and argument = ElementModification of each * final * component_reference * modification * string_comment | ElementRedeclaration of each * final * redeclaration and each = Each | NotEach and redeclaration = Redeclaration of replaceable * redeclared_element * (constraining_clause * comment) option and replaceable = Replaceable | NotReplaceable and redeclared_element = RedeclaredClassDefinition of class_definition | RedeclaredComponentClause of type_prefix * type_specifier * component_declaration and equation_clause = EquationClause of initial * equation_or_annotation list and equation_or_annotation = Equation of equation * comment | EquationAnnotation of annotation and algorithm_clause = AlgorithmClause of initial * algorithm_or_annotation list and algorithm_or_annotation = Algorithm of algorithm * comment | AlgorithmAnnotation of annotation and initial = Initial | NotInitial and equation = Equality of expression * expression | ConditionalEquationE of (expression * equation list) list * equation list | ForClauseE of for_indices * equation list | ConnectClause of component_reference * component_reference | WhenClauseE of (expression * equation list) list | FunctionCallE of component_reference * function_arguments option and algorithm = Assignment of component_reference * expression | FunctionCallA of component_reference * function_arguments option | MultipleAssignment of expression list * component_reference * function_arguments option | ConditionalEquationA of (expression * algorithm list) list * algorithm list | ForClauseA of for_indices * algorithm list | WhileClause of expression * algorithm list | WhenClauseA of (expression * algorithm list) list and for_indices = (ident * expression option) list and expression = Addition of expression * expression | And of expression * expression | Division of expression * expression | End | Equals of expression * expression | ExpressionList of expression array | False | FunctionCall of component_reference * function_arguments option | GreaterEqualThan of expression * expression | GreaterThan of expression * expression | If of (expression * expression) list * expression | Integer of string | LessEqualThan of expression * expression | LessThan of expression * expression | ArrayConcatenation of expression list list | Minus of expression | Multiplication of expression * expression | Not of expression | NotEquals of expression * expression | Or of expression * expression | Plus of expression | Power of expression * expression | Range of expression * expression * expression option | Real of string | Reference of component_reference | String of string | Subtraction of expression * expression | True | VectorOrRecord of function_arguments and ident = string and name = ident list and component_reference = (ident * array_subscripts) list and function_arguments = ArgList of expression list * for_indices option | NamedArgList of (ident * expression) list * for_indices option and array_subscripts = array_subscript array and array_subscript = All | Subscript of expression and comment = Comment of string_comment * annotation option and string_comment = StringComment of string list and annotation = Annotation of class_modification