(define-module (language python module re parser) #:use-module (parser stis-parser) #:export(parse-reg e-matcher)) (define-syntax-rule (mk n tag str) (define n (f-seq tag (f-tag str)))) (mk f-. #:dot ".") (mk f-^ #:^ "^") (mk f-$ #:$ "$") (mk q* #:* "*") (mk q? #:? "?") (mk q+ #:+ "+") (mk q*? #:*? "*?") (mk q?? #:?? "??") (mk q+? #:+? "+?") (define subexpr (f-list #:sub (f-seq (f-tag "(") (Ds ee) (f-tag ")")))) (define f-back (f-or (f-list #:class (mk-token (f-reg! "[AZbBdDsSwntr]"))) (mk-token (f-reg ".")))) (define anongroup (f-list #:?: "(?:" (Ds ee) ")")) (define namegroup (f-list #:?P< "(?P<" (mk-token (f+ (f-not! (f-reg "[> ]")))) ">" (Ds ee) ")")) (define (ch not) (f-list #:ch (f-or! (f-seq (f-char #\\) f-back) (mk-token (f-not! not))))) (define number (mk-token (f+ (f-reg! "[0-9]")) string->number)) (define incant (f-list #:?P= "(?P=" (f-or! number (mk-token (f+ (f-not! (f-reg "[) ]"))))) ")")) (define coment (f-seq "(?#" (f* (f-not (f-tag ")"))) ")")) (define repn? (f-list #:rep? "{" number "}" "?")) (define repnm? (f-list #:rep? "{" number "," number "}" "?")) (define repn (f-list #:rep "{" number "}")) (define repnm (f-list #:rep "{" number "," number "}")) (define lookh (f-list #:?= "(?=" (Ds ee) ")")) (define lookh! (f-list #:?! "(?!" (Ds ee) ")")) (define rev (f-list #:?<= "(?<=" (Ds ee) ")")) (define rev! (f-list #:?