June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue