我目前正在编写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]。
有人知道该怎么做吗?我只知道当表达式实际上与我的return语句所见匹配时如何运行{action]。
此外,如果错误位置有可能指向表达式中已经丢失的END之前已解析的部分,那将是很好的选择。
最好的问候, 里卡多
答案 0 :(得分:0)
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;
}