Last active
November 28, 2018 21:26
-
-
Save blrB/f7f70bb32ac9d87e4af2faabf108f45c to your computer and use it in GitHub Desktop.
LOIS lab1 m4SCP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
m4include(m4define([m4currentFile],builtin(translit,__file__,\,/))builtin(regexp,m4currentFile,.*[/],\&)_config.m4) | |
M4SCS( | |
#include "../../include/sckp_keynodes.scsy" | |
// Location: /lib/chain/reverse | |
) | |
procedure(chain_reverse,[[ | |
msg_start = /"REVERS PROCEDURE START!\n"/, | |
msg_finish = /"REVERS PROCEDURE FINISH!\n"/, | |
push_first_singlet = "/lib/chain/push_first_singlet/chain_push_first_singlet", | |
push_singlet = "/lib/chain/push_singlet/chain_push_singlet", | |
get_next_singlet = "/lib/chain/get_next_singlet/chain_get_next_singlet", | |
reverse_msg_get_next = /"REVERS PROCEDURE[info]: get next\n"/, | |
reverse_msg_have_next = /"REVERS PROCEDURE[info]: have next\n"/, | |
read_param_then = /"REVERS PROCEDURE[info]: read param then\n"/, | |
read_param_else = /"REVERS PROCEDURE[info]: read param else\n"/, | |
read_param_then_in = /"REVERS PROCEDURE[info]: read param in then\n"/, | |
read_param_else_in = /"REVERS PROCEDURE[info]: read param in else\n"/, | |
prm1,prm2,prm3,prm4,prm5,prm3_1,prm3_2,prm3_3,prm4_1,prm4_2,prm4_3, | |
reverse_prm1,reverse_prm2,reverse_prm3,reverse_prm4 | |
]], | |
[{ | |
empty, | |
chain_next, | |
el_next, | |
chain_head, | |
last_in_new_chain, | |
parameters_next, | |
then, | |
else, | |
then_routine, | |
then_parameters, | |
else_routine, | |
else_parameters, | |
state, | |
true, | |
stack, | |
parameters, | |
logger, | |
descr | |
}], | |
{[ | |
1_: in_: out_: state, | |
2_: in_: out_: true, | |
3_: in_: out_: stack, | |
4_: in_: parameters, | |
5_: in_: logger | |
]}) | |
// START *********************************************************************************************** START | |
M4SCS( | |
print([1_: fixed_: msg_start]) | |
) | |
genEl([1_: assign_: const_: undf_: empty]) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm1=[{1_: stack, 2_: chain_next, 3_: chain_head}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
M4SCS( | |
print([1_: fixed_: read_param_then]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm3=[{1_: parameters, 2_: parameters_next, 3_: then}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
ifVarAssign([ | |
1_: then | |
],,reverse_start) | |
M4SCS( | |
print([1_: fixed_: read_param_else]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm4=[{1_: parameters_next, 2_: parameters_next, 3_: else}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
// --------------------------------- --------------------------------- --------------------------------- | |
label(reverse_start) | |
ifVarAssign([ | |
1_: chain_head | |
], ,chain_error) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: reverse_prm1=[{1_: chain_head, 2_: chain_next, 3_: el_next}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
ifVarAssign([1_: el_next],,reverse_exit) | |
M4SCS( | |
print([1_: fixed_: reverse_msg_have_next]) | |
) | |
call([1_: fixed_: push_first_singlet, | |
2_: fixed_: reverse_prm2=[{1_: el_next, 2_: last_in_new_chain, 3_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
label(get_next) | |
M4SCS( | |
print([1_: fixed_: reverse_msg_get_next]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: reverse_prm3=[{1_: chain_next, 2_: chain_next, 3_: el_next}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
ifVarAssign([1_: el_next],,reverse_exit) | |
M4SCS( | |
print([1_: fixed_: reverse_msg_have_next]) | |
) | |
call([1_: fixed_: push_singlet, | |
2_: fixed_: reverse_prm4=[{1_: last_in_new_chain, 2_: el_next, 3_: last_in_new_chain, 4_: logger}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr],get_next,get_next) | |
// --------------------------------- --------------------------------- --------------------------------- | |
label(reverse_exit) | |
ifVarAssign([ | |
1_: last_in_new_chain | |
],,chain_error) | |
call([1_: fixed_: push_singlet, | |
2_: fixed_: prm2=[{1_: stack, 2_: last_in_new_chain, 3_: stack, 4_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
// THEN *********************************************************************************************** THEN | |
ifVarAssign([ | |
1_: then | |
],,finish) | |
M4SCS( | |
print([1_: fixed_: read_param_then_in]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prmg3_1 = [{1_: then, 2_: then, 3_: then_routine}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr]) | |
ifVarAssign([ | |
1_: then_routine | |
],,set_state_true) | |
M4SCS( | |
print([1_: fixed_: read_param_then_in]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prmg3_2 = [{1_: then, 2_: then, 3_: then_parameters}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr]) | |
ifVarAssign([ | |
1_: then_parameters | |
], then_parameters_is_not_empty) | |
varAssign([ | |
1_: assign_: then_parameters, | |
2_: fixed_: empty | |
]) | |
label(then_parameters_is_not_empty) | |
ifCoin([ | |
1_: then_routine, | |
2_: then_parameters | |
], set_state_true) | |
call([1_: fixed_: then_routine, | |
2_: fixed_: prmr3_3 = [{1_: state, 2_: true, 3_: stack, 4_: then_parameters, 5_: logging}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr]) | |
label(set_state_true) | |
varAssign([ | |
1_: assign_: state, | |
2_: fixed_: true | |
],finish,finish) | |
// ELSE *********************************************************************************************** ELSE | |
label(chain_error) | |
ifVarAssign([ | |
1_: else | |
],,finish) | |
M4SCS( | |
print([1_: fixed_: read_param_else_in]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prmg4_1 = [{1_: else, 2_: else, 3_: else_routine}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr]) | |
ifVarAssign([ | |
1_: else_routine | |
],,finish) | |
M4SCS( | |
print([1_: fixed_: read_param_else_in]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prmg4_2 = [{1_: else, 2_: else, 3_: else_parameters}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr]) | |
ifVarAssign([ | |
1_: else_parameters | |
], else_parameters_is_not_empty) | |
varAssign([ | |
1_: assign_: else_parameters, | |
2_: fixed_: empty | |
]) | |
label(else_parameters_is_not_empty) | |
ifCoin([ | |
1_: else_routine, | |
2_: else_parameters | |
], finish) | |
call([1_: fixed_: else_routine, | |
2_: fixed_: prmr4_3 = [{1_: state, 2_: true, 3_: stack, 4_: else_parameters, 5_: logging}], | |
3_: assign_: descr]) | |
waitReturn([1_: fixed_: descr]) | |
// FINISH *********************************************************************************************** FINISH | |
label(finish) | |
M4SCS( | |
print([1_: fixed_: msg_finish]) | |
) | |
eraseEl([1_: f_: fixed_: empty]) | |
return([]) | |
end() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
m4include(m4define([m4currentFile],builtin(translit,__file__,\,/))builtin(regexp,m4currentFile,.*[/],\&)_config.m4) | |
M4SCS( | |
#include "../../include/sckp_keynodes.scsy" | |
// Location: /lib/test/reverse | |
) | |
procedure(test_reverse,[[ | |
msg_start = /"TEST REVERS PROCEDURE START!\n"/, | |
msg_call = /"TEST REVERS PROCEDURE CALL!\n"/, | |
msg_call_finish = /"TEST REVERS PROCEDURE CALL FINISH!\n"/, | |
msg_finish = /"TEST REVERS PROCEDURE FINISH!\n"/, | |
msg_finish_ok = /"TEST FINISH OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"/, | |
push_first_singlet = "/lib/chain/push_first_singlet/chain_push_first_singlet", | |
push_singlet = "/lib/chain/push_singlet/chain_push_singlet", | |
get_next_singlet = "/lib/chain/get_next_singlet/chain_get_next_singlet", | |
pop_destroy_singlet = "/lib/chain/pop_destroy_singlet/chain_pop_destroy_singlet", | |
pop_destroy = "/lib/chain/pop_destroy/chain_pop_destroy", | |
reverse = "/lib/chain/reverse/chain_reverse", | |
prm_try_0, prm_try_1, prm_try_2, prm_try_3, prm_try_4, prm_try_5, prm_try_6, | |
prm1,prm2,prm3,prm4,prm5,prm6; | |
]], | |
[{ | |
new_chair, | |
empty, | |
state, | |
true, | |
stack, | |
parameters, | |
el_next, | |
chain_head, | |
logger, | |
el_1, | |
chain_1, | |
el_2, | |
chain_2, | |
el_head, | |
descr | |
}], | |
{[ | |
]}) | |
M4SCS( | |
print([1_: fixed_: msg_start]) | |
) | |
genEl([1_: assign_: const_: undf_: logger]) | |
genEl([1_: assign_: const_: undf_: el_1]) | |
genEl([1_: assign_: const_: undf_: el_2]) | |
genEl([1_: assign_: const_: undf_: el_head]) | |
genEl([1_: assign_: const_: undf_: empty]) | |
call([1_: fixed_: push_first_singlet, | |
2_: fixed_: prm1=[{1_: el_1, 2_: chain_1, 3_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
call([1_: fixed_: push_singlet, | |
2_: fixed_: prm2=[{1_: chain_1, 2_: el_2, 3_: chain_2, 4_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
call([1_: fixed_: push_singlet, | |
2_: fixed_: prm3=[{1_: chain_2, 2_: el_head, 3_: chain_head, 4_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
genEl([1_: assign_: const_: undf_: state]) | |
genEl([1_: assign_: const_: undf_: true]) | |
call([1_: fixed_: push_first_singlet, | |
2_: fixed_: prm4=[{1_: chain_head, 2_: stack, 3_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
genEl([1_: assign_: const_: undf_: parameters]) | |
M4SCS( | |
print([1_: fixed_: msg_call]) | |
) | |
call([1_: fixed_: reverse, | |
2_: fixed_: prm5=[{1_: state, 2_: true, 3_: stack, 4_: parameters: 5_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
M4SCS( | |
print([1_: fixed_: msg_call_finish]) | |
) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm_try_0=[{1_: stack, 2_: stack, 3_: new_chair}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm_try_1=[{1_: new_chair, 2_: new_chair, 3_: el_next}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
ifVarAssign([1_: el_next],,finish) | |
ifCoin([1_: fixed_: el_next, | |
2_: fixed_: el_1],,finish) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm_try_2=[{1_: new_chair, 2_: new_chair, 3_: el_next}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
ifVarAssign([1_: el_next],,finish) | |
ifCoin([1_: fixed_: el_next, | |
2_: fixed_: el_2],,finish) | |
call([1_: fixed_: get_next_singlet, | |
2_: fixed_: prm_try_3=[{1_: new_chair, 2_: new_chair, 3_: el_next}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
ifVarAssign([1_: el_next],,finish) | |
ifCoin([1_: fixed_: el_next, | |
2_: fixed_: el_head],,finish) | |
M4SCS( | |
print([1_: fixed_: msg_finish_ok]) | |
) | |
M4SCS( | |
print([1_: fixed_: msg_call]) | |
) | |
call([1_: fixed_: reverse, | |
2_: fixed_: prm6=[{1_: state, 2_: true, 3_: empty, 4_: parameters: 5_: logger}], | |
3_: assign_: descr]) | |
waitReturn(1_: fixed_: descr) | |
M4SCS( | |
print([1_: fixed_: msg_call_finish]) | |
) | |
M4SCS( | |
print([1_: fixed_: msg_finish]) | |
) | |
eraseEl([1_: f_: fixed_: logger]) | |
return([]) | |
end() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment