    function writeAction<"duration">(theAction : node, sLanguage : value) {
        localref theEntry = theAction.crossroad_entry;
        @    {
    @
        switch(sLanguage) {
            case "C++":
                @        int durations[] = {@
                break;
            case "Java":
                @        int[] durations = {@
        }
        foreach i in theAction.durations {
            if !i.first() {
                @, @
            }
            @@i@@
        }
        @, -1};
            setDuration("@theEntry.street@", "@theEntry.crossroad@", "@theEntry.direction@", durations);
        }
    @
    }

    function writeAction<"activate">(theAction : node, sLanguage : value) {
        @    activateStrategy("@theAction.strategy@");
    @
    }

    function writeAction<"desactivate">(theAction : node, sLanguage : value) {
        @    bActive_ = false;
    @
    }

    function convertAntecedent2Cpp(sAntecedent : value) {
        // this function returns the transformation of the antecedent
        return translateString({
                #implicitCopy // What You Scan Is What You Write
                antecedent ::=
                    [
                            // consume strings: it may contain 'vehicles_hour' and
                            // we won't transform it into a message
                            #readCString
                        |
                            // if not, perhaps is it an identifier?
                            #readIdentifier:sId
                            [
                                // facultative sequence: process a transformation
                                // if the keyword is worth 'vehicles_hour'
                                #check(sId == "vehicles_hour")
                                #continue // from here, the syntax must be correct
                                '('
                                // stop copying to the output what is scanned
                                #explicitCopy
                                // parses the coordinates of a sensor
                                => local theSegment;
                                street_segment(theSegment)
                                ')'
                                => {
                                    // the transformation itself
                                    @"@theSegment.street@", "@theSegment.crossroad@", "@theSegment.direction@")@
                                }
                            ]?
                        |
                            // reading of the char if end of string not reached;
                            // implicit copy to the output string
                            ~#empty
                    ]*
                    ;
                street_segment(theSegment : node) ::=
                        #readIdentifier:theSegment.crossroad
                        #continue "->"
                        => insert theSegment.direction = "c->s";
                        #readCString:theSegment.street
                    |
                        #readCString:theSegment.street
                        #continue "->"
                        => insert theSegment.direction = "s->c";
                        #readIdentifier:theSegment.crossroad
                    ;
            }, this, sAntecedent);
    }

Generated by CodeWorker v3.11.0.1 from CWscript2HTML.cwp.