面试题答案
一键面试字符串字面量识别规则特殊之处
- 双引号字符串:
- 以双引号
"
开始和结束。 - 支持转义字符,如
\n
表示换行,\"
表示双引号等。例如:"Hello\nWorld"
。 - 字符串内的字符(除转义字符外)按字面意义解析,不会被词法分析器误解为其他词法单元。
- 以双引号
- 反引号字符串:
- 以反引号 ` 开始和结束。
- 不支持转义字符,字符串内的所有字符(包括换行符等)都按字面意义解析。例如:
Hello World
会被解析为包含换行的字符串。
注释识别规则特殊之处
- 单行注释:
- 以
//
开始,直到该行结束。注释内的内容词法分析器会忽略,不参与词法单元的解析。例如:// 这是单行注释
。
- 以
- 多行注释:
- 以
/*
开始,以*/
结束。可以跨越多行,注释内的所有内容词法分析器都忽略。例如:
- 以
/*
这是多行注释
可以有多行内容
*/
注释嵌套字符串字面量的处理
词法分析器会按照注释优先的原则处理。当遇到注释开始符号(//
或 /*
)时,会将其之后到注释结束符号(单行注释到行尾,多行注释到 */
)的内容都作为注释忽略,不管其中是否包含字符串字面量。例如:
// 这里面有个字符串 "Hello",词法分析器会忽略这整行,不解析字符串
/*
这里面有个字符串 "Hello",词法分析器会忽略整个多行注释内容,不解析字符串
*/
字符串字面量包含注释风格字符组合的处理
对于双引号字符串,如果包含 //
或 /*
等注释风格字符组合,只要没有被转义,就按普通字符处理,因为词法分析器此时处于字符串解析状态,不会将其解析为注释。例如:"这里有个 // 类似注释的内容"
。
对于反引号字符串,由于不支持转义,同样将 //
或 /*
等按普通字符处理。例如:这里有个 // 类似注释的内容
。