λ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);
}
}