aboutsummaryrefslogtreecommitdiff
path: root/src/interp/i-parser.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-12-03 13:08:30 +0000
committerdos-reis <gdr@axiomatics.org>2007-12-03 13:08:30 +0000
commit669669e33a8b713011db7bb8b461d6291410ba3d (patch)
tree3924dede01f09abf05acfa2b0eb36910fbdecb40 /src/interp/i-parser.boot
parent23f51288a29fd387c8ae12b11f00b3e19a45f1d2 (diff)
downloadopen-axiom-669669e33a8b713011db7bb8b461d6291410ba3d.tar.gz
src/algebra/
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. src/interp/ 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).
Diffstat (limited to 'src/interp/i-parser.boot')
-rw-r--r--src/interp/i-parser.boot79
1 files changed, 79 insertions, 0 deletions
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]