diff options
author | Noah Lavine <nlavine@haverford.edu> | 2011-03-06 00:09:16 -0500 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-03-24 21:15:04 +0100 |
commit | 2a58757ecd0a2ede11e3fb550a0136098c96e859 (patch) | |
tree | cad938ed73aa5c9fccd9b763211439bedf5220d3 | |
parent | 03c1e55afe58d7c1e82d91def25fbfb83be8dd7c (diff) | |
download | guile-2a58757ecd0a2ede11e3fb550a0136098c96e859.tar.gz |
Factor PEG Structure
* modules/ice-9/peg.scm: remove the part that defines a match structure
* modules/ice-9/peg/match-record.scm: and put it here
* module/Makefile.am (ICE_9_SOURCES): Add match-record.scm.
-rw-r--r-- | module/Makefile.am | 1 | ||||
-rw-r--r-- | module/ice-9/peg.scm | 38 | ||||
-rw-r--r-- | module/ice-9/peg/match-record.scm | 43 |
3 files changed, 53 insertions, 29 deletions
diff --git a/module/Makefile.am b/module/Makefile.am index 24235c0f2..5a0e85640 100644 --- a/module/Makefile.am +++ b/module/Makefile.am @@ -202,6 +202,7 @@ ICE_9_SOURCES = \ ice-9/null.scm \ ice-9/occam-channel.scm \ ice-9/optargs.scm \ + ice-9/peg/match-record.scm \ ice-9/peg/codegen.scm \ ice-9/peg/simplify-tree.scm \ ice-9/peg/string-peg.scm \ diff --git a/module/ice-9/peg.scm b/module/ice-9/peg.scm index cb79c60f8..4269f9bc7 100644 --- a/module/ice-9/peg.scm +++ b/module/ice-9/peg.scm @@ -21,23 +21,24 @@ #:export (peg-parse ; define-nonterm ; define-nonterm-f - peg-match - peg:start - peg:end - peg:string - peg:tree - peg:substring - peg-record?) + peg-match) ; #:export-syntax (define-nonterm) #:use-module (ice-9 peg codegen) #:use-module (ice-9 peg string-peg) #:use-module (ice-9 peg simplify-tree) + #:use-module (ice-9 peg match-record) #:re-export (peg-sexp-compile define-grammar define-grammar-f define-nonterm keyword-flatten - context-flatten)) + context-flatten + peg:start + peg:end + peg:string + peg:tree + peg:substring + peg-record?)) ;;; ;;; Helper Macros @@ -96,26 +97,5 @@ execute the STMTs and try again." 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)) - ) diff --git a/module/ice-9/peg/match-record.scm b/module/ice-9/peg/match-record.scm new file mode 100644 index 000000000..87785a5f8 --- /dev/null +++ b/module/ice-9/peg/match-record.scm @@ -0,0 +1,43 @@ +;;;; match-record.scm --- records to hold PEG parser results +;;;; +;;;; Copyright (C) 2010, 2011 Free Software Foundation, Inc. +;;;; +;;;; This library is free software; you can redistribute it and/or +;;;; modify it under the terms of the GNU Lesser General Public +;;;; License as published by the Free Software Foundation; either +;;;; version 3 of the License, or (at your option) any later version. +;;;; +;;;; This library is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;;; Lesser General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU Lesser General Public +;;;; License along with this library; if not, write to the Free Software +;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +;;;; + +(define-module (ice-9 peg match-record) + #:export (prec make-prec peg:start peg:end peg:string + peg:tree peg:substring peg-record?)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;; 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)) |