Example #1
0
// 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)
}
Example #2
0
// 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)
}