-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathslashes.js
More file actions
83 lines (71 loc) · 2.72 KB
/
slashes.js
File metadata and controls
83 lines (71 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
function slash(prog) {
var all = "<span class='inputPost'>Input:</span> <span class='input'>"+prog+'</span><br>';
var res = "";
var print = "";
var state = 0;
var pattern = "";
var replacement = "";
function doSomething() {
curr = prog[0];
if (state == 0) { print += curr; }
if (state == 1) { pattern += curr; }
if (state == 2) { replacement += curr; }
}
function logPrint() {
// all += "<span class='printPost'>Print:<span> " + print + "<br>";
}
function logApply() {
// all += "<span class='applyPost'>Apply:</span> " +
// "<span class='slash'>/</span>" + "<span class='pattern'>" + pattern + "</span>" +
// "<span class='slash'>/</span>" + "<span class='replacement'>" + replacement + "</span>" +
// "<span class = 'slash'>/</span>" + prog + "<br>";
}
while (prog) {
console.log(prog);
var curr = prog[0];
// all += prog + '\n';
// console.log(pattern);
// Just for displaying
if (state == 1 && print!="") { logPrint(); res += print; print = ""; }
if (state == 3) {
var isVerbose = false;
var iters = 0; const MAX_ITERS = 1280;
while (prog.includes(pattern)) {
if (iters > MAX_ITERS) { print+='...'; break; }
iters++;
prog = prog? prog.replace(pattern, replacement) : prog;
// Just `prog = prog.replace(pat, rep);` might be good enough
// Was trying to get rid of the null character that was printing
// Thought maybe the replacement with an empty string pattern was undefined
if (isVerbose) { logApply(); }
}
if (!isVerbose) { logApply(); }
pattern = ""; replacement = "";
state = 0;
console.log(curr);
}
else {
if (curr == '\\') { prog = prog.slice(1); doSomething(); }
else if (curr == '/') { state++; }
else { doSomething(); }
prog = prog.slice(1);
}
}
// In case program ended in state 0 and there's still stuff to be printed
if (print!="") { logPrint(); res += print; print = ""; }
return res;
}
function interpSlashes(input) {
var inp = document.getElementById('input').value;
var out = document.getElementById('output');
lines = input.split('\n');
var stdin = document.getElementById("progInp").value;
var acc = "";
var result;
for (line of lines) {
acc += line;
if (line=="") { result = ""; }
else { result = slash(acc+stdin); }
out.innerHTML+=result+'\n';
}
}