SEFL Syntax - nets-cs-pub-ro/Symnet GitHub Wiki
SEFL Syntax
Base language structures
tag:'tag_id';'L3','L2'tag_expression: an arithmetic expression encolsed in square brackets using + or - and numbers or tags, parenthesis are not allowed;['L2' + 100],['L2' + 'L3' - 15 + 100]lvalue- Metadata field:
"id";"flag" - Tag expression:
tag_expression;['L2'],['L2' + 15]
- Metadata field:
rvalue:- Tag expression
- Metadata field
-
- or - and the above ones, no paranthesis;
[L2+ 100] + "sum" - 10 + ['L3']
- or - and the above ones, no paranthesis;
Instructions
One instruction per line, empty lines are allowed.
Only single line comments are allowed currently, a comment line starts with a #.
- Allocate
lvalue[, size], for example:"IPSrc", "L2+ 15, 100" if a tag expression is used, the size is mandatory. - Assign:
lvalue = rvalue - Constrain:
lvalue <- arithmetic_constraintlvalue <- ! arithmetic_constraintlvalue <- arithmetic_constraint | arithmetic_constraintlvalue <- arithmetic_constraint & arithmetic_constraint- any permutation of these using proper placing of the parenthesis
- Exists:
? lvalue
- If:
if (constrain_instruction) instruction_block else instruction_block - Create tag:
tag(id, tag_expression);tag(L2, 0),tag(Encap,L2- 200) - Instruction blocks:
- sequential instruction block(basic):
{instructions}
- sequential instruction block(basic):
- fork: `f{instructions}`
- parallel: `p{instructions}`
- Destroy tag:
untag(id) - Deallocate:
! lvalue
- Fail:
! - Forward:
-> port_id - Noop:
-