Streamlining the new parser.
This commit is contained in:
parent
cf6c4f321e
commit
edd8b5ede7
3 changed files with 33 additions and 12 deletions
|
@ -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
|
||||||
-------------------
|
-------------------
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -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)
|
||||||
|
|
|
@ -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" '())))
|
Loading…
Add table
Add a link
Reference in a new issue