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
@ -60,7 +60,7 @@
(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 (literals . strs) (define (literal str) (~v str))
(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