javascript - PEG.js-如果表达式不匹配则抛出错误

标签 javascript parsing compiler-errors compiler-construction peg

我目前正在编写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'));
 }

编辑

尝试查找hereerror方法可能对您有所帮助。 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/

相关文章:

javascript - createElement(script)/appendChild 如何调试添加的脚本?

JavaScript 元素在部分 View 中格式化,但不起作用

JavaScript 语法 : AngularJS Filter

python - 只从这个元素中提取文本,而不是它的子元素

java - 如何创建一个 Java 方法来解析一个大的 JSON 文件

c# - 为什么我的Visual Studio 2019仍在编译最后一个程序而没有更改?

javascript - "innerHTML += ..."与 "appendChild(txtNode)"

PHP 解析问题 - 和

c# - 如果多个成员具有相同的属性,如何抛出编译器错误

python - 尝试使用 Pyglet - 这个错误是什么意思?