C99
token:		keyword | identifier | constant | string-litteral | punctuator
							keyword:	"auto" | "break" | "case" | "char" | "const" | "continue"
									| "default" | "do" | "double" | "else" | "enum" | "extern"
									| "float" | "for" | "goto" | "if" | "inline" | "int" | "long"
									| "register" | "restrict" | "return" | "short" | "signed"
									| "sizeof" | "static" | "struct" | "switch" | "typedef"
									| "union" | "unsigned" | "void" | "volatile" | "while"
									| "_Bool" | "_Complex" | "_Imaginary"
							punctuator:	"[" | "]" | "(" | ")" | "{" | "}" | "." | "->" | "++" | "--"
									| "&" | "*" | "+" | "-" | "~" | "!" | "/" | "%" | "<<" | ">>"
									| "<" | ">" | "<=" | ">=" | "==" | "!=" | "^" | "|" | "&&"
									| "||" | "?" | ":" | ";" | "..." | "=" | "*=" | "/=" | "%="
									| "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "," | "#"
									| "##" | "<:" | ":>" | "<%" | "%>" | "%:" | "%:%:"
							type-specifier:		"void" | "char" | "short" | "int" | "long" | "float"
										| "double" | "signed" | "unsigned" | "_Bool"
										| "_Complex" | "_Imaginary" | struct-or-union-specifier
										| enum-specifier | typedef-name
							function-specifier:	"inline"
							function-specifier:	"inline"
							type-qualifier:	"const" | "restrict" | "volatile"
							pointer:	"*" type-qualifier-list-opt { "*" type-qualifier-list-opt }
							parameter-list:		parameter-declaration { "," parameter-declaration }
							parameter-declaration:	declaration-specifiers ( declarator
									| abstract-declarator-opt )
							identifier-list:	identifier { "," identifier }
							compound-statement:	{ block-item-list-opt }
							block-item-list:	block-item { block-item }
							block-item:	declaration | statement
							function-definition:	declaration-specifiers declarator declaration-list-opt
									compound-statement
							declaration-list:	declaration { declaration }
							digit:		"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
							lparen:		"("
									(rule 1)
							new-line:	"\n"
							==
							rule 1:		- there must not be preceding white spaces
							