X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/298c0379a9232762e373c048202ca941816d9072..4fc52153b366aae911eede7c404c24b0e74ab604:/src/module-parse.lisp diff --git a/src/module-parse.lisp b/src/module-parse.lisp index 8022bbf..9522085 100644 --- a/src/module-parse.lisp +++ b/src/module-parse.lisp @@ -48,22 +48,28 @@ ;;; Fragments. (define-pluggable-parser module code (scanner pset) - ;; `code' id `:' id [constraints] `{' c-fragment `}' + ;; `code' id `:' item-name [constraints] `{' c-fragment `}' ;; ;; constrains ::= `[' constraint-list `]' - ;; constraint ::= id+ + ;; constraint ::= item-name+ + ;; item-name ::= id | `(' id+ `)' (declare (ignore pset)) (with-parser-context (token-scanner-context :scanner scanner) - (flet ((kw () - (parse (seq ((kw :id)) - (intern (frob-identifier kw) 'keyword))))) + (labels ((kw () + (parse (seq ((kw :id)) + (intern (frob-identifier kw) 'keyword)))) + (item () + (parse (or (kw) + (seq (#\( (names (list (:min 1) (kw))) #\)) + names))))) (parse (seq ("code" (reason (kw)) #\: - (name (kw)) + (name (item)) (constraints (? (seq (#\[ (constraints (list (:min 1) - (list (:min 1) (kw)) + (list (:min 1) + (item)) #\,)) #\]) constraints)))