diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/reduce/rweb/reduce.spider |
Initial commit
Diffstat (limited to 'web/reduce/rweb/reduce.spider')
-rw-r--r-- | web/reduce/rweb/reduce.spider | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/web/reduce/rweb/reduce.spider b/web/reduce/rweb/reduce.spider new file mode 100644 index 0000000000..a4304aaf65 --- /dev/null +++ b/web/reduce/rweb/reduce.spider @@ -0,0 +1,302 @@ +# Copyright (c) 1991: Marcel Roelofs and Peter Gragert +# University of Twente, Enschede, The Netherlands +# +# @(#) reduce.spider (91/03/11) + +language REDUCE extension red + +at_sign @ + +comment begin <"%"> end <"%"> + +default translation <*> mathness no + +line begin <"%line"> end <> + +token identifier category simp +token number category simp +token newline category newline translation <> +token pseudo_semi category terminator translation <"\\rx"> + +module definition stmt use module_scrap + +default translation <"\\ro"-*> mathness no + +token * category binop translation <"\\eo*"> +token / category binop translation <"\\eo/"> +token < category binop +token > category binop +token = category binop +token . category binop tangleto <space-"."-space> + +token .^ category binop translation <"\\ro{.\\^}"> tangleto <space-".^"-space> +token .* category binop translation <"\\ro{.*}"> tangleto <space-".*"-space> +token .+ category binop translation <"\\ro{.+}"> tangleto <space-".+"-space> +token ./ category binop translation <"\\ro{./}"> tangleto <space-"./"-space> +token ^ category binop translation <"\\eo\\^"> +token ** category binop translation <"\\eo\\^"> +token := category binop translation <"\\ro{:=}"> +token != category binop translation <"\\ro\\NEQ"> tangleto <space-"neq"-space> +token <> category binop translation <"\\ro\\NEQ"> tangleto <space-"neq"-space> +token <= category binop translation <"\\ro\\leq"> +token >= category binop translation <"\\ro\\geq"> + +default translation <*> mathness no + +token + category unorbinop +token - category unorbinop +token ' category quote tangleto <space-"'"> +token '( category listopen translation <"'("> tangleto <space-"'("> +token '[ category listopen translation <"'["> tangleto <space-"'["> +token ( category open +token ) category close +token [ category simpopen +token ] category close +token { category simpopen translation <"$\\{$"> +token } category close translation <"$\\}$"> +token , category comma translation <"\\comma"-opt-1> +token ; category terminator translation <";"-break_space> +token $ category terminator translation <"\\$"-break_space> +token : category colon +token << category progn_begin translation <"\\LL"> tangleto <space-"<<"> +token >> category end translation <"\\RR"> tangleto <">>"-space> + +ilk bool_like category simp +ilk goto_like category simp +ilk function_like category simp + +default translation <*-space> + +ilk begin_like category begin +ilk if_like category if +ilk then_like category then +ilk else_like category else +ilk for_like category for +ilk do_like category do +ilk step_like category step +ilk repeat_like category repeat +ilk until_like category until +ilk on_like category switch +ilk return_like category return +ilk modedef_like category mode +ilk procmode_like category procmode +ilk proc_like category proc +ilk where_like category where +ilk decl_like category decl +ilk clear_like category clear +ilk lambda_like category lambda +ilk end_like category end translation <*> + +ilk not_like category unop translation <"\\R"> +ilk neq_like category binop translation <"\\ro\\NEQ"> +ilk and_like category binop translation <"\\ro\\W"> +ilk or_like category binop translation <"\\ro\\V"> +ilk leq_like category binop translation <"\\ro\\leq"> +ilk geq_like category binop translation <"\\ro\\geq"> + +reserved not ilk not_like +reserved neq ilk neq_like +reserved and ilk and_like +reserved or ilk or_like +reserved leq ilk leq_like +reserved geq ilk geq_like + +reserved begin ilk begin_like +reserved end ilk end_like + +reserved if ilk if_like +reserved then ilk then_like +reserved else ilk else_like + +reserved for ilk for_like +reserved each ilk for_like +reserved foreach ilk for_like +reserved all ilk for_like +reserved forall ilk for_like + +reserved do ilk do_like +reserved sum ilk do_like +reserved product ilk do_like +reserved collect ilk do_like +reserved conc ilk do_like +reserved let ilk do_like +reserved join ilk do_like + +reserved in ilk step_like +reserved step ilk step_like +reserved such ilk step_like +reserved that ilk step_like + +reserved repeat ilk repeat_like +reserved until ilk until_like + +reserved on ilk on_like +reserved off ilk on_like + +reserved go ilk goto_like +reserved to ilk goto_like +reserved goto ilk goto_like + +reserved return ilk return_like +reserved while ilk for_like + +reserved algebraic ilk modedef_like +reserved symbolic ilk modedef_like +reserved lisp ilk modedef_like + +reserved expr ilk procmode_like +reserved fexpr ilk procmode_like +reserved macro ilk procmode_like +reserved smacro ilk procmode_like + +reserved procedure ilk proc_like + +reserved where ilk where_like + +reserved scalar ilk decl_like +reserved integer ilk decl_like +reserved real ilk decl_like +reserved operator ilk decl_like +reserved array ilk decl_like +reserved matrix ilk decl_like +reserved linear ilk decl_like +reserved symmetric ilk decl_like +reserved antisymmetric ilk decl_like +reserved clear ilk clear_like + +reserved nil ilk bool_like +reserved t ilk bool_like + +reserved function ilk function_like +reserved lambda ilk lambda_like + +################################## +# The production rules +################################## + +# Emergency rules, WEAVE commands & comments +newline ? --> #2 +<cancel-"\\rx"> ignore_scrap ? --> #2 +<cancel> ignore_scrap --> terminator +terminator --> stmt +end --> simp + +# Simple expressions +simp <"\\Rs"-opt-3> simp --> simp +simp binop simp --> simp +simp <"\\bo"> unorbinop simp --> simp +<"\\uo"> (unop|unorbinop) simp --> simp + +simp <"\\Rs"-indent-cancel> stmt <outdent> --> stmt +simp binop <indent-cancel> stmt <outdent> --> stmt +simp <"\\bo"> unorbinop <indent-cancel> stmt <outdent> --> stmt +<"\\uo"> (unop|unorbinop) <indent-cancel> stmt <outdent> --> stmt + +quote <cancel> ? <cancel> --> simp +simp comma simp --> simp +simp terminator --> stmt +stmt stmt --> stmt + +# Lists and vectors +open <cancel> simp <cancel> close --> simp + +listopen simp [ open ] --> listopen simp simpopen +listopen [ open ] --> listopen simpopen +listopen <"$\\,$"> close --> simp +listopen simp close --> simp + +simpopen <"$\\,$"> close --> simp +simpopen <"\\Ri"-cancel> simp <cancel-"\\Ro"> close --> simp + +# Function calls +simp open <"$\\,$"> close --> simp +simp open <"\\Ri"-cancel> simp <cancel-"\\Ro"> close --> simp + +# Procedure definitions +(mode|procmode) proc --> proc +proc stmt* <force-indent> stmt <outdent-force> --> stmt +(simp|stmt) <force> proc --> proc + +# Declarations +mode <cancel> (terminator|open) --> #2 +mode stmt --> stmt +proc stmt begin [ decl stmt* <force> ] --> proc stmt begin stmt +(decl|clear|switch|do) stmt* <force> --> stmt + +# Blocks +[ simp <break_space> ] end --> stmt end +<force> begin <force> end --> simp +<force> begin <opt-7> stmt <force> end terminator <force> --> stmt +[ <force> begin <opt-7> stmt <force> end ] !terminator --> simp !terminator +progn_begin end --> simp +<force> progn_begin <indent-cancel> stmt <cancel-outdent> end terminator <force> --> stmt +[ <force> progn_begin <indent-cancel> stmt <cancel-outdent> end ] !terminator --> simp !terminator + +# For statements in all flavours +for for --> for +for [ simp colon <opt-3> simp ] --> for simp +for [ simp <"\\Rs"> (step|until|switch) <opt-3> simp ] --> for simp +[ <force> for simp <"\\Rs"> do <opt-1-indent> simp <outdent> ] (comma|close|else|end) --> simp (comma|close|else|end) +<force> for simp <"\\Rs"> do <opt-1-indent> simp terminator <outdent-force> --> stmt +<force> for simp <"\\Rs"> do <opt-1-indent> stmt <outdent> --> stmt + +# If statements +if simp <"\\Rs"> then <opt-1> --> ifthen +ifthen <indent> simp <"\\Rs"-outdent-force> else <opt-1> --> ifelse +ifelse [ ifelse <indent> simp <outdent> ] (comma|close|else|end) --> ifelse simp (comma|close|else|end) +ifelse [ (if|ifthen) <indent> simp <outdent> ] (comma|close|end) --> ifelse simp (comma|close|end) +[ <force> ifelse <indent> simp <outdent> ] (comma|close|else|end) --> simp (comma|close|else|end) +[ <force> (if|ifthen) <indent> simp <outdent> ] (comma|close|end) --> simp (comma|close|end) +<force> (ifthen|ifelse) <indent> simp terminator <outdent-force> --> stmt +<force> (ifthen|ifelse) <indent> stmt <outdent> --> stmt +ifelse [ (ifthen|ifelse) <indent> simp terminator <outdent-force> ] --> ifelse stmt +ifelse [ (ifthen|ifelse) <indent> stmt <outdent> ] --> ifelse stmt + +# Where +[ simp <"\\Rs"-opt-1> where simp ] (close|else|end) --> simp (close|else|end) +simp <"\\Rs"-opt-1> where stmt <force> --> stmt + +# Return statement +[ <force> return <indent> simp <outdent> ] (close|else|end) --> simp (close|else|end) +<force> return <indent> simp terminator <outdent-force> --> stmt +<force> return <indent> stmt <outdent> --> stmt + +# Repeat statements +[ <force> repeat <"\\Rs"-opt-7-indent> simp <outdent-force> until <indent> simp <outdent> ] (comma|close|else|end) --> simp (comma|close|else|end) +<force> repeat <"\\Rs"-opt-7-indent> simp <outdent-force> until <indent> simp terminator <outdent-force> --> stmt + +# Labels +!for [ <force-backup> simp colon <"\\Rs"-cancel> (simp|stmt|end) ] --> !for #4 + +# Module use +stmt <force> module_scrap terminator <force> --> stmt +module_scrap --> simp + +# Lambda calculus (far from complete and probably incorrect) +lambda simp --> lambda +lambda terminator --> lambda +open lambda close --> simp + +macros begin +\def\commentbegin{\{} +\def\commentend{\}} +\def\comma{$,{}$} +\def\uo#1{$#1$} +\def\ro#1{${}\mathrel{#1}{}$} +\def\bo#1{${}\mathbin{#1}{}$} +\def\eo#1{$#1$} +\def\NEQ{\hbox{$\ne$}} +\def\LL{$\ll\,$} +\def\RR{$\,\gg$} +\def\PS{\joinrel{+\equiv}} +\let\rx\relax +\newcount\extraindent +\def\Ri{\global\advance\extraindent by1} +\def\Ro{\global\advance\extraindent by-1} +\def\Rs{{ }} +\def\startline{\noindent\count255=\ind + \ifnum\extraindent=0\advance\count255by-2\fi + \hskip\count255 em} +\def\3#1{\hfil\ifnum#1=0\penalty-100\else\penalty#10\fi\hfilneg} +macros end + |