June 2018 Update

This commit is contained in:
Ingy döt Net 2018-06-22 20:57:24 +00:00
parent ba8067c3b7
commit 22f33d4004
5278 changed files with 84726 additions and 14379 deletions

View file

@ -0,0 +1,118 @@
.ig
RPN parser implementation in TROFF
Originally written on November 21, 2017.
Modified for Rosettacode on December 3, 2017.
Stephanie Björk (Katt) <katt16777216@gmail.com>
..
.\" \(*A stack implementation
.nr Ac 0
.af Ac 1
.de APUSH
.if (\\n(Ac>=0)&(\\n(Ac<27) \{ \
. nr Ac +1
. af Ac A
. nr A\\n(Ac \\$1
. af Ac 1
\}
..
.de APOP
.if (\\n(Ac>0)&(\\n(Ac<27) \{ \
. af Ac A
. rr A\\n(Ac \\$1
. af Ac 1
. nr Ac -1
..
.\" Facility to print entire stack
.de L2
.af Ac 1
.if \\n(Li<=\\n(Ac \{ \
. af Li A
\\n(A\\n(Li
. af Li 1
. nr Li +1
. L2
\}
..
.de APRINT
.nr Li 1
.L2
.br
..
.\" Integer exponentiation algorithm
.de L1
.if \\n(Li<\\$2 \{ \
. nr Rs \\n(Rs*\\$1
. nr Li +1
. L1 \\$1 \\$2
\}
..
.de EXP
.nr Li 0
.nr Rs 1
.L1 \\$1 \\$2
..
.\" RPN Parser
.de REAP
.af Ac A
.nr O2 \\n(A\\n(Ac
.af Ac 1
.nr Ai \\n(Ac-1
.af Ai A
.nr O1 \\n(A\\n(Ai
.APOP
.APOP
..
.de RPNPUSH
.ie '\\$1'+' \{ \
. REAP
. nr Rs \\n(O1+\\n(O2
\}
.el \{ \
. ie '\\$1'-' \{ \
. REAP
. nr Rs \\n(O1-\\n(O2
\}
. el \{ \
. ie '\\$1'*' \{ \
. REAP
. nr Rs \\n(O1*\\n(O2
\}
. el \{ \
. ie '\\$1'/' \{ \
. REAP
. nr Rs \\n(O1/\\n(O2
\}
. el \{ \
. ie '\\$1'%' \{ \
. REAP
. nr Rs \\n(O1%\\n(O2
\}
. el \{ \
. ie '\\$1'^' \{ \
. REAP
. EXP \\n(O1 \\n(O2
\}
. el .nr Rs \\$1
\}
\}
\}
\}
\}
.APUSH \\n(Rs
.APRINT
..
.de RPNPRINT
.if \\n(Ac>1 .tm ERROR (rpn.roff): Malformed input expression. Evaluation stack size: \\n(Ac > 1 .
\\n(AA
..
.de RPNPARSE
.RPNPUSH \\$1
.ie \\n(.$>1 \{ \
. shift
. RPNPARSE \\$@
\}
.el .RPNPRINT
..
.RPNPARSE 3 4 2 * 1 5 - 2 3 ^ ^ / + \" Our input expression

View file

@ -0,0 +1,14 @@
3
3 4
3 4 2
3 8
3 8 1
3 8 1 5
3 8 4
3 8 4 2
3 8 4 2 3
3 8 4 8
3 8 16
3 0
3
3

View file

@ -0,0 +1,89 @@
.ig
===========================
Array implementation
===========================
..
.de end
..
.de array
. nr \\$1.c 0 1
. de \\$1.push end
. nr \\$1..\\\\n+[\\$1.c] \\\\$1
. end
. de \\$1.pop end
. if \\\\n[\\$1.c]>0 \{ \
. rr \\$1..\\\\n[\\$1.c]
. nr \\$1.c -1\
. \}
. end
. de \\$1.dump end
. nr i 0 1
. rm ou
. while \\\\n+i<=\\\\n[\\$1.c] \{ \
. as ou "\\\\n[\\$1..\\\\ni]
. \}
. tm \\\\*(ou
. rr i
. end
..
.ig
==========================
End array implementation
==========================
..
.array stack
.de hyper3
. nr rs 1
. nr i 0 1
. while \\n+i<=\\$2 .nr rs \\n(rs*\\$1
. rr i
..
.de pop2
. nr O2 \\n[\\$1..\\n[\\$1.c]]
. \\$1.pop
. nr O1 \\n[\\$1..\\n[\\$1.c]]
. \\$1.pop
..
.de rpn
. ie '\\$1'+' \{ \
. pop2 stack
. nr rs \\n(O1+\\n(O2
. \}
. el \{ \
. ie '\\$1'-' \{ \
. pop2 stack
. nr rs \\n(O1-\\n(O2
. \}
. el \{ \
. ie '\\$1'*' \{ \
. pop2 stack
. nr rs \\n(O1*\\n(O2
. \}
. el \{ \
. ie '\\$1'/' \{ \
. pop2 stack
. nr rs \\n(O1/\\n(O2
. \}
. el \{ \
. ie '\\$1'%' \{ \
. pop2 stack
. nr rs \\n(O1%\\n(O2
. \}
. el \{ \
. ie '\\$1'^' \{ \
. pop2 stack
. hyper3 \\n(O1 \\n(O2
. \}
. el .nr rs \\$1
. \}\}\}\}\}
.
. stack.push \\n(rs
. stack.dump
.
. if \\n(.$>1 \{ \
. shift
. rpn \\$@
. \}
..
.rpn 3 4 2 * 1 5 - 2 3 ^ ^ / +
.stack.dump

View file

@ -0,0 +1,14 @@
3
3 4
3 4 2
3 8
3 8 1
3 8 1 5
3 8 -4
3 8 -4 2
3 8 -4 2 3
3 8 -4 8
3 8 16
3 0
3
3