aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2013-06-17 05:27:37 +0000
committerdos-reis <gdr@axiomatics.org>2013-06-17 05:27:37 +0000
commit6d045b14a250fecdf63018c3bb55f36a8539194d (patch)
tree2498dde9d23d49014987e84f2e9e77de89162420 /src
parentc773f40fecf4755ea2a45e4e79ee37e0a1b45d54 (diff)
downloadopen-axiom-6d045b14a250fecdf63018c3bb55f36a8539194d.tar.gz
Consolidate parsers in one pamphlet.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog8
-rw-r--r--src/algebra/Makefile.am10
-rw-r--r--src/algebra/parsers.spad.pamphlet (renamed from src/algebra/spad-parser.spad)93
-rw-r--r--src/algebra/script-parser.spad50
-rw-r--r--src/algebra/string.spad.pamphlet7
-rw-r--r--src/interp/compiler.boot27
6 files changed, 96 insertions, 99 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index ea87f587..61d37b2b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2013-06-17 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * algebra/parsers.spad.pamphlet: New.
+ * algebra/script-parser.spad: Move content to parsers.spad.pamphlet.
+ Remove.
+ * algebra/spad-parser.spad: Likewise.
+
+
2013-06-15 Gabriel Dos Reis <gdr@integrable-solutions.net>
* interp/ht-util.boot (mkCurryFun): Import function name.
diff --git a/src/algebra/Makefile.am b/src/algebra/Makefile.am
index 9093e09f..642793f2 100644
--- a/src/algebra/Makefile.am
+++ b/src/algebra/Makefile.am
@@ -1368,7 +1368,6 @@ SPADFILES= \
$(OUTSRC)/sign.spad $(OUTSRC)/si.spad $(OUTSRC)/smith.spad \
$(OUTSRC)/solvedio.spad $(OUTSRC)/solvefor.spad $(OUTSRC)/solvelin.spad \
$(OUTSRC)/solverad.spad $(OUTSRC)/sortpak.spad $(OUTSRC)/space.spad \
- $(srcdir)/spad-parser.spad \
$(OUTSRC)/special.spad $(OUTSRC)/sregset.spad $(OUTSRC)/s.spad \
$(OUTSRC)/stream.spad $(OUTSRC)/string.spad $(OUTSRC)/sttaylor.spad \
$(OUTSRC)/sttf.spad $(OUTSRC)/sturm.spad $(OUTSRC)/suchthat.spad \
@@ -1384,7 +1383,7 @@ SPADFILES= \
$(OUTSRC)/utsode.spad \
$(OUTSRC)/variable.spad $(OUTSRC)/vector.spad $(OUTSRC)/view2D.spad \
$(OUTSRC)/view3D.spad $(OUTSRC)/viewDef.spad $(OUTSRC)/viewpack.spad \
- $(OUTSRC)/void.spad \
+ $(OUTSRC)/void.spad $(OUTSRC)/parsers.spad \
$(OUTSRC)/weier.spad $(OUTSRC)/wtpol.spad \
$(OUTSRC)/xlpoly.spad $(OUTSRC)/xpoly.spad \
$(OUTSRC)/ystream.spad \
@@ -2477,13 +2476,6 @@ $(builddir)/%.tex: $(srcdir)/%.pamphlet
$(oa_build_texdir)/diagrams.tex: $(oa_src_docdir)/diagrams.tex
@cp -p $< $@
-SPADPRSR.NRLIB/code.$(FASLEXT): spad-parser.spad
- $(COMPILE_SPAD)
-
-PARSER.NRLIB/code.$(FASLEXT): script-parser.spad
- $(COMPILE_SPAD)
-
-
$(INPUT)/TESTFR.input: $(srcdir)/fr.spad.pamphlet
$(oa_hammer) --tangle='TEST FR' --output=$@ $<
diff --git a/src/algebra/spad-parser.spad b/src/algebra/parsers.spad.pamphlet
index 4aab0e7a..9416bde5 100644
--- a/src/algebra/spad-parser.spad
+++ b/src/algebra/parsers.spad.pamphlet
@@ -1,4 +1,71 @@
---Copyright (C) 2007, Gabriel Dos Reis.
+\documentclass{article}
+\usepackage{open-axiom}
+
+\author{Gabriel Dos~Reis}
+
+\begin{document}
+
+\begin{abstract}
+\end{abstract}
+
+\tableofcontents
+\eject
+
+\section{Spad parser}
+
+<<package SPADPRSR SpadParser>>=
+)abbrev package SPADPRSR SpadParser
+++ Author: Gabriel Dos Reis
+++ Date Created: October 10, 2006
+++ Date Last Updated: November 12, 2007
+++ Description: This package provides a simple Spad algebra parser.
+++ Related Constructors: Syntax.
+++ See Also: Syntax.
+SpadParser(): Public == Private where
+ Public ==> with
+ parse: String -> List Syntax
+ ++ parse(f) parses the source file f (supposedly containing
+ ++ Spad algebras) and returns a List Syntax. The filename f
+ ++ is supposed to have the proper extension. Note that this
+ ++ function has the side effect of executing any system command
+ ++ contained in the file f, even if it might not be meaningful.
+
+ Private ==> add
+ parse f ==
+ parseSpadFile(f)$Lisp : List(Syntax)
+
+@
+
+
+\section{Script parser}
+
+<<package PARSER Parser>>=
+)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)
+
+@
+
+
+
+\section{License}
+<<license>>=
+--Copyright (C) 2007-2013, Gabriel Dos Reis.
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
@@ -28,24 +95,12 @@
--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.
+@
+<<*>>=
+<<license>>
-)abbrev package SPADPRSR SpadParser
-++ Author: Gabriel Dos Reis
-++ Date Created: October 10, 2006
-++ Date Last Updated: November 12, 2007
-++ Description: This package provides a simple Spad algebra parser.
-++ Related Constructors: Syntax.
-++ See Also: Syntax.
-SpadParser(): Public == Private where
- Public ==> with
- parse: String -> List Syntax
- ++ parse(f) parses the source file f (supposedly containing
- ++ Spad algebras) and returns a List Syntax. The filename f
- ++ is supposed to have the proper extension. Note that this
- ++ function has the side effect of executing any system command
- ++ contained in the file f, even if it might not be meaningful.
+<<package SPADPRSR SpadParser>>
+<<package PARSER Parser>>
- Private ==> add
- parse f ==
- parseSpadFile(f)$Lisp : List(Syntax)
+@
diff --git a/src/algebra/script-parser.spad b/src/algebra/script-parser.spad
deleted file mode 100644
index 404a7c00..00000000
--- a/src/algebra/script-parser.spad
+++ /dev/null
@@ -1,50 +0,0 @@
---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/algebra/string.spad.pamphlet b/src/algebra/string.spad.pamphlet
index 78bb6628..87f1f9e8 100644
--- a/src/algebra/string.spad.pamphlet
+++ b/src/algebra/string.spad.pamphlet
@@ -199,7 +199,7 @@ CharacterClass: Join(SetCategory, ConvertibleTo String,
++ \spadfunFrom{alphanumeric?}{Character} is true.
== add
- import %iinc: Integer -> Integer from Foreign Builtin
+ import %iinc: NonNegativeInteger -> PositiveInteger from Foreign Builtin
import %idec: Integer -> Integer from Foreign Builtin
Rep := IndexedBits(0)
@@ -240,7 +240,10 @@ CharacterClass: Join(SetCategory, ConvertibleTo String,
coerce(cl):OutputForm == (convert(cl)@String)::OutputForm
-- Stuff to make a legal SetAggregate view
- # a == (n := 0; for i in 0..%idec N | a.i repeat n := %iinc n; n)
+ # a ==
+ n := 0
+ for i in 0..%idec N | a.i repeat n := %iinc n
+ n
empty():% == charClass []
brace():% == charClass []
diff --git a/src/interp/compiler.boot b/src/interp/compiler.boot
index 1d2921eb..773aca8e 100644
--- a/src/interp/compiler.boot
+++ b/src/interp/compiler.boot
@@ -916,18 +916,13 @@ setqSingle(id,val,m,E) ==
$insideSetqSingleIfTrue: local:= true
--used for comping domain forms within functions
currentProplist:= getProplist(id,E)
- m'':=
- get(id,"mode",E) or getmode(id,E) or
- (if m=$NoValueMode then $EmptyMode else m)
- T:=
- eval or return nil where
- eval() ==
- T:= comp(val,m'',E) => T
- get(id,"mode",E) = nil and m'' ~= (maxm'':=maximalSuperType m'') and
- (T:=comp(val,maxm'',E)) => T
- (T:= comp(val,$EmptyMode,E)) and getmode(T.mode,E) =>
- assignError(val,T.mode,id,m'')
- T':= [x,m',e']:= coerce(T,m) or return nil
+ tm := get(id,"mode",E) or getmode(id,E) or
+ m=$NoValueMode => $EmptyMode
+ m
+ T := comp(val,tm,E) or return nil
+ if tm = $EmptyMode then -- newly defined variable.
+ T.env := addDomain(db,T.mode,T.env)
+ T' := [x,m',e'] := coerce(T,m) or return nil
if $profileCompiler then
not ident? id => nil
key :=
@@ -953,12 +948,6 @@ setqSingle(id,val,m,E) ==
["%LET",id,x]
[form,m',e']
-assignError(val,m',form,m) ==
- val =>
- stackMessage('"CANNOT ASSIGN: %1b OF MODE: %2pb TO: %3b OF MODE: %4bp",
- [val,m',form,m])
- stackMessage('"CANNOT ASSIGN: %1b TO: %2b OF MODE: %3pb",[val,form,m])
-
setqMultiple(nameList,val,m,e) ==
val is ["CONS",:.] and m=$NoValueMode =>
setqMultipleExplicit(nameList,uncons val,m,e)
@@ -1772,7 +1761,7 @@ tryCourtesyCoercion(T,m) ==
keyedSystemError("S2GE0016",['"coerce",
'"function coerce called from the interpreter."])
if $useRepresentationHack then
- T.rest.first := MSUBST("$",$Rep,second T)
+ T.mode := MSUBST("$",$Rep,second T)
T' := coerceEasy(T,m) => T'
T' := coerceSubset(T,m) => T'
T' := coerceHard(T,m) => T'