/
(?(DEFINE)
(?<program> ^ (?&rule)* (?&ws) $ )
(?<rule> (?&ws) (?&term) (?&ws) ( :\- (?&ws) (?&conj) )? \. \n* )
(?<conj> (?&term) (?&ws) ( , (?&ws) (?&term) (?&ws) )* )
(?<value> (?&atom) | (?&variable) )
(?<term> (?&atom) ( \( (?&ws) (?&value) (?&ws) ( , (?&ws) (?&value) (?&ws) )* \) )? )
(?<atom> \p{Ll} [\p{L}\d_]* )
(?<variable> [_\p{Lu}] [\p{L}\d_]* )
(?<ws> \s* ( %.* \s* )* )
)
(?&rule)
/
xg