(seq (#\( (names (list (:min 1) (kw))) #\))
names)))))
(parse (seq ("code"
- (reason (kw))
- #\:
- (name (item))
+ (reason (must (kw)))
+ (nil (must #\:))
+ (name (must (item)))
(constraints (? (seq (#\[
- (constraints (list (:min 1)
- (list (:min 1)
- (item))
- #\,))
+ (constraints
+ (list ()
+ (list (:min 1)
+ (error (:ignore-unconsumed t)
+ (item)
+ (skip-until ()
+ :id #\( #\, #\])))
+ #\,))
#\])
constraints)))
(fragment (parse-delimited-fragment scanner #\{ #\})))
- (add-to-module *module*
- (make-instance 'code-fragment-item
- :fragment fragment
- :constraints constraints
- :reason reason
- :name name)))))))
+ (when name
+ (add-to-module *module*
+ (make-instance 'code-fragment-item
+ :fragment fragment
+ :constraints constraints
+ :reason reason
+ :name name))))))))
;;; External files.
;; `demo' string `;'
(declare (ignore pset))
(with-parser-context (token-scanner-context :scanner scanner)
- (parse (seq ("demo" (string :string) #\;)
+ (parse (seq ("demo" (string (must :string)) (nil (must #\;)))
(format t ";; DEMO ~S~%" string)))))
(define-pluggable-parser module file (scanner pset)