function draw(grammar, ps, code, rotate, magnitude, root, width) {
let angle = Math.PI / 2;
let start = new ps.Point(width / 2, 475);
let stack = []
let curr = start;
let next = start;
let state = new State(curr, angle);
for (let char of code) {
switch(char) {
case "1":
next = new ps.Point(get_next(curr, angle, magnitude));
let seg = ps.Path.Line(curr, next);
seg.strokeColor = "black";
curr = next;
break;
case "0":
next = new ps.Point(get_next(curr, angle, magnitude));
let leaf = new ps.Path.Line(curr, next);
leaf.strokeColor = "black";
curr = next;
break;
case "[":
stack.push(new State(new paper.Point(curr), angle));
angle = turn_left(angle, rotate);
break;
case "]":
state = stack.pop();
curr = state.curr;
angle = turn_right(state.angle, rotate);
break;
}
}
}