LstackG+
Jump to navigation
Jump to search
- The title of this article is not correct because of technical limitations. The correct title is actually <stack>+.
<stack>+ is a derivative of <stack> by the same author: User:None1.
There is almost no difference, except that <stack>+ has one more command: +, that decrements the top of stack.
Interpreter in JavaScript
function lstackgp(code,input){
var stack=[0],par=[];
var match={},cp=0,output='';
for(let i=0;i<code.length;i++){
if(code[i]=='<'){
par.push(i);
}
if(code[i]=='>'){
if(par.length==0){
return 'Unmatched >';
}
var b=par.pop();
match[b]=i;
match[i]=b;
}
}
if(par.length!=0){
return 'Unmatched <';
}
while(cp<code.length){
if('<stack>+'.includes(code[cp])==false){
cp=cp+1;
}
if(code[cp]=='<'){
if(stack[stack.length-1]==0){
cp=match[cp];
}else{
cp=cp+1;
}
continue;
}
if(code[cp]=='>'){
if(stack[stack.length-1]!=0){
cp=match[cp];
}else{
cp=cp+1;
}
continue;
}
if(code[cp]=='+'){
stack[stack.length-1]+=255;
stack[stack.length-1]%=256;
cp=cp+1;
continue;
}
if(code[cp]=='a'){
stack[stack.length-1]+=1;
stack[stack.length-1]%=256;
cp=cp+1;
continue;
}
if(code[cp]=='s'){
stack.push(0);
cp=cp+1;
continue;
}
if(code[cp]=='t'){
if(input.length==0){
stack.push(255);
}else{
var inch=input.charCodeAt(0);
input=input.slice(1);
stack.push(inch);
}
cp=cp+1;
continue;
}
if(code[cp]=='c'){
if(stack.length>=2){
output+=String.fromCharCode(stack.pop());
}
cp=cp+1;
continue;
}
if(code[cp]=='k'){
if(stack.length>=2){
stack.pop();
}
cp=cp+1;
continue;
}
}
return output
}
Note
This is the same as BFStack.