git @ Cat's Eye Technologies Matchbox / ad1687d
This is far from beautiful code, but it's getting there. Chris Pressey 10 years ago
1 changed file(s) with 29 addition(s) and 16 deletion(s). Raw diff Collapse all Expand all
284284 return s;
285285 };
286286
287 this.parse = function(prog, reg, str) {
287 this.parse = function(reg, str) {
288 var prog = (new Program()).init({});
288289 var lines = str.split("\n");
289290 this.code = [];
290291 for (var i = 0; i < lines.length; i++) {
291292 if (!lines[i] || lines[i].charAt(0) === ';') continue;
292 var instr = (new Instruction()).init({
293 'reg': reg
294 });
295 if (instr.parse(lines[i])) {
296 prog.addInstruction(instr);
293 var progPragma = this.parseProgPragma(lines[i]);
294 if (typeof progPragma === 'number') {
295 alert(progPragma);
297296 } else {
298 alert("Syntax error on line " + (i+1));
299 }
300 }
301 return this;
297 var instr = (new Instruction()).init({ 'reg': reg });
298 if (instr.parse(lines[i])) {
299 prog.addInstruction(instr);
300 } else {
301 alert("Syntax error on line " + (i+1));
302 }
303 }
304 }
305 return prog;
306 };
307
308 this.parseProgPragma = function(str) {
309 var s = matchboxScanner;
310 s.reset(str);
311 if (s.onType('opcode') && s.token === 'PROG') {
312 s.scan();
313 if (s.onType('immediate')) {
314 return parseInt(s.token, 10);
315 }
316 }
317 return undefined;
302318 };
303319
304320 this.run = function(progText) {
305321 var regs = (new yoob.Tape()).init({ default: 0 });
306322 regs.style = "color: white; background: black;";
307 var prog = (new Program()).init({});
308 this.parse(prog, regs, progText);
323 var prog = this.parse(regs, progText);
309324
310325 var mem = (new yoob.Tape()).init({ default: 0 });
311326
318333 this.findRaceConditions = function(prog1text, prog2text) {
319334 var regs1 = (new yoob.Tape()).init({ default: 0 });
320335 regs1.style = "color: black; background: white;";
321 var prog1 = (new Program()).init({});
322 this.parse(prog1, regs1, prog1text);
336 var prog1 = this.parse(regs1, prog1text);
323337
324338 var regs2 = (new yoob.Tape()).init({ default: 0 });
325339 regs2.style = "color: white; background: black;";
326 var prog2 = (new Program()).init({});
327 this.parse(prog2, regs2, prog2text);
340 var prog2 = this.parse(regs2, prog2text);
328341
329342 var mem = (new yoob.Tape()).init({ default: 0 });
330343