示例#1
0
文件: type.go 项目: kooksee/gisp2
func stop(st p.State) (interface{}, error) {
	tran := st.Begin()
	defer st.Rollback(tran)
	r, err := p.Choice(
		p.Try(p.Space),
		p.Try(p.Newline),
		p.Try(p.RuneOf(":.()[]{}?")),
		p.Try(p.EOF),
	)(st)
	if err != nil {
		return nil, err
	}
	return r, nil
}
示例#2
0
文件: parses.go 项目: kooksee/gisp2
	i, err := p.Int(st)
	if err == nil {
		val, err := strconv.Atoi(i.(string))
		if err == nil {
			return Int(val), nil
		}
		return nil, err
	}
	return nil, err

}

// 用于string
var EscapeChars = p.Do(func(st p.State) interface{} {
	p.Chr('\\').Exec(st)
	r := p.RuneOf("nrt\"\\").Exec(st)
	ru := r.(rune)
	switch ru {
	case 'r':
		return '\r'
	case 'n':
		return '\n'
	case '"':
		return '"'
	case '\\':
		return '\\'
	case 't':
		return '\t'
	default:
		panic(st.Trap("Unknown escape sequence \\%c", r))
	}