From ab8cc85adde879fb963c94d15675783f2cf4b183 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Tue, 14 Aug 2007 05:14:52 +0000 Subject: Initial population. --- src/interp/metameta.lisp.pamphlet | 384 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 src/interp/metameta.lisp.pamphlet (limited to 'src/interp/metameta.lisp.pamphlet') diff --git a/src/interp/metameta.lisp.pamphlet b/src/interp/metameta.lisp.pamphlet new file mode 100644 index 00000000..47070f8d --- /dev/null +++ b/src/interp/metameta.lisp.pamphlet @@ -0,0 +1,384 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/interp metameta.lisp} +\author{Timothy Daly} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{License} +<>= +;; Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +;; 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. + +@ +<<*>>= +<> + +; .META(META PROGRAM) +; .PREFIX 'PARSE-' +; .PACKAGE 'PARSING' +; .DECLARE(METAPGVAR METAVARLST METAKEYLST METARULNAM TRAPFLAG) + +(IN-PACKAGE "BOOT") + +(DEFPARAMETER METAPGVAR NIL) +(DEFPARAMETER METAVARLST NIL) +(DEFPARAMETER METAKEYLST NIL) +(DEFPARAMETER METARULNAM NIL) +(DEFPARAMETER TRAPFLAG NIL) + +; PROGRAM:! ! ='.FIN' ; + +(DEFUN PARSE-PROGRAM NIL + (AND (BANG |FIL_TEST| (OPTIONAL (STAR REPEATOR (PARSE-HEADER)))) + (BANG |FIL_TEST| (OPTIONAL (STAR REPEATOR (PARSE-RULE)))) + (MATCH-STRING ".FIN"))) + +; HEADER: '.META' '(' IDENTIFIER IDENTIFIER ! ')' .(SETQ XNAME ##3) +; / '.DECLARE' '(' IDENTIFIER* ')' .(PRINT-FLUIDS #1) +; / '.PREFIX' STRING .(SET-PREFIX #1) +; / '.PACKAGE' STRING .(PRINT-PACKAGE #1) ; + +(DEFUN PARSE-HEADER NIL + (OR (AND (MATCH-ADVANCE-STRING ".META") + (MUST (MATCH-ADVANCE-STRING "(")) + (MUST (PARSE-IDENTIFIER)) + (MUST (PARSE-IDENTIFIER)) + (BANG |FIL_TEST| (OPTIONAL (PARSE-IDENTIFIER))) + (MUST (MATCH-ADVANCE-STRING ")")) + (ACTION (SETQ XNAME (NTH-STACK 3)))) + (AND (MATCH-ADVANCE-STRING ".DECLARE") + (MUST (MATCH-ADVANCE-STRING "(")) + (MUST (STAR REPEATOR (PARSE-IDENTIFIER))) + (MUST (MATCH-ADVANCE-STRING ")")) + (ACTION (PRINT-FLUIDS (POP-STACK-1)))) + (AND (MATCH-ADVANCE-STRING ".PREFIX") + (MUST (PARSE-STRING)) + (ACTION (SET-PREFIX (POP-STACK-1)))) + (AND (MATCH-ADVANCE-STRING ".PACKAGE") + (MUST (PARSE-STRING)) + (ACTION (PRINT-PACKAGE (POP-STACK-1)))))) + +; RULE: RULE1 ';' .(PRINT-RULE #1) / ^='.FIN' .(META-SYNTAX-ERROR) ; + +(DEFUN PARSE-RULE NIL + (OR (AND (PARSE-RULE1) + (MUST (MATCH-ADVANCE-STRING ";")) + (ACTION (PRINT-RULE (POP-STACK-1)))) + (AND (NOT (MATCH-STRING ".FIN")) + (ACTION (META-SYNTAX-ERROR))))) + +; RULE1: IDENTIFIER .(SETQ METARULNAM (INTERN (STRCONC META_PREFIX ##1))) +; <'{' FID* '}'>! ':' EXPR =';' +; < =$METAPGVAR +(PROG =(TRANSPGVAR METAPGVAR) (RETURN #1)) +; .(SETQ METAPGVAR NIL) > +; +=(MAKE-DEFUN #3 #2 #1) ; + +(DEFUN PARSE-RULE1 NIL + (AND (PARSE-IDENTIFIER) + (ACTION (SETQ METARULNAM (INTERN (STRCONC |META_PREFIX| (NTH-STACK 1))))) + (BANG |FIL_TEST| + (OPTIONAL (AND (MATCH-ADVANCE-STRING "{") + (MUST (STAR REPEATOR (PARSE-FID))) + (MUST (MATCH-ADVANCE-STRING "}"))))) + (MUST (MATCH-ADVANCE-STRING ":")) + (MUST (PARSE-EXPR)) + (MUST (MATCH-STRING ";")) + (OPTIONAL (AND METAPGVAR + (PUSH-REDUCTION 'PARSE-RULE1 + (CONS 'PROG + (CONS (TRANSPGVAR METAPGVAR) + (CONS (CONS + 'RETURN + (CONS (POP-STACK-1) NIL)) + NIL)))) + (ACTION (SETQ METAPGVAR NIL)))) + (PUSH-REDUCTION 'PARSE-RULE1 + (MAKE-DEFUN (POP-STACK-3) (POP-STACK-2) (POP-STACK-1))))) + +; FID: IDENTIFIER +#1 ; + +(DEFUN PARSE-FID NIL + (AND (PARSE-IDENTIFIER) + (PUSH-REDUCTION 'PARSE-FID (POP-STACK-1)))) + +; EXPR: SUBEXPR +; < EXPR1* +(OR #2 -#1) +; / EXPR2* +(OR #2 -#1) > ; + +(DEFUN PARSE-EXPR NIL + (AND (PARSE-SUBEXPR) + (OPTIONAL (OR (AND (STAR REPEATOR (PARSE-EXPR1)) + (PUSH-REDUCTION 'PARSE-EXPR + (CONS 'OR + (CONS (POP-STACK-2) + (APPEND (POP-STACK-1) NIL))))) + (AND (STAR REPEATOR (PARSE-EXPR2)) + (PUSH-REDUCTION 'PARSE-EXPR + (CONS 'OR + (CONS (POP-STACK-2) + (APPEND (POP-STACK-1) NIL))))))))) + +; EXPR1: '/' <^'/'> SUBEXPR ; + +(DEFUN PARSE-EXPR1 NIL + (AND (MATCH-ADVANCE-STRING "/") + (OPTIONAL (NOT (MATCH-ADVANCE-STRING "/"))) + (MUST (PARSE-SUBEXPR)))) + +; EXPR2: '\\' <^'\\'> SUBEXPR ; + +(DEFUN PARSE-EXPR2 NIL + (AND (MATCH-ADVANCE-STRING "\\") + (OPTIONAL (NOT (MATCH-ADVANCE-STRING "\\"))) + (MUST (PARSE-SUBEXPR)))) + +; SUBEXPR:FIL_TEST <^?$TRAPFLAG FIL_TEST>*! +; >*! +; +(#3 -#2 -#1) +=(MAKE-PARSE-FUNCTION #1 "AND) ; + +(DEFUN PARSE-SUBEXPR NIL + (AND (PARSE-FIL_TEST) + (BANG |FIL_TEST| + (OPTIONAL (STAR |OPT_EXPR| + (AND (NOT TRAPFLAG) + (PARSE-FIL_TEST))))) + (BANG |FIL_TEST| + (OPTIONAL (STAR |OPT_EXPR| + (AND (PARSE-FIL_TEST) + (OPTIONAL (AND TRAPFLAG + (PUSH-REDUCTION 'PARSE-SUBEXPR + (CONS + 'MUST + (CONS (POP-STACK-1) NIL)))))) + ))) + (PUSH-REDUCTION 'PARSE-SUBEXPR + (CONS (POP-STACK-3) + (APPEND (POP-STACK-2) (APPEND (POP-STACK-1) NIL)))) + (PUSH-REDUCTION 'PARSE-SUBEXPR (MAKE-PARSE-FUNCTION (POP-STACK-1) 'AND)))) + +; FIL_TEST: REP_TEST <'!' +(BANG FIL_TEST #1)> ; + +(DEFUN PARSE-FIL_TEST NIL + (AND (PARSE-REP_TEST) + (OPTIONAL (AND (MATCH-ADVANCE-STRING "!") + (PUSH-REDUCTION 'PARSE-FIL_TEST + (CONS 'BANG + (CONS '|FIL_TEST| (CONS (POP-STACK-1) NIL)))))))) + +; REP_TEST: N_TEST ; + +(DEFUN PARSE-REP_TEST NIL + (AND (PARSE-N_TEST) + (OPTIONAL (PARSE-REPEATOR)))) + +; N_TEST: '^' TEST +(NOT #1) / TEST ; + +(DEFUN PARSE-N_TEST NIL + (OR (AND (MATCH-ADVANCE-STRING "^") + (MUST (PARSE-TEST)) + (PUSH-REDUCTION 'PARSE-N_TEST (CONS 'NOT (CONS (POP-STACK-1) NIL)))) + (PARSE-TEST))) + +; TEST: IDENTIFIER ( '{' ! '}' +; +(=(INTERN (STRCONC META_PREFIX #2)) -#1) +; / +(=(INTERN (STRCONC META_PREFIX #1)))) .(SETQ TRAPFLAG T) +; / STRING +(MATCH-ADVANCE-STRING #1) .(SETQ TRAPFLAG T) +; / '=' REF_SEXPR .(SETQ TRAPFLAG T) +; / '?' REF_SEXPR .(SETQ TRAPFLAG NIL) +; / '.' SEXPR +(ACTION #1) .(SETQ TRAPFLAG NIL) +; / '+' CONS_SEXPR +(PUSH-REDUCTION =(LIST "QUOTE METARULNAM) #1) +; .(SETQ TRAPFLAG NIL) +; / '(' EXPR ')' .(SETQ TRAPFLAG T) +; / '<' EXPR '>' .(PARSE-OPT_EXPR) .(SETQ TRAPFLAG NIL) ; + +(DEFUN PARSE-TEST NIL + (OR (AND (PARSE-IDENTIFIER) + (MUST (OR (AND (MATCH-ADVANCE-STRING "{") + (BANG |FIL_TEST| (OPTIONAL (STAR REPEATOR (PARSE-SEXPR)))) + (MUST (MATCH-ADVANCE-STRING "}")) + (PUSH-REDUCTION 'PARSE-TEST + (CONS (INTERN (STRCONC + |META_PREFIX| + (POP-STACK-2))) + (APPEND (POP-STACK-1) NIL)))) + (PUSH-REDUCTION 'PARSE-TEST + (CONS (INTERN (STRCONC |META_PREFIX| (POP-STACK-1))) + NIL)))) + (ACTION (SETQ TRAPFLAG T))) + (AND (PARSE-STRING) + (PUSH-REDUCTION 'PARSE-TEST + (CONS 'MATCH-ADVANCE-STRING (CONS (POP-STACK-1) NIL))) + (ACTION (SETQ TRAPFLAG T))) + (AND (MATCH-ADVANCE-STRING "=") + (MUST (PARSE-REF_SEXPR)) + (ACTION (SETQ TRAPFLAG T))) + (AND (MATCH-ADVANCE-STRING "?") + (MUST (PARSE-REF_SEXPR)) + (ACTION (SETQ TRAPFLAG NIL))) + (AND (MATCH-ADVANCE-STRING ".") + (MUST (PARSE-SEXPR)) + (PUSH-REDUCTION 'PARSE-TEST (CONS 'ACTION (CONS (POP-STACK-1) NIL))) + (ACTION (SETQ TRAPFLAG NIL))) + (AND (MATCH-ADVANCE-STRING "+") + (MUST (PARSE-CONS_SEXPR)) + (PUSH-REDUCTION 'PARSE-TEST + (CONS 'PUSH-REDUCTION + (CONS (LIST 'QUOTE METARULNAM) (CONS (POP-STACK-1) NIL)))) + (ACTION (SETQ TRAPFLAG NIL))) + (AND (MATCH-ADVANCE-STRING "(") + (MUST (PARSE-EXPR)) + (MUST (MATCH-ADVANCE-STRING ")")) + (ACTION (SETQ TRAPFLAG T))) + (AND (MATCH-ADVANCE-STRING "<") + (MUST (PARSE-EXPR)) + (MUST (MATCH-ADVANCE-STRING ">")) + (ACTION (PARSE-OPT_EXPR)) + (ACTION (SETQ TRAPFLAG NIL))))) + +; SEXPR: IDENTIFIER / NUMBER / STRING / NON_DEST_REF / DEST_REF / LOCAL_VAR +; / '"' SEXPR +(QUOTE #1) / '=' SEXPR / '(' ! ')' ; + +(DEFUN PARSE-SEXPR NIL + (OR (PARSE-IDENTIFIER) + (PARSE-NUMBER) + (PARSE-STRING) + (PARSE-NON_DEST_REF) + (PARSE-DEST_REF) + (PARSE-LOCAL_VAR) + (AND (MATCH-ADVANCE-STRING "\"") + (MUST (PARSE-SEXPR)) + (PUSH-REDUCTION 'PARSE-SEXPR (CONS 'QUOTE (CONS (POP-STACK-1) NIL)))) + (AND (MATCH-ADVANCE-STRING "=") + (MUST (PARSE-SEXPR))) + (AND (MATCH-ADVANCE-STRING "(") + (BANG |FIL_TEST| (OPTIONAL (STAR REPEATOR (PARSE-SEXPR)))) + (MUST (MATCH-ADVANCE-STRING ")"))))) + +; REF_SEXPR: STRING +(MATCH-STRING #1) / SEXPR ; + +(DEFUN PARSE-REF_SEXPR NIL + (OR (AND (PARSE-STRING) + (PUSH-REDUCTION 'PARSE-REF_SEXPR (CONS 'MATCH-STRING (CONS (POP-STACK-1) NIL)))) + (PARSE-SEXPR))) + +; CONS_SEXPR: IDENTIFIER <^=(MEMBER ##1 METAPGVAR) +(QUOTE #1)> +; / LOCAL_VAR +(QUOTE #1) +; / '(' ! ')' +; / SEXPR ; + +(DEFUN PARSE-CONS_SEXPR NIL + (OR (AND (PARSE-IDENTIFIER) + (OPTIONAL (AND (NOT (MEMBER (NTH-STACK 1) METAPGVAR)) + (PUSH-REDUCTION 'PARSE-CONS_SEXPR + (CONS 'QUOTE (CONS (POP-STACK-1) NIL)))))) + (AND (PARSE-LOCAL_VAR) + (PUSH-REDUCTION 'PARSE-CONS_SEXPR (CONS 'QUOTE (CONS (POP-STACK-1) NIL)))) + (AND (MATCH-ADVANCE-STRING "(") + (BANG |FIL_TEST| (OPTIONAL (PARSE-SEXPR_STRING))) + (MUST (MATCH-ADVANCE-STRING ")"))) + (PARSE-SEXPR))) + +; SEXPR_STRING: CONS_SEXPR ! +(CONS #2 #1) +; / '-' CONS_SEXPR ! +(APPEND #2 #1) ; + +(DEFUN PARSE-SEXPR_STRING NIL + (OR (AND (PARSE-CONS_SEXPR) + (BANG |FIL_TEST| (OPTIONAL (PARSE-SEXPR_STRING))) + (PUSH-REDUCTION 'PARSE-SEXPR_STRING + (CONS 'CONS (CONS (POP-STACK-2) (CONS (POP-STACK-1) NIL))))) + (AND (MATCH-ADVANCE-STRING "-") + (MUST (PARSE-CONS_SEXPR)) + (BANG |FIL_TEST| (OPTIONAL (PARSE-SEXPR_STRING))) + (PUSH-REDUCTION 'PARSE-SEXPR_STRING + (CONS 'APPEND (CONS (POP-STACK-2) (CONS (POP-STACK-1) NIL))))))) + +; NON_DEST_REF: '##' NUMBER +(NTH-STACK #1) ; + +(DEFUN PARSE-NON_DEST_REF NIL + (AND (MATCH-ADVANCE-STRING "##") + (MUST (PARSE-NUMBER)) + (PUSH-REDUCTION 'PARSE-NON_DEST_REF (CONS 'NTH-STACK (CONS (POP-STACK-1) NIL))))) + +; DEST_REF: '#' NUMBER +=(LIST (INTERN (STRCONC 'POP-STACK-' (STRINGIMAGE #1)))) ; + +(DEFUN PARSE-DEST_REF NIL + (AND (MATCH-ADVANCE-STRING "#") + (MUST (PARSE-NUMBER)) + (PUSH-REDUCTION 'PARSE-DEST_REF + (LIST (INTERN (STRCONC "POP-STACK-" (STRINGIMAGE (POP-STACK-1)))))))) + +; LOCAL_VAR: '$' ( IDENTIFIER / NUMBER +=(GETGENSYM #1) .(PUSH ##1 METAPGVAR)) ; + +(DEFUN PARSE-LOCAL_VAR NIL + (AND (MATCH-ADVANCE-STRING "$") + (MUST (OR (PARSE-IDENTIFIER) + (AND (PARSE-NUMBER) + (PUSH-REDUCTION 'PARSE-LOCAL_VAR (GETGENSYM (POP-STACK-1))) + (ACTION (PUSH (NTH-STACK 1) METAPGVAR))))))) + +; OPT_EXPR: <'*' +(STAR OPT_EXPR #1) / REPEATOR> +(OPTIONAL #1) ; + +(DEFUN PARSE-OPT_EXPR NIL + (AND (OPTIONAL (OR (AND (MATCH-ADVANCE-STRING "*") + (PUSH-REDUCTION 'PARSE-OPT_EXPR + (CONS 'STAR + (CONS '|OPT_EXPR| + (CONS (POP-STACK-1) NIL))))) + (PARSE-REPEATOR))) + (PUSH-REDUCTION 'PARSE-OPT_EXPR (CONS 'OPTIONAL (CONS (POP-STACK-1) NIL))))) + +; REPEATOR: ('*' / BSTRING +(AND (MATCH-ADVANCE-STRING #1) (MUST ##1))) +; +(STAR REPEATOR #1) ; + +(DEFUN PARSE-REPEATOR NIL + (AND (OR (MATCH-ADVANCE-STRING "*") + (AND (PARSE-BSTRING) + (PUSH-REDUCTION 'PARSE-REPEATOR + (CONS 'AND + (CONS (CONS 'MATCH-ADVANCE-STRING + (CONS (POP-STACK-1) NIL)) + (CONS (CONS 'MUST (CONS (NTH-STACK 1) NIL)) + NIL)))))) + (PUSH-REDUCTION 'PARSE-REPEATOR + (CONS 'STAR (CONS 'REPEATOR (CONS (POP-STACK-1) NIL)))))) + +; .FIN ; +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} -- cgit v1.2.3