(define-module (language python modules re) #:export()) (define-sytax-rule (mk n tag str) (define n (f-seq tag (f-tag str)))) (mk f-. #:. ".") (mk f-^ #:^ "^") (mk f-$ #:$ "$") (define subexpr (f-list #:sub (f-seq (f-tag "(") f-start ee f-end (f-tag ")")))) (define f-back (f-or (f-list #:class (mk-token (f-reg! "[AZbBdDsSwS]"))) (mk-token (f-reg ".")))) (define (ch not) (f-list #:ch (f-or! (f-seq (f-char #\\) f-back) (mk-token (f-not! not))))) (define bbody (f-cons (ch "[\\]") (ff* (ch "[]\\]")))) (define choice (f-cons #:bracket (f-or! (f-seq "[^]" (f-out (list #:ch "^"))) (f-cons* (f-tag "[") (f? (f-seq (f-tag "^") (f-out #t))) bbody)))) (define-syntax-rule (mk-post q* str tag) (define q* ( (c) (.. c2 ((f-tag str) c)) ( (cons (list tag (car c)) (cdr c)))))) (mk-post q* "*" #:*) (mk-post q? "?" #:?) (mk-post q+ "+" #:+) (mk-post q* "*?" #:*?) (mk-post q? "??" #:??) (mk-post q+ "+?" #:+?) (define q-or ( (c) (.. (c2) ((f-seq (f-tag "|") e) '())) ( (list #:or c c2)))) (define q? ( (c) (.. c2 ((f-tag "*") c)) ( (cons (list #:* (car c)) (cdr c))))) (define group (lambda (f) ( (c1) (.. c2 (f '())) (with ((L (cons (cons I c2) L)) (I (+ i 1))) ( (list #:list (#:append c1 c2))))))) (define group-name (lambda (f name) ( (c1) (.. c2 (f '())) (with ((L (cons* (cons name c2) (cons I c2) L)) (I (+ i 1))) ( (list #:list (#:append c1 c2))))))) (define (incant name) ( (c) (let ((r (assoc name L))) (if r ( (.. (f-tag (cdr r)))) ( (error "group is not existing in the history")))))) (define (incant-rev name) ( (c) (let ((r (assoc name L))) (if r ( (.. (f-tag (reverse (cdr r))))) ( (error "group is not existing in the history")))))) (define (reverse-form x) (match x ((#:or x y) (list #:or (reverse-form x) (reverse-form y))) ((#:group f) (list #:group (reverse-form f))) ((#:?P< f n) (list #:?P< (reverse-form f) n)) ((#:?: f) (reverse-form f)) ((#:?P= name) (#:?P=-rev name)) ((#:?P=-rev name) (#:?P= name)) ((#:?if name yes no) (list #:?if-rev name (reverse-form yes) (reverse-form no))) ((#:?if-rev name yes no) (list #:?if name (reverse-form yes) (reverse-form no))) ((#:?= f ) (list #:?= (reverse-form f))) ((#:?! f ) (list #:?! (reverse-form f))) ((#:?<= f ) (list #:?<= f)) ((#:?