Work on pass3+ infrastructure.
This commit is contained in:
parent
fb7f6bf67e
commit
a6043c0fc2
1 changed files with 33 additions and 2 deletions
|
@ -40,10 +40,19 @@
|
|||
testing
|
||||
dictionary)
|
||||
|
||||
;; TODO: move to separate schema module
|
||||
;; Pass 2: known keys and multikeys
|
||||
(define member-schema-known-keys '(nick mail phone name born joined destroyed))
|
||||
(define member-schema-known-multikeys '(card desfire credit studentstart studentstop suspendstart suspendstop))
|
||||
|
||||
;; Pass 3: Interpreter passes
|
||||
(define member-schema-interpreters
|
||||
`((pass-markers
|
||||
,(lambda (mr acc key value)
|
||||
mr))
|
||||
(info
|
||||
,(lambda (mr acc key value)
|
||||
mr))))
|
||||
|
||||
;; Pass 0: Removes any comments and removes any leading and trailing
|
||||
;; whitespace.
|
||||
(define (preprocess-member-line line)
|
||||
|
@ -124,12 +133,34 @@
|
|||
(member-record-add-highlight mr number "Unknown key" 2 'warning)
|
||||
processed)))))))
|
||||
|
||||
;; Pass 3+: Single interpreter pass
|
||||
(define (interpreter-pass mr output-name input pass-proc)
|
||||
(dict-set mr output-name '()))
|
||||
|
||||
;; Pass 3+: Interpreter passes
|
||||
(define (interpret-member-file mr . starts)
|
||||
(let ((input-name (if (null? starts)
|
||||
'processed
|
||||
(car starts))))
|
||||
(let loop ((passes member-schema-interpreters)
|
||||
(prev-name input-name)
|
||||
(mr mr))
|
||||
(if (null? passes)
|
||||
mr
|
||||
(let* ((pass (car passes))
|
||||
(pass-name (car pass))
|
||||
(pass-proc (cadr pass)))
|
||||
(loop (cdr passes)
|
||||
(caar passes)
|
||||
(interpreter-pass mr pass-name (dict-ref mr prev-name) pass-proc)))))))
|
||||
|
||||
;; Loads member file source. Performs passes 0, 1 and 2.
|
||||
(define (load-member-file mr)
|
||||
(let* ((mrif (member-record-input-file mr))
|
||||
(source (read-lines mrif))
|
||||
(mrp (parse-member-lines mr source)))
|
||||
(process-member-file mrp)))
|
||||
(interpret-member-file
|
||||
(process-member-file mrp))))
|
||||
|
||||
;; Performs self-tests of the member-parser module.
|
||||
(define (member-parser-tests!)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue