aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/algebra/ChangeLog7
-rw-r--r--src/algebra/Makefile.in13
-rw-r--r--src/algebra/Makefile.pamphlet13
-rw-r--r--src/algebra/exposed.lsp.pamphlet1
-rw-r--r--src/algebra/script-parser.spad50
-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
9 files changed, 169 insertions, 10 deletions
diff --git a/src/algebra/ChangeLog b/src/algebra/ChangeLog
index 5f0739de..56216965 100644
--- a/src/algebra/ChangeLog
+++ b/src/algebra/ChangeLog
@@ -1,5 +1,12 @@
2007-12-03 Gabriel Dos Reis <gdr@cs.tamu.edu>
+ * script-parser.spad: New.
+ * Makefile.pamphlet (axiom_algebra_layer_19): Include PARSER.o
+ (PARSER.NRLIB/code.$(FASLEXT)): New rule.
+ * exposed.lsp.pamphlet: Expose Parser constructor.
+
+2007-12-03 Gabriel Dos Reis <gdr@cs.tamu.edu>
+
* aggcat.spad.pamphlet: Update cached Lisp translations.
2007-12-02 Gabriel Dos Reis <gdr@cs.tamu.edu>
diff --git a/src/algebra/Makefile.in b/src/algebra/Makefile.in
index 4c82ec6e..3d9371db 100644
--- a/src/algebra/Makefile.in
+++ b/src/algebra/Makefile.in
@@ -731,7 +731,8 @@ axiom_algebra_layer_19 = \
RPOLCAT-.o RULECOLD.o SAOS.o SEGBIND.o \
SET.o SPECOUT.o SQMATRIX.o SWITCH.o \
SYMS.o SYMTAB.o SYSSOLP.o UTSCAT.o \
- UTSCAT-.o VARIABLE.o WFFINTBS.o SPADPRSR.o
+ UTSCAT-.o VARIABLE.o WFFINTBS.o SPADPRSR.o \
+ PARSER.o
axiom_algebra_layer_19_nrlibs = \
$(axiom_algebra_layer_19:.$(OBJEXT)=.NRLIB/code.$(OBJEXT))
@@ -901,15 +902,19 @@ $(axiom_build_texdir)/diagrams.tex: $(axiom_src_docdir)/diagrams.tex
$(INSTALL_DATA) $< $@
SYNTAX.NRLIB/code.$(FASLEXT): syntax.spad
- @ rm -rf $*.NRLIB
+ @ rm -rf SYNTAX.NRLIB
echo ")co $(srcdir)/syntax.spad" | ${INTERPSYS}
SPADPRSR.NRLIB/code.$(FASLEXT): spad-parser.spad
- @ rm -rf $*.NRLIB
+ @ rm -rf SPADPRSR.NRLIB
echo ")co $(srcdir)/spad-parser.spad" | ${INTERPSYS}
+PARSER.NRLIB/code.$(FASLEXT): script-parser.spad
+ @ rm -rf PARSER.NRLIB
+ echo ")co $(srcdir)/script-parser.spad" | ${INTERPSYS}
+
DOMAIN.NRLIB/code.$(FASLEXT): domain.spad
- @ rm -rf $*.NRLIB
+ @ rm -rf DOMAIN.NRLIB
echo ")co $(srcdir)/domain.spad" | ${INTERPSYS}
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 374c6c37..c24752fb 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -996,7 +996,8 @@ axiom_algebra_layer_19 = \
RPOLCAT-.o RULECOLD.o SAOS.o SEGBIND.o \
SET.o SPECOUT.o SQMATRIX.o SWITCH.o \
SYMS.o SYMTAB.o SYSSOLP.o UTSCAT.o \
- UTSCAT-.o VARIABLE.o WFFINTBS.o SPADPRSR.o
+ UTSCAT-.o VARIABLE.o WFFINTBS.o SPADPRSR.o \
+ PARSER.o
axiom_algebra_layer_19_nrlibs = \
$(axiom_algebra_layer_19:.$(OBJEXT)=.NRLIB/code.$(OBJEXT))
@@ -1854,15 +1855,19 @@ $(axiom_build_texdir)/diagrams.tex: $(axiom_src_docdir)/diagrams.tex
<<genericDOCfiles>>
SYNTAX.NRLIB/code.$(FASLEXT): syntax.spad
- @ rm -rf $*.NRLIB
+ @ rm -rf SYNTAX.NRLIB
echo ")co $(srcdir)/syntax.spad" | ${INTERPSYS}
SPADPRSR.NRLIB/code.$(FASLEXT): spad-parser.spad
- @ rm -rf $*.NRLIB
+ @ rm -rf SPADPRSR.NRLIB
echo ")co $(srcdir)/spad-parser.spad" | ${INTERPSYS}
+PARSER.NRLIB/code.$(FASLEXT): script-parser.spad
+ @ rm -rf PARSER.NRLIB
+ echo ")co $(srcdir)/script-parser.spad" | ${INTERPSYS}
+
DOMAIN.NRLIB/code.$(FASLEXT): domain.spad
- @ rm -rf $*.NRLIB
+ @ rm -rf DOMAIN.NRLIB
echo ")co $(srcdir)/domain.spad" | ${INTERPSYS}
@
diff --git a/src/algebra/exposed.lsp.pamphlet b/src/algebra/exposed.lsp.pamphlet
index 0439b369..94b05ddb 100644
--- a/src/algebra/exposed.lsp.pamphlet
+++ b/src/algebra/exposed.lsp.pamphlet
@@ -263,6 +263,7 @@
(|ParametricPlaneCurveFunctions2| . PARPC2)
(|ParametricSpaceCurveFunctions2| . PARSC2)
(|ParametricSurfaceFunctions2| . PARSU2)
+ (|Parser| . PARSER)
(|PartitionsAndPermutations| . PARTPERM)
(|PatternMatch| . PATMATCH)
(|PatternMatchAssertions| . PMASS)
diff --git a/src/algebra/script-parser.spad b/src/algebra/script-parser.spad
new file mode 100644
index 00000000..404a7c00
--- /dev/null
+++ b/src/algebra/script-parser.spad
@@ -0,0 +1,50 @@
+--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.
+
+
+)abbrev package PARSER Parser
+++ Author: Gabriel Dos Reis
+++ Date Created: December 02, 2007
+++ Date Last Updated: December 02, 2007
+++ Description: This package provides a simple Spad script parser.
+++ Related Constructors: Syntax.
+++ See Also: Syntax.
+Parser(): Public == Private where
+ Public ==> with
+ getSyntaxFormsFromFile: String -> List Syntax
+ ++ getSyntaxFormsFromFile(f) parses the source file f (supposedly
+ ++ containing Spad scripts) and returns a List Syntax. The
+ ++ filename f is supposed to have the proper extension. Note that
+ ++ source location information is not part of result.
+
+ Private ==> add
+ getSyntaxFormsFromFile f ==
+ getParseFormsFromFile(f)$Lisp : List(Syntax)
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]