踱步狼注释移除,状态机算法:
switch(…):
case 1.转义字符为最优先处理。
入口条件:只要当前字符是,即必须进来处理。
紧跟在转义字符后面的char, 一般我们是无条件写回客户端的,
但如果此时是在处理,诸如块注释,单行注释,多行注释时,我们不写。
这边为了后面处理回车换行方便,对于\后面如果是xd和xa,我们也顺便处理,即写回xd,xa到客户端,
只要\后面还有一个字符,我们都无条件写回客户端。
这是转义符号的处理,最高优先级!
case 2:如果状态是行注释,但是当前字符既不是0xd,也不是0xa,或者是块注释,但当前字符又不是*
那我们直接丢弃
case 3:如是是在处理单引号,但是当前字符又不是’,
或者在处理双引号,但是当前字符又不是“,
或者在处理js正则,但是当前字符又不是/,
那我们全部写回客户端。
case 4.处理"
入口条件:当处在 js正则表达式, 单引号, #if 0注释, 行注释, 块注释, 状态下,不得进入处理。
且当前状态包含double_quotes_doing,或当前字符正好就是"则必须进来处理。
进入此入口的字符,一律写回客户端。
然后我们重新修改状态机标志:
如果之前没有置double_quotes_doi