diff options
author | Andy Wingo <wingo@pobox.com> | 2019-10-21 16:51:08 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-10-21 17:21:47 +0200 |
commit | f152d7cd961aa1637e6e71e99141ec0617e6f1ed (patch) | |
tree | 877b811a61a15d91846ae4cabd5bd128b8e20d53 | |
parent | 2cca09126e8416e4b5d4be2b1edd0c9f15e0bffa (diff) | |
download | guile-f152d7cd961aa1637e6e71e99141ec0617e6f1ed.tar.gz |
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.
-rw-r--r-- | module/ice-9/peg/using-parsers.scm | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/module/ice-9/peg/using-parsers.scm b/module/ice-9/peg/using-parsers.scm index 076de2999..359527c57 100644 --- a/module/ice-9/peg/using-parsers.scm +++ b/module/ice-9/peg/using-parsers.scm @@ -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)) |