我目前正在编写PEG.js语法,并且希望它输出自定义错误。例如,我目前具有用于创建函数的这种结构。
//Function Declaration
FUNCTION_DECLARATION =
FUNCTION __ t:(TYPE/VOID) __ n:KEY a:ARGUMENT_DECLARATION
_ b:FUNCTION_BLOCK
(END)
{return {context : "FUNCTION_DECLARATION",location:location(), type:t,name:n,
args:a, block:b};
}
我希望能够检测特定的错误,例如在函数声明末尾缺少END标记。为此,我需要能够在表达式不匹配时运行{action]。
有谁知道如何做到这一点?我只知道当表达式实际匹配时如何运行{action],正如我在return语句中看到的那样。
此外,如果错误位置有可能指向表达式中在缺少的END之前已经解析的部分,那将是很好的。
最好的祝福,
里卡多
最佳答案
PEG.js已经包含一些自定义错误处理。运行parse()
方法时,您可以捕获该错误并检查location
属性以查明错误的来源。这是一个例子:
try {
var entry = Parser.parse(text);
} catch (err) {
if (!err.hasOwnProperty('location')) throw(err);
// Slice `text` with a little context before and after the error offset
alert('Error: ' + text.slice(err.location.start.offset-10,
err.location.end.offset+10).replace(/\r/g, '\\r'));
}
编辑
尝试查找here。
error
方法可能对您有所帮助。 Here's一个从github问题中提取的示例。start = sign:[+-]? digits:[0-9]+ {
var result = parseInt((sign || "") + digits.join(""), 10);
if (result % 2 == 0) {
error("The number must be an odd integer.");
}
return result;
}
关于javascript - PEG.js-如果表达式不匹配则抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046836/