--- /dev/null
+#ifndef MSP_GL_SL_PREPROCESSOR_H_
+#define MSP_GL_SL_PREPROCESSOR_H_
+
+#include <sigc++/signal.h>
+#include "syntax.h"
+
+namespace Msp {
+namespace GL {
+namespace SL {
+
+class Tokenizer;
+
+class Preprocessor
+{
+public:
+ sigc::signal<void, const Version &> signal_version;
+ sigc::signal<void, StageType> signal_stage_change;
+
+private:
+ Tokenizer &tokenizer;
+
+public:
+ Preprocessor(Tokenizer &);
+
+ void preprocess();
+private:
+ void preprocess_version();
+ void preprocess_pragma();
+ void preprocess_pragma_msp();
+ void preprocess_stage();
+};
+
+} // namespace SL
+} // namespace GL
+} // namespace Msp
+
+#endif