New parsing approach.
This commit is contained in:
parent
364b76ae3a
commit
a716b0776f
3 changed files with 93 additions and 1 deletions
|
@ -30,6 +30,8 @@
|
|||
member2-record
|
||||
(
|
||||
make-member-record
|
||||
member-record-input-file
|
||||
member-record-set
|
||||
member-record-tests!
|
||||
)
|
||||
|
||||
|
@ -58,6 +60,26 @@
|
|||
(cadr args))
|
||||
pairs)))))))
|
||||
|
||||
;; Returns opened input file for this record (used by parser).
|
||||
(define (member-record-input-file mr)
|
||||
(open-input-file
|
||||
(dict-ref mr 'file-path)))
|
||||
|
||||
;; Sets pairs of keys/values for given member record.
|
||||
(define (member-record-set mr . args)
|
||||
(let loop ((args args)
|
||||
(mr mr))
|
||||
(if (null? args)
|
||||
mr
|
||||
(if (not (keyword? (car args)))
|
||||
(error 'member-record-set "Needs argument keyword" (car args))
|
||||
(if (null? (cdr args))
|
||||
(error 'member-record-set "Argument needs value" (car args))
|
||||
(loop (cddr args)
|
||||
(dict-set mr (string->symbol (keyword->string (car args)))
|
||||
(cadr args))))))))
|
||||
|
||||
;; Self-tests
|
||||
(define (member-record-tests!)
|
||||
(run-tests
|
||||
member-record
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue