Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,63 @@
|
|||
int Stack(10);
|
||||
int SP; \stack pointer
|
||||
|
||||
proc Push(N);
|
||||
int N;
|
||||
[Stack(SP):= N; SP:= SP+1];
|
||||
|
||||
func Pop;
|
||||
[SP:= SP-1; return Stack(SP)];
|
||||
|
||||
func Precedence(Op);
|
||||
int Op;
|
||||
case Op of
|
||||
^+, ^-: return 2;
|
||||
^*, ^/: return 3;
|
||||
^^: return 4
|
||||
other [];
|
||||
|
||||
proc ShowStack;
|
||||
int I;
|
||||
[ChOut(0, 9\tab\);
|
||||
for I:= 0 to SP-1 do
|
||||
[ChOut(0, Stack(I)); ChOut(0, ^ )];
|
||||
CrLf(0);
|
||||
];
|
||||
|
||||
char Str;
|
||||
int Token, Op1, Op2;
|
||||
[Str:= "3 + 4 * 2 / ( 1 - 5 ) ^^ 2 ^^ 3 ";
|
||||
SP:= 0;
|
||||
Text(0, "Input Output Stack^m^j");
|
||||
loop [repeat Token:= Str(0); Str:= Str+1;
|
||||
until Token # ^ ; \skip space characters
|
||||
if Token # $A0 \terminating space\ then
|
||||
[ChOut(0, Token); ChOut(0, 9\tab\)];
|
||||
case Token of
|
||||
^+, ^-, ^*, ^/, ^^:
|
||||
[Op1:= Token;
|
||||
loop [if SP <= 0 then quit; \empty
|
||||
Op2:= Stack(SP-1);
|
||||
if Op2 = ^( then quit;
|
||||
if Precedence(Op2) < Precedence(Op1) then quit;
|
||||
if Precedence(Op2) = Precedence(Op1) then
|
||||
if Op1 = ^^ then quit;
|
||||
ChOut(0, Pop);
|
||||
];
|
||||
Push(Op1);
|
||||
];
|
||||
^(: Push(Token);
|
||||
^): [while SP > 0 and Stack(SP-1) # ^( do
|
||||
ChOut(0, Pop);
|
||||
Pop; \discard left parenthesis
|
||||
];
|
||||
$A0: quit \terminating space with MSB set
|
||||
other ChOut(0, Token); \print single digit number
|
||||
ShowStack;
|
||||
];
|
||||
while SP > 0 do \print any remaining operators
|
||||
[ChOut(0, 9\tab\);
|
||||
ChOut(0, Pop);
|
||||
ShowStack;
|
||||
];
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue