+static token_t pp_token;
+
+static inline void next_pp_token(void)
+{
+ lexer_next_preprocessing_token();
+ pp_token = lexer_token;
+}
+
+static void eat_until_newline(void)
+{
+ while(pp_token.type != '\n' && pp_token.type != T_EOF) {
+ next_pp_token();
+ }
+}
+
+static void error_directive(void)
+{
+ error_prefix();
+ fprintf(stderr, "#error directive: \n");
+
+ /* parse pp-tokens until new-line */
+}
+
+static void define_directive(void)
+{
+ lexer_next_preprocessing_token();
+ if(lexer_token.type != T_IDENTIFIER) {
+ parse_error("expected identifier after #define\n");
+ eat_until_newline();
+ }
+}
+
+static void ifdef_directive(int is_ifndef)
+{
+ (void) is_ifndef;
+ lexer_next_preprocessing_token();
+ //expect_identifier();
+ //extect_newline();
+}
+
+static void endif_directive(void)