TrafficLightControl ::=
#ignore(C++)
#continue
[strategy]*
#empty
;
strategy ::=
#readIdentifier:"strategy"
#continue
#readIdentifier:sName
=> if this.strategies.findElement(sName) {
error("cannot define the strategy '" + sName + "' twice!");
}
=> insert this.strategies[sName].name = sName;
=> localref theStrategy = this.strategies[sName];
'{'
start_condition(theStrategy)
[rule(theStrategy)]+
'}'
;
start_condition(theStrategy : node) ::=
#continue
#readIdentifier:"start"
condition:theStrategy.start
';'
;
rule(theStrategy : node) ::=
condition:sAntecedent
#continue
"=>"
=> pushItem theStrategy.rules;
=> insert theStrategy.rules#back.condition = sAntecedent;
=> pushItem theStrategy.rules#back.actions;
#readIdentifier:sAction
rule_action<sAction>(theStrategy.rules#back.actions#back)
[
',' #continue
=> pushItem theStrategy.rules#back.actions;
#readIdentifier:sAction
rule_action<sAction>(theStrategy.rules#back.actions#back)
]*
';'
;
rule_action<"duration">(theAction : node) ::=
#continue
=> theAction = "duration";
'('
street_segment(theAction.crossroad_entry)
','
time_sequence(theAction.durations)
')'
;
rule_action<"activate">(theAction : node) ::=
#continue
=> theAction = "activate";
'(' #readIdentifier:theAction.strategy ')'
;
rule_action<"desactivate">(theAction : node) ::=
=> theAction = "desactivate";
;
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
;
time_sequence(theSequence : node) ::=
#continue
=> pushItem theSequence;
timeInSeconds:theSequence#back
[
'/' #continue
=> pushItem theSequence;
timeInSeconds:theSequence#back
]+
;
timeInSeconds:value ::=
#readInteger:iMin
#continue
"min"
=> timeInSeconds = $iMin * 60$;
#readInteger:iSec
=> timeInSeconds = $timeInSeconds + iSec$;
;
condition ::=
!'}'
[
#readCString
|
#readCChar
|
~[';' | "=>"]
]*
;
Generated by CodeWorker v3.11.0.1 from CWscript2HTML.cwp.