TypeError:无法读取属性'';未定义javascript错误的定义

TypeError:无法读取属性'';未定义javascript错误的定义,javascript,Javascript,所以我制作了一个解析器,当我试图在解析器类中调用我的binOp函数时,它会给我这个错误。 已编辑以显示完整的解析器代码: 我的代码: //index.js 常数fs=要求('fs'); const Lexer=require('./Lexer/Lexer'); const Parser=require(“./Parser”); 班级计划{ 构造函数(args){ this.args=args this.args.shift(); this.args.shift(); } 读取文件(路径){ va

所以我制作了一个解析器,当我试图在解析器类中调用我的binOp函数时,它会给我这个错误。
已编辑以显示完整的解析器代码: 我的代码:

//index.js
常数fs=要求('fs');
const Lexer=require('./Lexer/Lexer');
const Parser=require(“./Parser”);
班级计划{
构造函数(args){
this.args=args
this.args.shift();
this.args.shift();
}
读取文件(路径){
var fileValue=fs.readFileSync(路径,{encoding:'utf-8'});
返回文件值;
}
renderCommands(){
开关(此.args[0]){
案例“编译”:
this.launch(this.args[0]、this.readFile(this.args[1]);
打破
}
}
启动(文件、数据){
var lexer=新lexer(文件、数据);
var tokens=lexer.makeTokens();
如果(!(令牌==null)){
//假设代币为['INT:10','PLUS','INT:22']
var parser=新的解析器(令牌);
var ast=parser.parse();
console.log(ast.node)
}
}
}
var程序=新程序(process.argv);
program.renderCommands()
//Parser.js
类解析器{
构造函数(令牌){
this.tokens=令牌
this.tokIdx=-1
这是预付款
}
预付款{
这个.tokIdx++;
if(this.tokIdx
ParseResult只有一个错误和节点属性, 当调用寄存器时,它会查看res是否有错误, 调用success时,它会将节点设置为ParseResult的节点 当调用failure时,它将检查错误,然后设置错误

完整错误消息:

C:\Users\adnit\Desktop\Amethyst\src\parser\Parser.js:66
        return this.binOp(this.factor, [TokenTypes.MUL, TokenTypes.DIV]); 
                    ^

TypeError: Cannot read property 'binOp' of undefined
    at term (C:\Users\MiccDev\Desktop\Amethyst\src\parser\Parser.js:66:21)  
    at Parser.binOp (C:\Users\MiccDev\Desktop\Amethyst\src\parser\Parser.js:81:33)
    at Parser.expr (C:\Users\MiccDev\Desktop\Amethyst\src\parser\Parser.js:70:21)
    at Parser.parse (C:\Users\MiccDev\Desktop\Amethyst\src\parser\Parser.js:22:24)
    at Program.launch (C:\Users\MiccDev\Desktop\Amethyst\src\index.js:31:30)    at Program.renderCommands (C:\Users\MiccDev\Desktop\Amethyst\src\index.js:20:22)
    at Object.<anonymous> (C:\Users\MiccDev\Desktop\Amethyst\src\index.js:39:9)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
C:\Users\adnit\Desktop\Amethyst\src\parser\parser.js:66
返回this.binOp(this.factor,[TokenTypes.MUL,TokenTypes.DIV]);
^
TypeError:无法读取未定义的属性“binOp”
术语(C:\Users\MiccDev\Desktop\Amethyst\src\parser\parser.js:66:21)
在Parser.binOp(C:\Users\MiccDev\Desktop\Amethyst\src\Parser\Parser.js:81:33)
在Parser.expr(C:\Users\MiccDev\Desktop\Amethyst\src\Parser\Parser.js:70:21)
在Parser.parse(C:\Users\MiccDev\Desktop\Amethyst\src\Parser\Parser.js:22:24)
在Program.renderCommands(C:\Users\MiccDev\Desktop\Amethyst\src\index.js:31:30)在Program.renderCommands(C:\Users\MiccDev\Desktop\Amethyst\src\index.js:20:22)启动时
at对象。(C:\Users\MiccDev\Desktop\Amethyst\src\index.js:39:9)
at模块编译(内部/modules/cjs/loader.js:1063:30)
在Object.Module._extensions..js(internal/modules/cjs/loader.js:1092:10)
在Module.load(内部/modules/cjs/loader.js:928:32)

检查类代码时,类方法
binOp(func,ops)
的参数
func
可能是通过其他类方法
term()
expr()
的类方法。为了使用正确的实例上下文运行
func()
,请更新
binOp(func,ops)
方法,如下所示:

binOp(函数,操作){
var res=new ParseResult();
//var left=res.register(func());
var left=res.register(函数应用(this));
如果(res.error)返回res
while(操作包括(此currentTok.类型)){
var opTok=此.currentTok;
res.register(this.advance())
//var res=res.register(func());
var res=res.register(函数apply(this));
如果(res.error)返回res;
左=新的双节点(左、光电、右);
}
返回res.success(左);
}

您能显示完整的错误消息吗?消息中现在有错误。请尝试将binOp移到“term”之上。@heartleth否,这不起作用。看来调用term()方法时没有任何提示