// number // integer // rational // string // variable // '(' Expr ')' // If the value is a string, value.Expr is nil. func (p *Parser) number(tok scan.Token) (expr value.Expr, str string) { var err error text := tok.Text switch tok.Type { case scan.Identifier: expr = p.variable(text) case scan.String: str = value.ParseString(text) case scan.Number, scan.Rational: expr, err = value.Parse(p.context.Config(), text) case scan.LeftParen: expr = p.expr(p.next()) tok := p.next() if tok.Type != scan.RightParen { p.errorf("expected right paren, found %s", tok) } } if err != nil { p.errorf("%s: %s", text, err) } return expr, str }
// getString returns the value of the string that must be next in the input. func (p *Parser) getString() string { return value.ParseString(p.need(scan.String).Text) }