implement preprocessor parser