0

是否有任何测试套件/ ECMAScript 规范定义的所有可能错误的列表?我目前正在编写一个 JavaScript 运行时,我想有一些花哨的错误,所以我需要从引擎中解析它们并进行相应的处理。

引擎是 Graal.jS,如果这很重要的话。

问候-Yush。

4

1 回答 1

2

是否有 ECMAScript 规范定义的所有可能错误的列表?

当然,可能的错误类型列表在 ECMAScript 规范本身中。但似乎你只对SyntaxError具体感兴趣。

JavaScript中是否有所有可能的语法错误的列表?

不,ECMAScript 规范不要求针对语法错误提供任何特定的错误消息。任何引擎都可以自带,也可以实现语法扩展。

引擎是 Graal.jS,如果这很重要的话。

是的,这很重要。Graal.js确实实现了一些语法扩展。至于可能的解析器错误消息列表,您可能最好查看解析器本身的源代码。

/(?<=throw error\().*?(?=,[^,]*\);)/g这是我从提到的文件中提取的错误列表(使用 regex 很脏):

ECMAErrors.getMessage("syntax.error.redeclare.variable", varNode.getName().getName())
AbstractParser.message("arguments.in.field.initializer")
AbstractParser.message(MESSAGE_INVALID_LVALUE)
AbstractParser.message(MESSAGE_INVALID_LVALUE)
AbstractParser.message(MESSAGE_INVALID_LVALUE)
AbstractParser.message(MESSAGE_INVALID_LVALUE)
String.format("unexpected node in AssignmentPattern: %s"
String.format("nullish coalescing operator cannot immediately contain, or be contained within
AbstractParser.message("use.strict.non.simple.param")
AbstractParser.message(MESSAGE_EXPECTED_STMT, "function declaration")
AbstractParser.message(MESSAGE_EXPECTED_STMT, "let declaration")
AbstractParser.message(MESSAGE_EXPECTED_STMT, "const declaration")
AbstractParser.message(MESSAGE_EXPECTED_STMT, "class declaration")
AbstractParser.message(MESSAGE_EXPECTED_STMT, "async function declaration")
AbstractParser.message("invalid.private.ident")
AbstractParser.message("multiple.constructors")
AbstractParser.message("invalid.private.ident")
AbstractParser.message("unexpected.token"
AbstractParser.message("invalid.private.ident")
ECMAErrors.getMessage("syntax.error.redeclare.variable", classElement.getPrivateName())
AbstractParser.message("invalid.private.ident")
AbstractParser.message("generator.constructor")
AbstractParser.message("accessor.constructor")
AbstractParser.message("async.constructor")
AbstractParser.message("static.prototype.method")
AbstractParser.message("private.constructor.method")
AbstractParser.message("constructor.field")
AbstractParser.message("static.prototype.field")
AbstractParser.message(MESSAGE_ESCAPED_KEYWORD, ident.getName())
expectMessage(IDENT, ident.getToken())
AbstractParser.message(MESSAGE_ESCAPED_KEYWORD, ident.getName())
expectMessage(IDENT, ident.getToken())
AbstractParser.message(MESSAGE_ESCAPED_KEYWORD, ident.getName())
AbstractParser.message("strict.name", ident.getName(), contextString)
AbstractParser.message("missing.destructuring.assignment")
AbstractParser.message("missing.const.assignment"
ECMAErrors.getMessage("syntax.error.redeclare.variable", name)
AbstractParser.message(MESSAGE_INVALID_LVALUE)
"Rest element must be last"
"Unexpected element after rest element"
AbstractParser.message(MESSAGE_INVALID_LVALUE)
"Unexpected element after rest element"
"Expected a valid binding identifier"
"Expected a valid binding identifier"
String.format("unexpected node in BindingPattern: %s"
AbstractParser.message("invalid.for.await.of")
AbstractParser.message("missing.const.assignment"
AbstractParser.message("missing.destructuring.assignment")
AbstractParser.message("for.each.without.in")
AbstractParser.message("many.vars.in.for.in.loop", isForOf || isForAwaitOf ? "of" : "in")
AbstractParser.message("for.in.loop.initializer", isForOf || isForAwaitOf ? "of" : "in")
AbstractParser.message("not.lvalue.for.in.loop", isForOf || isForAwaitOf ? "of" : "in")
AbstractParser.message("undefined.label", ident.getName())
AbstractParser.message("illegal.continue.stmt")
AbstractParser.message("undefined.label", ident.getName())
AbstractParser.message("illegal.break.stmt")
AbstractParser.message("unexpected.token"
AbstractParser.message("strict.no.with")
AbstractParser.message("duplicate.label", ident.getName())
AbstractParser.message(MESSAGE_EXPECTED_OPERAND
AbstractParser.message("missing.catch.or.finally")
AbstractParser.message("strict.no.nonoctaldecimal")
AbstractParser.message("strict.no.octal")
AbstractParser.message(MESSAGE_EXPECTED_OPERAND
AbstractParser.message("expected.comma"
AbstractParser.message("expected.property.id"
AbstractParser.message("expected.comma"
AbstractParser.message("multiple.proto.key")
AbstractParser.message(MESSAGE_PROPERTY_REDEFINITON, property.getKeyName())
AbstractParser.message(MESSAGE_PROPERTY_REDEFINITON, property.getKeyName())
AbstractParser.message(MESSAGE_PROPERTY_REDEFINITON, property.getKeyName())
AbstractParser.message(MESSAGE_PROPERTY_REDEFINITON, property.getKeyName())
AbstractParser.message("strict.no.nonoctaldecimal")
AbstractParser.message("strict.no.octal")
AbstractParser.message("expected.target")
AbstractParser.message(MESSAGE_EXPECTED_OPERAND, IMPORT.getName())
AbstractParser.message("unexpected.token"
AbstractParser.message("invalid.super")
AbstractParser.message("unexpected.import.meta")
AbstractParser.message("unexpected.ident", meta)
AbstractParser.message(MESSAGE_EXPECTED_OPERAND, IMPORT.getName())
AbstractParser.message(MESSAGE_EXPECTED_STMT, "generator function declaration")
JSErrorType.SyntaxError, AbstractParser.message("strict.no.func.decl.here")
JSErrorType.SyntaxError, AbstractParser.message("no.func.decl.here")
AbstractParser.message("strict.param.redefinition", duplicateParameter.getName())
AbstractParser.message("unexpected.token"
AbstractParser.message("unexpected.token"
AbstractParser.message("strict.cant.delete.ident", ident.getName())
AbstractParser.message("strict.cant.delete.private")
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message("expected.arrow.parameter")
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message(MESSAGE_INVALID_ARROW_PARAMETER)
AbstractParser.message("unterminated.template.expression")
ECMAErrors.getMessage("syntax.error.redeclare.variable", ident.getName())
AbstractParser.message("duplicate.import.assertion", assertionKey)
AbstractParser.message("expected.binding.identifier")
AbstractParser.message("invalid.export")
expectMessage(IDENT, reservedWordToken)
AbstractParser.message("new.target.in.function")
于 2022-01-20T17:48:03.223 回答