A Python example of a recursive descent parser