aboutsummaryrefslogtreecommitdiff
path: root/src/interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp')
-rw-r--r--src/interp/ChangeLog6
-rw-r--r--src/interp/Makefile.in5
-rw-r--r--src/interp/Makefile.pamphlet5
-rw-r--r--src/interp/i-parser.boot79
4 files changed, 93 insertions, 2 deletions
diff --git a/src/interp/ChangeLog b/src/interp/ChangeLog
index af0bf9b4..4b2792a7 100644
--- a/src/interp/ChangeLog
+++ b/src/interp/ChangeLog
@@ -1,3 +1,9 @@
+2007-12-03 Gabriel Dos Reis <gdr@cs.tamu.edu>
+
+ * i-parser.boot: New.
+ * Makefile.pamphlet (i-parser.$(FASLEXT)): New rule.
+ (OBJS): Include i-parser.$(FASLEXT).
+
2007-11-29 Gabriel Dos Reis <gdr@cs.tamu.edu>
* Makefile.pamphlet (INOBJS): Lose varini.$(FASLEXT).
diff --git a/src/interp/Makefile.in b/src/interp/Makefile.in
index e34bbf53..a3834948 100644
--- a/src/interp/Makefile.in
+++ b/src/interp/Makefile.in
@@ -76,7 +76,7 @@ OBJS= vmlisp.$(FASLEXT) hash.$(FASLEXT) \
fortcall.$(FASLEXT) \
$(OPOBJS) \
$(OCOBJS) \
- $(BROBJS)
+ $(BROBJS) i-parser.$(FASLEXT)
interpsys_modules = $(patsubst %.$(FASLEXT), "%", $(OBJS))
INOBJS= setvart.$(FASLEXT)\
@@ -563,6 +563,9 @@ macros.$(FASLEXT): macros.lisp sys-macros.$(FASLEXT)
## posit.boot cparse.boot format.boot cstream.boot
##
+i-parser.$(FASLEXT): i-parser.boot cparse.$(FASLEXT) pf2sex.$(FASLEXT)
+ $(BOOTSYS) -- --compile --output=$@ --load-directory=. $<
+
pf2sex.$(FASLEXT): pf2sex.boot ptrees.$(FASLEXT)
$(BOOTSYS) -- --compile --output=$@ --load-directory=. $<
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index e78ff03c..509bb480 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -169,7 +169,7 @@ OBJS= vmlisp.$(FASLEXT) hash.$(FASLEXT) \
fortcall.$(FASLEXT) \
$(OPOBJS) \
$(OCOBJS) \
- $(BROBJS)
+ $(BROBJS) i-parser.$(FASLEXT)
interpsys_modules = $(patsubst %.$(FASLEXT), "%", $(OBJS))
@
@@ -888,6 +888,9 @@ macros.$(FASLEXT): macros.lisp sys-macros.$(FASLEXT)
## posit.boot cparse.boot format.boot cstream.boot
##
+i-parser.$(FASLEXT): i-parser.boot cparse.$(FASLEXT) pf2sex.$(FASLEXT)
+ $(BOOTSYS) -- --compile --output=$@ --load-directory=. $<
+
pf2sex.$(FASLEXT): pf2sex.boot ptrees.$(FASLEXT)
$(BOOTSYS) -- --compile --output=$@ --load-directory=. $<
diff --git a/src/interp/i-parser.boot b/src/interp/i-parser.boot
new file mode 100644
index 00000000..e4041438
--- /dev/null
+++ b/src/interp/i-parser.boot
@@ -0,0 +1,79 @@
+-- Copyright (C) 2007, Gabriel Dos Reis.
+-- All rights reserved.
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions are
+-- met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--%
+--% This file provides interface to the interperter parser (which is
+--% different from the compiler parser). A higher level interface
+--% to these low level facilities exists in the algrebra as domain Parser.
+--%
+
+import '"cparse"
+import '"pf2sex"
+)package "BOOT"
+
+++ returns the list of tokens making up a line in the stream `s'
+tokenizeLine s ==
+ [dq, stream] := car s
+ [lines, rest] := ncloopDQlines(dq, $lines)
+ setCurrentLine(mkLineList lines)
+ $lines := rest
+ [[npParse dqToList dq], :cdr s]
+
+++ parse the IO stream `s' obtained from file `f'
+parseStream(s, f) ==
+ $lines := incStream(s, f)
+ collectParsedLines(
+ next(function tokenizeLine,
+ next(function insertpile,
+ next(function lineoftoks, $lines))), nil)
+
+++ return the list of all tokens making up the stream `s'
+collectTokens s ==
+ StreamNull s => nil
+ ts := car s
+ [ts, :collectTokens cdr s]
+
+++ return the list of parsed lines from stream `s'. `p' is the list
+++ of parsed lines collected so far.
+collectParsedLines(s, p) ==
+ StreamNull s => p
+ ptree := car s
+ collectParsedLines(cdr s, [:p, ptree])
+
+++ parse the whole file `file'. Returns a list of parse tree
+++ containing full source location information.
+parseInputFile file ==
+ WITH_-OPEN_-FILE(st file, parseStream(st, file))
+
+++ Same as parseInputFile, but returns a parse form, instead of
+++ of a parse tree, i.e. source location information left out.
+getParseFormsFromFile file ==
+ [zeroOneTran packageTran pf2Sex t for t in parseInputFile file]