0302: 解析字符串

目前只实现了两种数据类型:int64 和字符串。通过开头一个字符决定按照哪种解析:

func (p *Parser) parseValue(out *Cell) error {
    p.skipSpaces()
    if p.pos >= len(p.buf) {
        return errors.New("expect value")
    }
    ch := p.buf[p.pos]
    if ch == '"' || ch == '\'' {
        return p.parseString(out)
    } else if isDigit(ch) || ch == '-' || ch == '+' {
        return p.parseInt(out)
    } else {
        return errors.New("expect value")
    }
}

后面实现语法解析时,你会发现很多计算机语言根据开头几个 token 就能决定后续怎么解析。

解析 int64

int64 的规则简单:开头可以是 - + 号,后续是数字。

func (p *Parser) parseInt(out *Cell) error

解析字符串

func (p *Parser) parseString(out *Cell) error

规则要复杂一些:

比如 "is\'nt"'is\'nt',都表示 isn't

如果要想项目实用化,需要增加更多的转义,比如 \n\xFF\u3412。但我们有更重要的知识要学习,所以点到为止。