我正在查看html5lib-tests中的以下测试用例:

{"description":"<!DOCTYPE\\u0008",
"input":"<!DOCTYPE\u0008",
"output":["ParseError", "ParseError", "ParseError",
           ["DOCTYPE",  "\u0008", null, null, false]]},


source

State                      |Input char |  Actions
--------------------------------------------------------------------------------------------
Data State                 |  "<"      | -> TagOpenState
TagOpenState               | "!"       | -> MarkupDeclarationOpenState
MarkupDeclarationOpenState | "DOCTYPE" | -> DOCTYPE state
DOCTYPE state              | "\u0008"  | Parse error; -> before DOCTYPE name state (reconsume)
before DOCTYPE name state  | "\u0008"  | DOCTYPE(name = "\u0008"); -> DOCTYPE name state
DOCTYPE name state         | EOF       | Parse error. Set force quirks on. Emit DOCTYPE -> Data state.
Data state                 | EOF       | Emit EOF.


我想知道这三个错误是从哪里来的?我只能追踪两个,但我想我在某个地方犯了逻辑错误。

最佳答案

您缺少的是“预处理输入流”部分中的一个:


  U + 0001到U + 0008,U + 000E到U + 001F,U + 007F到U + 009F,U + FDD0到U + FDEF以及字符U + 000B,U + FFFE, U + FFFF,U + 1FFFE,U + 1FFFF,U + 2FFFE,U + 2FFFF,U + 3FFFE,U + 3FFFF,U + 4FFFE,U + 4FFFF,U + 5FFFE,U + 5FFFF,U + 6FFFE,U + 6FFFF,U + 7FFFE,U + 7FFFF,U + 8FFFE,U + 8FFFF,U + 9FFFE,U + 9FFFF,U + AFFFE,U + AFFFF,U + BFFFE,U + BFFFF,U + CFFFE,U + CFFFF, U + DFFFE,U + DFFFF,U + EFFFE,U + EFFFF,U + FFFFE,U + FFFFF,U + 10FFFE和U + 10FFFF是解析错误。这些都是控制字符或永久未定义的Unicode字符(非字符)。


这会在U + 0008字符到达令牌生成器之前导致解析错误。给定标记符定义为从输入流读取,标记符测试假定输入流已对其应用了正常的预处理。

关于html5 - 试图了解html5lib-test中ParseError的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32843298/

10-13 00:28