summaryrefslogtreecommitdiff
path: root/src/gscc
diff options
context:
space:
mode:
Diffstat (limited to 'src/gscc')
-rwxr-xr-xsrc/gscc23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/gscc b/src/gscc
index 801bdfe..7ee1bf1 100755
--- a/src/gscc
+++ b/src/gscc
@@ -1,9 +1,10 @@
#!/run/current-system/profile/bin/guile \
--e main -s
+-L ./src -e main -s
!#
-(use-modules (ice-9 getopt-long))
+(use-modules (ice-9 getopt-long)
+ (modules lexer lexer))
(define version "v0.1")
@@ -30,8 +31,11 @@ file on a success."
(zero? (system (string-concatenate `("gcc -E -P " ,file " -o " ,preprocessed-file-name))))
preprocessed-file-name)))
-(define (process file lex? parse? codegen?)
- "")
+(define (process file parse? assemble?)
+ "Driver for lexing, parsing, and assembly generation."
+ (let ((port (open-input-file file)))
+ (read-tokens-from-port port)
+ (close-input-port port)))
(define (postprocess file dest)
"Assembles and links file, producing an executable.
@@ -50,7 +54,7 @@ Returns #f on a failure, #t on a success."
(file (if (null? rest) #f (car rest))))
(cond
((option-ref options 'version #f)
- (display (string-concatenate `("gscc (the 'Guile Scheme C Compiler', " ,version ")"))))
+ (display (string-concatenate `("gscc (the 'Guile Scheme C Compiler', " ,version ")\n"))))
((not (equal? 1 (length rest))) (error "Wrong number of arguments."))
((or (not file)
(not (access? file R_OK))
@@ -58,13 +62,10 @@ Returns #f on a failure, #t on a success."
(#t
(let ((source (preprocess file)))
(when source
- (display (string-concatenate `("Preprocess reported success (wrote " ,source ").")))
+ (display (string-concatenate `("Preprocess reported success (wrote " ,source ").\n")))
(process source
- (option-ref options 'lex #f)
- (option-ref options 'parse #f)
- (option-ref options 'codegen #f))
- (newline)
- (display "Done!")))))))
+ (not (option-ref options 'lex #f))
+ (not (option-ref options 'parse #f)))))))))
;; Local Variables: