use compile-parse-rule instead of "sift"