Browse Source

update repl to be nicer

master
wes 7 years ago
parent
commit
f9cc593583
  1. 2
      server/assets/bundle.js
  2. 7
      server/desugar.js
  3. 8
      server/parse.js
  4. 8
      server/public/stylesheets/style.css
  5. 38
      server/tags/test.tag
  6. 1
      server/tokenize.js
  7. 18
      server/vm.js

2
server/assets/bundle.js

File diff suppressed because one or more lines are too long

7
server/desugar.js

@ -26,6 +26,7 @@ function desugarList(lst) {
}
function desugarDefFunc(def) {
/* FIXME should do closure conversion here */
return new typ.Def(def.ident,
curryFunc(def.params,
def.body));
@ -85,8 +86,8 @@ function desugar(stx, typeEnv) {
/* FIXME closures not yet working */
//case "FunctionDefinition":
//return desugarDefFunc(stx);
//case "Definition":
//return new typ.Def(stx.ident, desugar(stx.val, typeEnv));
case "Definition":
return new typ.Def(stx.ident, desugar(stx.val, typeEnv));
case "TypeDefinition":
return desugarDefType(stx, typeEnv);
case "Name":
@ -111,8 +112,6 @@ function desugar(stx, typeEnv) {
if (false &&
stx.p && isAtomicNumber(stx.p)) {
console.log("Matched unary");
console.log(stx);
return new typ.UnaryOp(desugar(stx.func, typeEnv), desugar(stx.p, typeEnv));
}
if (stx.p) {

8
server/parse.js

@ -651,8 +651,6 @@ function computeApp(tokens, charnum, linenum) {
var next;
var result;
var parameters;
console.log("computing app");
console.log(tokens);
if (fst(tokens)) {
next = fst(tokens);
@ -664,7 +662,6 @@ function computeApp(tokens, charnum, linenum) {
}
if (typ.OPInfo[next[1]]) {
console.log("matched infix");
/* it's an infix expression */
result = parseInfix(tokens, 1, lhs, lhs.linenum, lhs.charnum);
if (!fst(tokens) || fst(tokens)[0] !== "right_paren") {
@ -730,11 +727,6 @@ function parseInfix(tokens, minPrec, lhs, linenum, charnum) {
tokens.pop();
/*remove the operator token*/
var rhs = parseInfix(tokens, nextMinPrec);
console.log("~~~~~~~~~~");
console.log(op);
console.log(lhs);
console.log(rhs);
console.log("~~~~~~~~~~");
lhs = addSrcPos(typ.makeApp(op, [lhs, rhs]), tokens, rhs.linenum, rhs.charnum);
}
return lhs;

8
server/public/stylesheets/style.css

@ -6,3 +6,11 @@ body {
a {
color: #00B7FF;
}
.evaluator {
width: 200px;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid 1px;
}

38
server/tags/test.tag

@ -1,27 +1,33 @@
<test>
<textarea
cols=40
rows=12
ref="input"
type="text">
</textarea>
<button
onclick={evaluate}>
Evaluate it
</button>
<p>
{output}
<p each="{v, i in outputs}">
<span>
{v}
</span>
</p>
<form
ref="inputform"
onsubmit={evaluate}>
<input
value={default}
class="evaluator"
ref="input"
type="text">
</input>
</form>
<script>
import vm from '../vm.js';
var self = this;
self.output = "";
self.outputs = [];
self.default = "";
evaluate() {
var input = this.refs.input;
self.update({"output" : JSON.stringify(vm.evaluateString(input.value))});
evaluate(ev) {
ev.preventDefault();
var input = self.refs.input;
self.outputs.push(JSON.stringify(vm.evaluateString(input.value)));
self.refs.input.value = self.default;
self.update();
}
</script>

1
server/tokenize.js

@ -395,7 +395,6 @@ function tokenizeHelp(input, matchop, strip_whitespace) {
});
} catch (e) {
console.log(e.stxerror());
process.exit(1);
}
}

18
server/vm.js

@ -26,21 +26,16 @@ var testenv = env.makeEnv("toplevel",
["b", 3]]);
function lookup(ident, env) {
console.log(`trying to look up ${ident}`);
var value = env.bindings[ident];
console.log(env);
console.log(value);
if (value.exprType !== undefined) {
console.log("evaluting further");
return evaluate(value, env);
var result = evaluate(value, env);
return result;
}
console.log("returning it without evaluting");
return value;
}
function evaluateString(input) {
var ast = parse.parseFull(tokenizer.tokenize(input));
console.log(ast.ast[ast.ast.length-1]);
return evaluateAll(ast.ast, testenv);
}
@ -69,8 +64,6 @@ function extend(def, env) {
}
function evaluate(ast, environment) {
console.log("here");
console.log(JSON.stringify(ast));
if (ast.exprType == "Application") {
var func = evaluate(ast.func, environment);
return apply(
@ -97,9 +90,12 @@ function evaluate(ast, environment) {
}
else if (ast.exprType === "Definition") {
extend(ast, environment);
return ast;
return;
}
else if (ast.exprType === "Integer" || ast.exprType === "Float" || ast.exprType === "String") {
else if (ast.exprType === "Integer" ||
ast.exprType === "Float" ||
ast.exprType === "String") {
/* Return an atom */
return ast.val;
}
else if (ast.exprType === "Closure") {

Loading…
Cancel
Save