diff options
author | bd <bdunaisky@umass.edu> | 2024-11-04 23:34:54 -0500 |
---|---|---|
committer | bd <bdunaisky@umass.edu> | 2024-11-04 23:34:54 -0500 |
commit | fdcf4be12c7c8913ccd26ebcab7cb05eb2abaa48 (patch) | |
tree | a09fe6542daab2aa92ad28ced3e7b87d7531021d /src | |
parent | eb660323ad8232978f98740634699e1363ca57bf (diff) |
Add keywords to lexer
Diffstat (limited to 'src')
-rwxr-xr-x | src/gscc | 8 | ||||
-rw-r--r-- | src/modules/lexer/lexer.scm | 12 | ||||
-rw-r--r-- | src/unit-tests/lexer/lexer-test.scm | 6 |
3 files changed, 21 insertions, 5 deletions
@@ -33,9 +33,11 @@ file on a success." (define (process file parse? assemble?) "Driver for lexing, parsing, and assembly generation." - (let ((port (open-input-file file))) - (set-current-input-port port) - (read-tokens) + (let* ((port (open-input-file file)) + (tokens (begin (set-current-input-port port) + (read-tokens)))) + ;; (when parse? + ;; ) (close-input-port port))) (define (postprocess file dest) diff --git a/src/modules/lexer/lexer.scm b/src/modules/lexer/lexer.scm index e07ab67..dae7107 100644 --- a/src/modules/lexer/lexer.scm +++ b/src/modules/lexer/lexer.scm @@ -30,7 +30,7 @@ current input port." 'semi-colon) ((char-alphabetic? chr) - (read-identifier chr)) + (lookup-keyword (read-identifier chr))) ((char-numeric? chr) (read-constant chr)) @@ -57,3 +57,13 @@ current input port." (read-identifier-helper (cons (read-char) chrs-so-far))) (#t (reverse chrs-so-far))))) (list->string (read-identifier-helper (list chr)))) + +(define (lookup-keyword id) + "Given identifier ID, converts it to a keyword +if one is known." + (let ((found (assoc + id + '(("int" . int) + ("void" . void) + ("return" . return))))) + (if found (cdr found) id))) diff --git a/src/unit-tests/lexer/lexer-test.scm b/src/unit-tests/lexer/lexer-test.scm index eb41b83..48291b9 100644 --- a/src/unit-tests/lexer/lexer-test.scm +++ b/src/unit-tests/lexer/lexer-test.scm @@ -65,8 +65,12 @@ (test-error (read-this "1foo") (read-tokens)) +(test-equal (read-this "void") + '(void) + (read-tokens)) + (test-equal (read-this "int main(void) {return 2;}") - '("int" "main" left-paren "void" right-paren open-brace "return" 2 semi-colon close-brace) + '(int "main" left-paren void right-paren open-brace return 2 semi-colon close-brace) (read-tokens)) |