// StringValue 判断 state 中下一个值是否为 String func StringValue(st p.State) (interface{}, error) { return p.Do(func(state p.State) interface{} { val := p.P(p.One).Exec(state) if _, ok := val.(string); ok { return val } panic(st.Trap("expect a string but %v", val)) })(st) }
// FloatParser 解析浮点数 func FloatParser(st p.State) (interface{}, error) { return p.Do(func(st p.State) interface{} { f := p.Try(p.Float).Exec(st) val, err := strconv.ParseFloat(f.(string), 64) if err == nil { return Float(val) } panic(st.Trap("%v", err)) })(st) }