SOURCE

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 命令行工具 X clear

                    
>
console