λazyk

Jednoduchá konzole pro λazyk

HTML

<script src="https://rawgit.com/maly/514a405790450c9998fa140da9664c8d/raw/907d6b6aa3556d335cb3a7985a2d2a3af6deb962/TokenStream.js"></script>
<script src="https://rawgit.com/maly/514a405790450c9998fa140da9664c8d/raw/907d6b6aa3556d335cb3a7985a2d2a3af6deb962/InputStream.js"></script>
<script src="https://rawgit.com/maly/514a405790450c9998fa140da9664c8d/raw/907d6b6aa3556d335cb3a7985a2d2a3af6deb962/parse.js"></script>
<script src="https://rawgit.com/maly/514a405790450c9998fa140da9664c8d/raw/ac71ffccbd3a7c1d2bf61ba311a34bd74c7b3d98/Environment.js"></script>
<script src="https://rawgit.com/maly/514a405790450c9998fa140da9664c8d/raw/ac71ffccbd3a7c1d2bf61ba311a34bd74c7b3d98/evaluate.js"></script>
<textarea id="input" cols=60 rows=15></textarea><br>
<button onclick="execute()">RUN!</button>

<div id="output">

</div>

CSS

div#output, #input {
    font-family: monospace;
    white-space: pre-wrap;
}

JavaScript

// some test code here
var execute = function() {
	var output = document.getElementById("output");
	output.innerHTML="";

	var code = document.getElementById("input").value;
	
	try {

		// remember, parse takes a TokenStream which takes an InputStream
		var ast = parse(TokenStream(InputStream(code)));
		console.log(ast);
		// create the global environment
		var globalEnv = new Environment();

		// define the "print" primitive function
		globalEnv.def("print", function(txt){
		  output.innerHTML+=(txt);
		});

  	globalEnv.def("println", function(txt){
		  output.innerHTML+=(txt)+"\n";
		});

		// run the evaluator
		var result = evaluate(ast, globalEnv);
	
		output.innerHTML+="\n\nResult:"+(result);
		} catch(e) {
		output.innerHTML+=(e);		
		}
}