关于CSS escape语法图状态转移规则是否存在矛盾的问询
问题原文
请查看escape语言的语法图:
我对第二组状态转移的理解如下:
由
\符号触发进入的状态,若下一个符号不属于newline或hex digit语言(换言之,属于除newline或hex digit外的任意语言),则可转移到接受状态。由
\符号触发进入的状态,若下一个符号属于hex digit语言,则可转移到另一个不同的状态。
请问上述两种状态转移规则是否存在矛盾?
解答
这两条规则不存在矛盾,二者的触发条件完全互斥,分别覆盖了反斜杠转义的两类不同场景:
- 第一条规则的适用场景是
\后接的字符既不是换行符也不是十六进制数字,这类情况属于普通字符转义,转义结果就是后面跟的字符本身,所以可以直接进入接受状态,比如\@就直接代表@字符。 - 第二条规则的适用场景是
\后接十六进制数字,这类情况属于CSS的Unicode码点转义,需要继续读取后续最多6个十六进制数字来解析出对应的Unicode字符,部分情况还需要额外加一个空格标识转义结束,所以不能直接进入接受状态,需要跳转至另一个中间状态继续处理。
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

