1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Refactor PEG records

* module/ice-9/peg/using-parsers.scm (prec): Use SRFI-9 to define PEG
  record types.
  (peg:start, peg:end, peg:string, peg:tree, peg:substring): Implement
  in a more efficient way.
This commit is contained in:
Andy Wingo 2019-10-21 16:51:08 +02:00
parent 2cca09126e
commit f152d7cd96

View file

@ -21,10 +21,30 @@
#:use-module (ice-9 peg simplify-tree)
#:use-module (ice-9 peg codegen)
#:use-module (ice-9 peg cache)
#:use-module (srfi srfi-9)
#:export (match-pattern define-peg-pattern search-for-pattern
prec make-prec peg:start peg:end peg:string
peg:tree peg:substring peg-record?))
(define-record-type prec
(make-prec start end string tree)
peg-record?
(start prec-start)
(end prec-end)
(string prec-string)
(tree prec-tree))
(define (peg:start pm)
(and pm (prec-start pm)))
(define (peg:end pm)
(and pm (prec-end pm)))
(define (peg:string pm)
(and pm (prec-string pm)))
(define (peg:tree pm)
(and pm (prec-tree pm)))
(define (peg:substring pm)
(and pm (substring (prec-string pm) (prec-start pm) (prec-end pm))))
;;;
;;; Helper Macros
;;;
@ -93,24 +113,3 @@ execute the STMTs and try again."
(make-prec
at end string
(string-collapse match))))))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; PMATCH STRUCTURE MUNGING
;; Pretty self-explanatory.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define prec
(make-record-type "peg" '(start end string tree)))
(define make-prec
(record-constructor prec '(start end string tree)))
(define (peg:start pm)
(if pm ((record-accessor prec 'start) pm) #f))
(define (peg:end pm)
(if pm ((record-accessor prec 'end) pm) #f))
(define (peg:string pm)
(if pm ((record-accessor prec 'string) pm) #f))
(define (peg:tree pm)
(if pm ((record-accessor prec 'tree) pm) #f))
(define (peg:substring pm)
(if pm (substring (peg:string pm) (peg:start pm) (peg:end pm)) #f))
(define peg-record? (record-predicate prec))