Streamlining the new parser.

This commit is contained in:
Dominik Pantůček 2023-03-25 16:35:22 +01:00
parent cf6c4f321e
commit edd8b5ede7
3 changed files with 33 additions and 12 deletions

View file

@ -15,15 +15,18 @@ Symlinks to the member files serve as human-readable aliases.
The implementation handles situation when the human-readable name is The implementation handles situation when the human-readable name is
the member file and the symlink is the four-digit member id. the member file and the symlink is the four-digit member id.
Member File Preprocessing Member File Parsing
------------------------- -------------------
Member files are read line-by-line. Member files are read line-by-line.
Comments start with the ```#``` character and continue until the end Comments start with the ```#``` character and continue until the end
of particular line. of particular line.
Comments are stripped from each line before parsing. Comments are stripped from each line before parsing. The same applies
to leading and trailing whitespace after stripping comments.
Each line should contain a
Member File Grammar Member File Grammar
------------------- -------------------

View file

@ -44,7 +44,7 @@ BBSTOOL-DEPS=bbstool.scm testing.import.scm listing.import.scm \
utils.import.scm primes.import.scm member-record.import.scm \ utils.import.scm primes.import.scm member-record.import.scm \
configuration.import.scm progress.import.scm table.import.scm \ configuration.import.scm progress.import.scm table.import.scm \
cards.import.scm member2-record.import.scm \ cards.import.scm member2-record.import.scm \
member2-parser.import.scm member-parser.import.scm
BBSTOOL-SOURCES=bbstool.scm testing.scm listing.scm dictionary.scm \ BBSTOOL-SOURCES=bbstool.scm testing.scm listing.scm dictionary.scm \
month.scm period.scm ansi.scm member-file.scm \ month.scm period.scm ansi.scm member-file.scm \
@ -206,8 +206,8 @@ member2-record.so: member2-record.o
member2-record.o: member2-record.import.scm member2-record.o: member2-record.import.scm
member2-record.import.scm: $(MEMBER2-RECORD-SOURCES) member2-record.import.scm: $(MEMBER2-RECORD-SOURCES)
MEMBER2-PARSER-SOURCES=member2-parser.scm member2-record.import.scm MEMBER-PARSER-SOURCES=member-parser.scm member2-record.import.scm
member2-parser.so: member2-parser.o member-parser.so: member-parser.o
member2-parser.o: member2-parser.import.scm member-parser.o: member-parser.import.scm
member2-parser.import.scm: $(MEMBER2-PARSER-SOURCES) member-parser.import.scm: $(MEMBER-PARSER-SOURCES)

View file

@ -1,5 +1,5 @@
;; ;;
;; member2-parser.scm ;; member-parser.scm
;; ;;
;; Member file parsing. ;; Member file parsing.
;; ;;
@ -23,10 +23,10 @@
;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;; ;;
(declare (unit member2-parser)) (declare (unit member-parser))
(module (module
member2-parser member-parser
( (
parse-member-file parse-member-file
member-parser-tests! member-parser-tests!
@ -98,6 +98,7 @@
(mrp (parse-member-lines mr source))) (mrp (parse-member-lines mr source)))
mrp)) mrp))
;; Performs self-tests of the member-parser module.
(define (member-parser-tests!) (define (member-parser-tests!)
(run-tests (run-tests
member-parser member-parser
@ -113,11 +114,28 @@
(test-equal? preprocess-member-line (test-equal? preprocess-member-line
(preprocess-member-line "key value # spaces and comment after spaces") (preprocess-member-line "key value # spaces and comment after spaces")
"key value") "key value")
(test-false parse-member-line
(parse-member-line ""))
(test-eq? parse-member-line
(parse-member-line "key")
'key)
(test-equal? parse-member-line
(parse-member-line "key value")
'(key . "value"))
(test-equal? parse-member-line
(parse-member-line "key value")
'(key . "value"))
(test-equal? parse-member-line
(parse-member-line "key value and some")
'(key . "value and some"))
(test-equal? parse-member-line
(parse-member-line "key value lot of spaces")
'(key . "value lot of spaces"))
)) ))
) )
(import member2-parser) (import member-parser)
(member-parser-tests!) (member-parser-tests!)
(print (parse-member-file (make-member-record "joe" "members/joe" '()))) (print (parse-member-file (make-member-record "joe" "members/joe" '())))