diff --git a/turing.js b/turing.js index 00e4c41..ffe9fdc 100644 --- a/turing.js +++ b/turing.js @@ -1,5 +1,29 @@ +var step_delay = 0; +var port = 35209; +var verbose = false; +var printtape = false; + + +// TODO: Do better than this? +var trans_done = 0; +var tape_done = 0; + + +var head_loc = 0; +var state = 0; +var tape = ["_"]; +var transitions = {}; + +var steps = 0; + +var pretty_tape = ""; + var fs = require('fs'); var readline = require('readline'); +var express = require('express'); +var web = express(); + + var transitionReader = readline.createInterface({ input: fs.createReadStream('transitions') }); @@ -8,20 +32,16 @@ var tapeReader = readline.createInterface({ }); transitionReader.on('line', function(line) { - console.log(line); + if (verbose) console.log(line); var file_transitions = line.split(/[\s,]/); - if (!transitions[file_transitions[0]]) { - transitions[file_transitions[0]] = {}; - } + if (!transitions[file_transitions[0]]) transitions[file_transitions[0]] = {}; transitions[file_transitions[0]][file_transitions[1]] = { to:file_transitions[2], write:file_transitions[3], move:file_transitions[4] }; - - console.log(transitions); }); @@ -32,7 +52,6 @@ transitionReader.on('close', function() { tapeReader.on('line', function(line) { - console.log("Lol"); var symbols = line; for (var i = 0; i < symbols.length; i++) { if (symbols[i] == " ") { @@ -40,8 +59,6 @@ tapeReader.on('line', function(line) { } else { tape[i+1] = symbols[i]; } - - console.log(tape); } }); @@ -51,71 +68,32 @@ tapeReader.on('close', function() { }); -var step_time = 10; - -// TEMP SOLUTION -var trans_done = 0; -var tape_done = 0; -// END TEMP - - -var head_loc = 0; -var state = 0; -var tape = ["_"]; - -var transitions = {}; - - - - -/* -var readLines = function(input, func) { - var linesToRead = ''; - - input.on('data', function(data) { - linesToRead += data; - var index = linesToRead.indexOf('\n'); - var last = 0; - while (index > -1) { - var line = linesToRead.substring(last, index); - last = index + 1; - linesToRead = linesToRead.substring(index + 1); - func(line); - index = remaining.indexOf('\n'); - } - }); - - input.on('end', function() { - if (linesToRead.length > 0) { - func(remaining); - } - }); -} -*/ - -var initialiseTransitions = function(callback) { - -} - -var initialiseTape = function(callback) { - -} var step = function() { - console.log("Step!"); + steps++; + + if (verbose) console.log("START step"); if (tape[head_loc] == undefined) { tape[head_loc] = "_"; } + if (verbose) { + pretty_tape = ""; + for (i = 0; i < tape.length; i++) { + if (i == head_loc) pretty_tape = pretty_tape + "["; + pretty_tape = pretty_tape + tape[i]; + if (i == head_loc) pretty_tape = pretty_tape + "]"; + } + } + if (verbose) console.log(pretty_tape); var cur_symbol = tape[head_loc]; - console.log("Symbol: %s | State: %s",cur_symbol,state); + if (verbose) console.log("Symbol: %s | State: %s",cur_symbol,state); - //console.log(tape[head_loc]); + // Get the transition based on the current state and symbol var transition = transitions[state][cur_symbol]; - console.log(transition); // Write to tape tape[head_loc] = transition.write; @@ -130,19 +108,26 @@ var step = function() { head_loc--; } - console.log("State: %s | Head: %s",state,head_loc) - + if (verbose) console.log("State: %s | Head: %s",state,head_loc) + + // Throw error if head was moved over the left edge of the tape if (head_loc == -1) { throw "head_loc error"; } - console.log("Tape %s",tape); - setTimeout(step, step_time); + if (printtape) console.log("Tape %s",tape); + + + if (verbose) console.log("END step!"); + setTimeout(step, step_delay); } var prestep = function() { + // Check if the transitions and tape have been initialised if (trans_done == 1 && tape_done == 1) { + if (verbose) console.log(transitions); + if (verbose) console.log(tape); console.log("Ready! Stepping!"); step(); } else { @@ -153,3 +138,18 @@ var prestep = function() { prestep(); + +// Set up web server +web.get('', function(req, res) { + var webtape = ""; + for (i = 0; i < tape.length; i++) { + if (i == head_loc) webtape = webtape + "["; + webtape = webtape + tape[i]; + if (i == head_loc) webtape = webtape + "]"; + } + res.send(webtape + "

" + "Steps: " + steps); +}); + +web.listen(port, function () { + console.log("Server listening on port %s",port); +});