summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Lavine <nlavine@haverford.edu>2011-03-06 00:09:16 -0500
committerAndy Wingo <wingo@pobox.com>2011-03-24 21:15:04 +0100
commit2a58757ecd0a2ede11e3fb550a0136098c96e859 (patch)
treecad938ed73aa5c9fccd9b763211439bedf5220d3
parent03c1e55afe58d7c1e82d91def25fbfb83be8dd7c (diff)
downloadguile-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.am1
-rw-r--r--module/ice-9/peg.scm38
-rw-r--r--module/ice-9/peg/match-record.scm43
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))