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规则要复杂一些:
- 用单引号或双引号包含。
- 字符串中的引号要用斜杆“转义”(escape)。
- 斜杆也要用斜杆转义。
比如 "is\'nt" 或 'is\'nt',都表示 isn't。
如果要想项目实用化,需要增加更多的转义,比如 \n、\xFF、\u3412。但我们有更重要的知识要学习,所以点到为止。