Download TwoTowers 5.1 User Manual
Transcript
40
The Æmilia Compiler
choice
{
cond(prop_queue != list_cons()) ->
<compute_time_to_delivery, inf(2, 1)> .
Line_Updating(tail(prop_queue),
concat(new_prop_queue,
list_cons(record_cons(get(time_to_delivery,
first(prop_queue)) - 1,
get(tag,
first(prop_queue)))))),
cond(prop_queue = list_cons()) ->
<elapse_tick, _> . Line(new_prop_queue)
}
INPUT_INTERACTIONS
UNI receive;
elapse_tick
OUTPUT_INTERACTIONS
UNI deliver
ELEM_TYPE Receiver_Type(const boolean starting_bit)
BEHAVIOR
Receiver(boolean
expected_bit := starting_bit;
local boolean received_bit) =
choice
{
<receive_msg?(received_bit), _> . Receiver_Checking(expected_bit,
received_bit),
<elapse_tick, _> . Receiver(expected_bit)
};
Receiver_Checking(boolean expected_bit,
boolean received_bit;
void) =
choice
{
cond(received_bit = expected_bit) ->
<consume_msg, inf(2, 1)> . Receiver_Transmitting(!expected_bit,
received_bit),
cond(received_bit != expected_bit) ->
<idle, inf> . Receiver_Transmitting(expected_bit,
received_bit)
};
Receiver_Transmitting(boolean expected_bit,
boolean received_bit;
void) =
choice