我使用Antlr为.Net创建了一个脚本解释器。它工作得很好,但它产生的语法错误是可怕的。 可以找到处于早期开发阶段的库here,并且使用的语法基于此ecma-Script grammar。
现在最大的问题是,当我有一个大型脚本文件并且我有一个对象定义说
module.exports = function (req, res, next) {
User.findOne({ id: token.id }, function (err, user) {
console.log(user);
if (err) throw (err);
if (user.permission === "admin") {
return next();
}
return res.send("You Must be an ADMIN to perform this task");
});
};
我希望有一条消息说"语法错误在xyz','预期。 但是,对于因缺少逗号而导致的每个后续错误,请在xyz上获取100个没有可行替代方案的列表。
有没有办法获得由丢失的逗号引起的一个错误?它也会完全没问题,如果它会抱怨意外的var2令牌。
答案 0 :(得分:0)
你可以使用2种方法:
Definitive ANTLR 4 reference
,或者您可以查看使用此方法进行非平衡括号的a grammar of mine。使用第二种方法时,您还应该摆脱以下错误产生的“错误”,因为语法可以成功匹配给定的输入,因此可以正常继续。
因此,我强烈建议你采用第二种方法