mirror of
https://github.com/samsonjs/elisp.js.git
synced 2026-04-27 15:07:47 +00:00
Fixed REPL by adding EL.Parser.parseOne()
This commit is contained in:
parent
edbd48e969
commit
6fe9048c6e
1 changed files with 20 additions and 6 deletions
26
el.js
26
el.js
|
|
@ -113,6 +113,10 @@ EL.Parser.prototype.parse = function(string) {
|
||||||
return exprs;
|
return exprs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EL.Parser.prototype.parseOne = function(string) {
|
||||||
|
return this.parse(string)[0];
|
||||||
|
};
|
||||||
|
|
||||||
EL.Parser.prototype.parseUntil = function(regex, initial, next, consumeTerminator) {
|
EL.Parser.prototype.parseUntil = function(regex, initial, next, consumeTerminator) {
|
||||||
var c,
|
var c,
|
||||||
token = initial,
|
token = initial,
|
||||||
|
|
@ -619,6 +623,11 @@ EL.isString = function(expr) {
|
||||||
return (EL.tag(expr) == 'string');
|
return (EL.tag(expr) == 'string');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EL.isList = function(expr) {
|
||||||
|
return (EL.tag(expr) == 'list');
|
||||||
|
};
|
||||||
|
EL.isCons = EL.isList;
|
||||||
|
|
||||||
EL.isFunction = function(expr) {
|
EL.isFunction = function(expr) {
|
||||||
return (EL.tag(expr) == 'function');
|
return (EL.tag(expr) == 'function');
|
||||||
};
|
};
|
||||||
|
|
@ -644,8 +653,8 @@ EL.inferType = function(exprs) {
|
||||||
EL.isQuote = function(expr) {
|
EL.isQuote = function(expr) {
|
||||||
var tag = EL.tag(expr),
|
var tag = EL.tag(expr),
|
||||||
val = EL.val(expr),
|
val = EL.val(expr),
|
||||||
car = EL.car(val),
|
car = EL.isCons(val) && EL.car(val),
|
||||||
name = EL.symbolName(car);
|
name = car && EL.symbolName(car);
|
||||||
return (tag == 'list' && name == 'quote');
|
return (tag == 'list' && name == 'quote');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -654,11 +663,15 @@ EL.eval = function(exprs) {
|
||||||
return e.evalExpressions(exprs);
|
return e.evalExpressions(exprs);
|
||||||
};
|
};
|
||||||
|
|
||||||
EL.read = function(string) {
|
EL.parse = function(string) {
|
||||||
var p = new EL.Parser();
|
var p = new EL.Parser();
|
||||||
return p.parse(string);
|
return p.parse(string);
|
||||||
};
|
};
|
||||||
EL.parse = EL.read;
|
|
||||||
|
EL.parseOne = function(string) {
|
||||||
|
return EL.parse(string)[0];
|
||||||
|
};
|
||||||
|
EL.read = EL.parseOne;
|
||||||
|
|
||||||
EL.print = function(expr) {
|
EL.print = function(expr) {
|
||||||
EL.Util.pp(expr);
|
EL.Util.pp(expr);
|
||||||
|
|
@ -672,8 +685,9 @@ EL.repl = function() {
|
||||||
var p = new EL.Parser(),
|
var p = new EL.Parser(),
|
||||||
e = new EL.Evaluator();
|
e = new EL.Evaluator();
|
||||||
while (true) {
|
while (true) {
|
||||||
EL.print("elisp> ");
|
print("elisp> ");
|
||||||
EL.print(e.eval(p.parse(readline())));
|
var x = readline();
|
||||||
|
EL.print(e.eval(p.parseOne(x)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue