thank me later

Webserv

CONFIG		:= *(ITEM);
BLOCK				:= OPEN_BRACE CONFIG CLOSE_BRACE;

ITEM				:= OWS (DIRECTIVE | CONTEXT | COMMENT);
DIRECTIVE			:= DIRECTIVE_COMMAND OWS SEMI_COLON;
CONTEXT				:= CONTEXT_COMMAND OWS BLOCK;
COMMENT				:= '#' [WORD *(RWS WORD)] '\n';

DIRECTIVE_COMMAND	:= COMMAND_LIKE;
CONTEXT_COMMAND		:= COMMAND_LIKE;
COMMAND_LIKE		:= COMMAND_NAME *(RWS COMMAND_ARGUMENT);

COMMAND_NAME		:= WORD;
ARGUMENT_NAME		:= WORD;

Basic Rules:

OCTET		:= %x00–FF;
CHAR		:= %x01-7F;
ECHAR		:= ESCAPE_CHAR OCTET;
VCHAR		:= ALPHANUM | SYMBOLS;

UC_ALPHA	:= %x41–5A;
LC_ALPHA	:= %x61–7A;
DIGIT		:= %x30–39;
SYMBOL		:= %x21-2F | %x3A-40 | %x5B-60 | %x7B-7E;

HEXDIGIT	:= DIGIT | %x41-46 | %x61-66;
HEXCHAR		:= HEXDIGIT HEXDIGIT;
HEXNUMBER	:= 1*(HEXDIGIT)

ALPHA		:= UC_ALPHA | LC_ALPHA;
ALPHANUM	:= ALPHA | DIGIT;

NUMBER		:= 1*(DIGIT);

DQUOTE		:= %x22;
SQUOTE		:= %x27;
SP			:= %x20;
HTAB		:= %x09;
CR			:= %x0D;
LF			:= %x0A;
PLUS		:= %x2B
MINUS		:= %x2D
OPEN_BRACE  := %7B;
PIPE		:= %7C;
CLOSE_BRACE := %7D;
TILDE		:= %7E
ESCAPE_CHAR	:= %x5C;

WSP			:= SP | HTAB | LF;
OWS			:= *(WSP);
RWS			:= WSP OWS;

CTL			:= %x00–1F;

CRLF		:= CR LF;
BIT			:= "0" | "1";


WORD_CHAR	:= ???;
WORD		:= 1*(WORD_CHAR);