module.exports=function parse(expr){
var lexer = new Lexer();
var parser = new Parser(lexer);
return parser.parse(expr);
}
/*
Lexer只负责将text转换成tokens
*/
function Lexer=function(){
}
Lexer.prototype.lex=function(text){
//return tokens;
}
/*
AST 身上有一个插槽,需要插入一个lexer
AST 有一个ast方法,用于调用lexer并拿到其返回的tokens,生成抽象语法树
*/
function AST(lexer){
this.lexer = lexer;
}
AST.prototype.ast=function(text){
this.tokens = this.lexer.lex(text);
}
/*
compiler有一个插槽,需要插入一个AST(ASTbuilder)
compiler有一个compile方法,可以调用AST的ast方法
*/
function ASTCompiler(astBuilder){
this.astBuilder = astBuilder;
}
astCompiler.prototype.compile=function(text){
this.ast = this.astBuilder.ast(text)
}
/*
解析器是上面几个对象的整合
*/
function Parser(lexer){
this.lexer = lexer;
this.ast = new AST(this.lexer);
this.astCompiler = new ASTCompiler(this.ast);
}
Parser.prototype.parse=function(text){
return this.astCompiler.compile(text);
}
console