diff options
Diffstat (limited to 'modules/language/python/module/re/parser.scm')
-rw-r--r-- | modules/language/python/module/re/parser.scm | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/modules/language/python/module/re/parser.scm b/modules/language/python/module/re/parser.scm index 45a7a5c..144d974 100644 --- a/modules/language/python/module/re/parser.scm +++ b/modules/language/python/module/re/parser.scm @@ -29,7 +29,9 @@ (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 coment (f-and + (f-seq "(?#" (f* (f-not (f-tag ")"))) ")") + f-true)) (define repn? (f-list #:rep? "{" number "}" "?")) (define repnm? (f-list #:rep? "{" number "," number "}" "?")) (define repn (f-list #:rep "{" number "}")) @@ -40,7 +42,17 @@ (define rev (f-list #:?<= "(?<=" (Ds ee) ")")) (define rev! (f-list #:?<! "(?<!" (Ds ee) ")")) - +(define flags (f-list #:flags "(?" + (mk-token (f* (f-reg! "[aiLmsux]"))) + (f-or! + (f-seq "-" (mk-token (f+ (f-reg! "[imsx]")))) + (f-out "")) + ":" + (Ds ee) ")")) +(define flags2 (f-list #:flags2 "(?" + (mk-token (f* (f-reg! "[aiLmsux]"))) + ")")) + (define bbody (f-cons (ch (f-reg "[\\]")) (ff* (ch (f-reg "[]\\]"))))) (define (f-if a b c) (f-or! (f-seq a b) c)) @@ -56,7 +68,7 @@ (define f-bar (f-tag "|")) (define qq (ch (f-reg "[][?+|*.$^()\\]"))) -(define atom (f-or qq f-. choice subexpr anongroup namegroup incant coment lookh lookh! rev rev! f-^ f-$)) +(define atom (f-or qq f-. flags2 flags choice subexpr anongroup namegroup incant coment lookh lookh! rev rev! f-^ f-$)) (define spec (f-list #:op atom (f-or! q+? q?? q*? q* q? q+ repn? repnm? repn repnm))) (define aatom (f-or! spec atom)) (define line (f-cons* #:seq aatom (ff* aatom ))) |