我正在考虑html5lib-tests中的以下测试用例:
{"description":"<!DOCTYPE\\u0008",
"input":"<!DOCTYPE\u0008",
"output":["ParseError", "ParseError", "ParseError",
["DOCTYPE", "\u0008", null, null, false]]},
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.
我想知道这三个错误来自哪里?我只能追踪两个,但我认为我在某个地方犯了错误。
答案 0 :(得分:1)
您缺少的是&#34;预处理输入流&#34;部分:
在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字符到达标记器之前发生解析错误。鉴于tokenizer被定义为从输入流中读取,tokenizer测试假定输入流已经应用了正常的预处理。