fun with DCG and parsing