fix grammar bug

v6.3-exception
Matthew Butterick 6 years ago
parent 28bc51a793
commit d92e06231a

@ -7,10 +7,10 @@ lookbehind : /"(" /"?" /"<" /"=" pat /")"
lookahead : /"(" /"?" /"=" pat /")" lookahead : /"(" /"?" /"=" pat /")"
choice : pat (/"|" pat)+ choice : pat (/"|" pat)+
repeat : repeatable [("*" | "+") ["?"] | "?"] repeat : repeatable [("*" | "+") ["?"] | "?"]
@repeatable : group | any | start | end | literals | chars @repeatable : group | any | start | end | literal | chars
group : /"(" pat /")" group : /"(" pat /")"
any : /"." any : /"."
start : /"^" start : /"^"
end : /"$" end : /"$"
literals : LITERAL+ literal : LITERAL
chars : /"[" LITERAL* /"]" chars : /"[" literal* /"]"

@ -5,23 +5,22 @@
(module+ reader (module+ reader
(provide read-syntax)) (provide read-syntax))
(define-lex-abbrev regex-chars (char-set "()*+?.^$|<!=[]")) (define-lex-abbrev reserved-chars (char-set "()*+?.^$|<!=[]"))
(define tokenize (define tokenize
(lexer (lexer
[(:+ "\n") (token 'NEWLINE lexeme)] [(:+ "\n") (token 'NEWLINE lexeme)]
[(from/stop-before ";" "\n") (token 'COMMENT #:skip? #t)] [(from/stop-before ";" "\n") (token 'COMMENT #:skip? #t)]
[(:+ whitespace) (token 'SP lexeme #:skip? #t)] [(:+ whitespace) (token 'SP lexeme #:skip? #t)]
[regex-chars lexeme] [reserved-chars lexeme]
[alphabetic (token 'LITERAL lexeme)])) [alphabetic (token 'LITERAL lexeme)]))
(define (read-syntax src ip) (define (read-syntax src ip)
(define parse-tree (parse (λ () (tokenize ip)))) (define parse-tree (parse (λ () (tokenize ip))))
(strip-context (strip-context
(with-syntax ([PT parse-tree]) (with-syntax ([PT parse-tree])
#'(module regexcellent-mod regexcellent-demo #'(module mod-name regexcellent-demo
(for ([line (in-list PT)]) (for-each displayln PT)))))
(displayln line))))))
(define-macro (top . LINES) #'(list . LINES)) (define-macro (top . LINES) #'(list . LINES))
@ -31,15 +30,16 @@
(define (pat . xs) (define (pat . xs)
(if (= (length xs) 1) (if (= (length xs) 1)
(car xs) (car xs)
(format "a sequence starting with ~a" (string-join xs ", followed by ")))) (format "a sequence (~a)" (string-join xs ", followed by "))))
(define (lookbehind pat) (define (lookbehind pat)
(format "a lookbehind assertion of ~a" pat)) (format "a lookbehind assertion of ~a" pat))
(define (lookahead pat) (define (lookahead pat)
(format "a lookahead assertion of ~a" pat)) (format "a lookahead assertion of ~a" pat))
(define (choice . pats) (define (choice . pats)
(format "a choice of ~a" (string-join pats "; or "))) (format "a choice of ~a" (string-join pats " or ")))
(define (repeat thing [quantifier #f] [maybe-non-greedy? #f]) (define (repeat thing [quantifier #f] [maybe-non-greedy? #f])
(string-join (string-join
@ -58,9 +58,9 @@
(define (any) "any character") (define (any) "any character")
(define (start) "the start of the input") (define (start) "the start of the input")
(define (end) "the end of the input") (define (end) "the end of the input")
(define (literal str) (~v str))
(define (literals . strs)
(format "the literal string ~v" (string-join strs "")))
(define (chars . lits) (define (chars . lits)
(format "any member of the character set {~a}" (string-join (map ~v lits) ", "))) (format "any member of the character set {~a}" (string-join (map ~a lits) " ")))
Loading…
Cancel
Save