(define-module (c compiler) :use-module ((c lex2) :select (lex)) :use-module ((c trigraph) :select (replace-trigraphs)) :use-module ((c line-fold) :select (fold-lines)) :use-module (c cpp-environment object-like-macro) :use-module ((c cpp-environment) :select (make-environment extend-environment enter-file)) :use-module (hnh util) ;; TODO importort ;; handle-preprocessing-tokens ;; load-and-tokenize-file :export (run-compiler)) " #define __STDC__ 1 #define __STDC_HOSTED__ 1 #define __STDC_VERSION__ 201112L " (define now (localtime (current-time))) (define default-macros (list ;; 6.10.8 (object-like-macro identifier: "__STDC__" body: '(preprocessing-token (pp-number "1"))) (object-like-macro identifier: "__STDC_HOSTED__" body: '(preprocessing-token (pp-number "1"))) (object-like-macro identifier: "__STDC_VERSION__" body: '(preprocessing-token (pp-number "201112L"))) (object-like-macro identifier: "__DATE__" ;; TODO format should always be in ;; english, and not tranlated body: `(preprocessing-token (string-literal ,(strftime "%b %_d %Y" now)))) (object-like-macro identifier: "__TIME__" body: `(preprocessing-token (string-literal ,(strftime "%H:%M:%S" now)))))) (define environment (-> (make-environment) (extend-environment default-macros))) ;;; 5.1.11.2 Translation phases (define (run-compiler path) (define environment (enter-file (make-environment) path)) (-> (load-and-tokenize-file path) (handle-preprocessing-tokens environment)) ;;; 5. (something with character sets) ;;; 6. concatenation of string literals ;;; 7. Whitespace tokens are discarded, each preprocessing token is converted into a token ;; 6.4 paragraph 2 ;; Each preprocessing toket thas is converted to a token shall have the lexcal form of a keyword, an identifier, a constant, a string literal, or a puncturtor ;;; 8. All external objects and functions are resolved )