#include <string>
#include <iostream>
%%{
machine ADC;
separator = ' ';
eol = '\n';
simple_alphanum = [A-Z0-9];
simple_alpha = [A-Z];
escape = '\';
escaped_letter = [^ \n] | escape 's' | escape 'n' | escape escape;
feature_name = simple_alpha simple_alphanum{3};
base32_character = simple_alpha | [2-7];
encoded_cid = base32_character+;
my_cid = encoded_cid;
encoded_sid = base32_character{4};
my_sid = encoded_sid;
target_sid = encoded_sid;
parameter_value = escaped_letter+;
parameter_name = simple_alpha simple_alphanum;
named_parameter = parameter_name parameter_value?;
positional_parameter = parameter_value;
command_name = simple_alpha simple_alphanum{2};
u_message_header = 'U' command_name separator my_cid;
f_message_header = 'F' command_name separator my_sid separator (('+'|'-') feature_name)+;
de_message_header = ('D' | 'E') command_name separator my_sid separator (('+' | '-') feature_name)+;
cih_message_header = ('C' | 'I' | 'H') command_name;
b_message_header = 'B' command_name separator my_sid;
message_body = (
b_message_header
| cih_message_header
| de_message_header
| f_message_header
| u_message_header
| message_header
) (separator positional_parameter)* (separator named_parameter)*;
message = message_body? eol;
main: = message;
write data;
}%%
int main()
{
return 0;
}