// K\ ͋C

regex := head body foot

head := <empty> | ^
foot := <empty> | $

body := concat | concat '|' body
concat := <empty> | closure concat
closure := factor
         | factor *  | factor +  | factor ?  | factor range
         | factor *? | factor +? | factor ?? | factor range ?

range := { n , m } | { n , } | { n }
factor := ( regex ) | prime

prime := . | refer | set | charactor | esc_char
set := [ set-term ] | [ ^ set-term ] | set-code

set-term := set-factor | set-factor - setfactor
set-factor := charactor

refer := \1 ... \9
set-code := \w | \W | \s | \S | \d | \D
esc_char := \n | \t | \0 | \xXX
