token cr = /\n/;
token eq = /=/;
token tabs = /\t+/;
token hash = /#/;
token at = /[@]/;
token dash = /-/;
token specialcharacters = /[_*+%"'$`|&]+/;
token space = / +/;
token point = /[.]/;
token numbers = /[0-9]+/;
token string = /[a-zA-Z]+/;
token colon = /[:]/;
token coma = /,/;
token open_squarebracket = /[[]/;
token closesquarebracket = /[]]/;
token open_curlybracket = /[{]/;
token closecurlybracket = /[}]/;
token open_anglebracket = /[<]/;
token closeanglebracket = /[>]/;
token slash = /\//;
rule S = lines;
rule lines = line cr lines | cr lines | line;
rule line = freetextblock | list | assignment | assignment comment | comment;
rule freetextblock = at multiplealphanum cr freetext;
rule freetext = tabs hashglob cr freetext?;
rule assignment = string colon glob;
rule list = string colon cr listitem;
rule listitem = tabs dash glob cr listitem? | tabs comment cr listitem;
rule multiplealphanum = alphanum multiplealphanum?;
rule comment = hash glob;
rule hashglob = hash hashglob | any hashglob | any | hash;
rule glob = any glob | any;
rule any = alphanum
| space | point | coma | colon | eq | at | slash | dash
| specialcharacters
| open_squarebracket | open_curlybracket | open_anglebracket
| closesquarebracket | closecurlybracket | closeanglebracket;
rule alphanum = string | numbers;