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:
parent
2cca09126e
commit
f152d7cd96
1 changed files with 20 additions and 21 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue