(define-module (c ast) :use-module ((c to-token) :select (preprocessing-token->token)) :use-module ((c parse2) :select (build-lexical-analyzer make-parser error-procedure)) :use-module ((hnh util) :select (->>)) :use-module ((c flatten-begin) :select (flatten-begin remove-invalid-struct-like-declarations)) :export (build-ast)) (define (parse% lexical-analyzer) ((make-parser) lexical-analyzer error-procedure)) (define (build-ast cpp-tokens) (->> cpp-tokens ;;; 7. Whitespace tokens are discarded, each preprocessing token is converted into a token (map preprocessing-token->token) ;;; 8. All external objects and functions are resolved build-lexical-analyzer parse% flatten-begin remove-invalid-struct-like-declarations ))