diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 8 | ||||
-rw-r--r-- | src/algebra/Makefile.am | 10 | ||||
-rw-r--r-- | src/algebra/parsers.spad.pamphlet (renamed from src/algebra/spad-parser.spad) | 93 | ||||
-rw-r--r-- | src/algebra/script-parser.spad | 50 | ||||
-rw-r--r-- | src/algebra/string.spad.pamphlet | 7 | ||||
-rw-r--r-- | src/interp/compiler.boot | 27 |
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' |