奇怪的字符串文字:是“ab\ cd" 可以接受,但是 "ab cd” 不是吗?

问题描述 投票:0回答:1

我在 goyacc 程序的 cpyact 函数中遇到了这段代码。当我们看到以 " 或 ' 开头的字符串文字时,我们只需复制它们。但是对 "\" 和 " 的处理 ” 看起来很奇怪。为什么我们关心“\ " 序列?与 C 字符串有关吗?因为 goyacc 源自 Inferno 的 utils/iyacc/yacc.c

        case '\'', '"':
            // character string or constant
            match := c
            fcode.WriteRune(c)
            c = getrune(finput)
            for c != EOF {
                if c == '\\' {
                    fcode.WriteRune(c)
                    c = getrune(finput)
                    if c == '\n' { // does it mean "ab\\\ncd" is ok?
                        lineno++
                    }
                } else if c == match { 
                    break swt
                }
                if c == '\n' {// does it mean "ab\n" is NOT ok?
                    errorf("newline in string")
                }
                fcode.WriteRune(c)
                c = getrune(finput)
            }
go yacc
1个回答
0
投票

该代码并不意味着“ab\ cd”是可以接受的,但是“ab " 不是。第一种情况的形式为:

"ab\
cd"

第二种情况的形式为

"ab
cd"

当文字想要换行符时需要 \。

© www.soinside.com 2019 - 2024. All rights reserved.