(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: (lex "1")) (object-like-macro identifier: "__STDC_HOSTED__" body: (lex "1")) (object-like-macro identifier: "__STDC_VERSION__" body: (lex "201112L")) (object-like-macro identifier: "__DATE__" ;; TODO format should always be in ;; english, and not tranlated body: (lex (strftime "\"%b %_d %Y\"" now))) (object-like-macro identifier: "__TIME__" body: (lex (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 )