Freon Documentation (version 0.5.0)

Defining Concept Properties

Each of the language structure elements (concepts, interfaces, expressions, …) may have Properties.
Properties can be lists, this is indicated by square brackets after the type name. There are three types of properties.

Simple properties have as type identifier, string, number, or boolean, and are always contained in the concept. Simple properties may also be lists of identifier, string, number, or boolean.

// docu-project/defs/language-main.ast#L33-L35

concept InsurancePart {
    name: identifier;                       // internal name
    isApproved: boolean = false;            // indication of approval status

Parts have as type one of the concepts (including expression concepts and limited concepts) in the language, and are contained in the concept that holds the property (as in the UML composition relationship). Note that simple properties are always considered to be parts.

// docu-project/defs/language-main.ast#L33-L38

concept InsurancePart {
    name: identifier;                       // internal name
    isApproved: boolean = false;            // indication of approval status
    statisticalRisk: PercentageLiteral;     // the statistical risk known for this event
    maximumPayOut: EuroLiteral;             // maximum payout in case the insured event happens
}

References also have as type one of the concepts in the language, but a reference is not contained in its concept (as in the UML association relationship). References are indicated by the keyword reference in front of the definition.

References are always by name, therefore the referred concept must have a name property of type identifier.

In the following example the concept InsuranceProduct holds a list of references to InsuranceParts. The concept InsurancePart has a property name: identifier.

// docu-project/defs/language-main.ast#L42-L48

concept InsuranceProduct {
    name: identifier;                       // internal name
    productName: string;                    // name by which this product is known to the public
    themes: InsuranceTheme[];               // the 'kind' of insurance
    advertisedPremium: EuroLiteral;         // the premium as known to the public
    nrPremiumDays: PremiumDays;             // the number of days for which the advertised premium is calculated
    reference parts: InsurancePart[];       // optionally, known parts can be included by reference
// docu-project/defs/language-main.ast#L33-L34

concept InsurancePart {
    name: identifier;                       // internal name

Optional Properties

Properties may be optional. This is indicated using a question mark after the property name. Lists are always considered to be optional - there is no need for the question mark there.

Because this causes problems in the editor, simple properties may not be optional at the moment.

// docu-project/defs/language-main.ast#L57-L59

concept CalcFunction {
    name: identifier;                   // the name
    description?: Description;          // an optional description