當前位置: 首頁>>代碼示例>>Golang>>正文


Golang goparsec2.Try函數代碼示例

本文整理匯總了Golang中github.com/Dwarfartisan/goparsec2.Try函數的典型用法代碼示例。如果您正苦於以下問題:Golang Try函數的具體用法?Golang Try怎麽用?Golang Try使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。


在下文中一共展示了Try函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: FloatParser

// FloatParser 解析浮點數
func FloatParser(st p.State) (interface{}, error) {
	return p.Do(func(st p.State) interface{} {
		f := p.Choice(p.Try(p.Float), p.Try(p.Int)).Exec(st)
		val, err := strconv.ParseFloat(f.(string), 64)
		if err == nil {
			return Float(val)
		}
		panic(st.Trap("%v", err))
	})(st)
}
開發者ID:damonchen,項目名稱:pjson,代碼行數:11,代碼來源:float.go

示例2: SuffixParserExt

// SuffixParserExt 在後綴表達式判定中允許傳入環境
func SuffixParserExt(env Env) func(interface{}) p.P {
	return func(prefix interface{}) p.P {
		suffix := p.Choice(p.Try(DotSuffix(prefix)), BracketSuffixExt(env)(prefix))
		return func(st p.State) (interface{}, error) {
			s, err := p.Try(suffix)(st)
			if err != nil {
				return prefix, nil
			}
			return SuffixParserExt(env)(s)(st)
		}
	}
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:13,代碼來源:suffix.go

示例3: stop

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
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:14,代碼來源:type.go

示例4: divx

// divx 實現一個左折疊的 parsec 連除解析器,精度向上適配。
func divx(st p.State) (interface{}, error) {
	data, err := p.Try(p.Many(IntValue).Over(p.EOF))(st)
	if err == nil {
		ints := data.([]interface{})
		root := ints[0].(Int)
		for _, x := range ints[1:] {
			root /= x.(Int)
		}
		return root, nil
	}
	data, err = p.Many(NumberValue).Over(p.EOF)(st)
	if err == nil {
		numbers := data.([]interface{})
		root := numbers[0].(Float)
		for _, x := range numbers[1:] {
			root /= x.(Float)
		}
		return root, nil
	}

	if nerr, ok := err.(NotNumberError); ok {
		return nil, TypeSignError{Type: Type{FLOAT, false}, Value: nerr.Value}
	}
	return nil, err
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:26,代碼來源:math.go

示例5: Parse

// Parse 分析JSON源碼
func Parse(code string) (interface{}, error) {
	st := p.BasicStateFromText(code)
	var v interface{}
	var e error

	for {
		Skip(&st)
		_, err := p.Try(p.EOF)(&st)
		if err == nil {
			break
		}

		value, err := ValueParser()(&st)
		if err != nil {
			return nil, err
		}

		switch vv := value.(type) {
		default:
			v = vv
			e = nil
		}
	}
	return v, e
}
開發者ID:MarchLiu,項目名稱:pjson,代碼行數:26,代碼來源:parse.go

示例6: ValueParser

// ValueParser 實現簡單的值解釋器
func ValueParser() p.P {
	return func(state p.State) (interface{}, error) {
		value, err := p.Choice(p.Try(StringParser),
			p.Try(FloatParser),
			p.Try(IntParser),
			p.Try(RuneParser),
			p.Try(StringParser),
			p.Try(BoolParser),
			p.Try(NilParser),
			p.Try(p.P(AtomParser).Bind(SuffixParser)),
			p.Try(p.P(ListParser()).Bind(SuffixParser)),
			p.Try(DotExprParser),
			QuoteParser,
		)(state)
		return value, err
	}
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:18,代碼來源:parses.go

示例7: bracketSuffix

func bracketSuffix(x interface{}) p.P {
	return func(st p.State) (interface{}, error) {
		b, err := p.Try(BracketParser())(st)
		if err != nil {
			return x, nil
		}
		return Bracket{x, b.([]interface{})}, nil
	}
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:9,代碼來源:suffix.go

示例8: BracketSuffix

// BracketSuffix 表示帶 [] 後綴的表達式
func BracketSuffix(x interface{}) p.P {
	return func(st p.State) (interface{}, error) {
		b, err := p.Try(BracketParser())(st)
		if err != nil {
			return nil, err
		}
		return bracketSuffix(Bracket{x, b.([]interface{})})(st)
	}
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:10,代碼來源:suffix.go

示例9: dotSuffix

func dotSuffix(x interface{}) p.P {
	return func(st p.State) (interface{}, error) {
		d, err := p.Try(DotParser)(st)
		if err != nil {
			return x, nil
		}
		return dotSuffix(Dot{x, d.(Atom)})(st)
	}
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:9,代碼來源:suffix.go

示例10: AtomParserExt

// AtomParserExt 生成帶擴展包的 Atom
func AtomParserExt(env Env) p.P {
	return p.Do(func(st p.State) interface{} {
		a := atomNameParser().Exec(st)
		t, err := p.Try(ExtTypeParser(env)).Parse(st)
		if err == nil {
			return Atom{a.(string), t.(Type)}
		}
		return Atom{a.(string), ANYMUST}
	})
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:11,代碼來源:atom.go

示例11: AtomParser

// AtomParser 生成 Atom 對象,但是它不帶擴展環境
func AtomParser(st p.State) (interface{}, error) {
	a, err := atomNameParser().Parse(st)
	if err != nil {
		return nil, err
	}
	t, err := p.Try(TypeParser).Parse(st)
	if err == nil {
		return Atom{a.(string), t.(Type)}, nil
	}
	return Atom{a.(string), ANYMUST}, nil
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:12,代碼來源:atom.go

示例12: QuoteParser

// QuoteParser 實現 Quote 語法的解析
func QuoteParser(st p.State) (interface{}, error) {
	lisp, err := p.Chr('\'').Then(
		p.Choice(
			p.Try(p.P(AtomParser).Bind(SuffixParser)),
			ListParser().Bind(SuffixParser),
		))(st)
	if err == nil {
		return Quote{lisp}, nil
	}
	return nil, err
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:12,代碼來源:parses.go

示例13: compare

func compare(st p.State) (interface{}, error) {
	l, err := p.Choice(
		p.Try(IntValue).Bind(LessThanNumber),
		p.Try(NumberValue).Bind(LessThanFloat),
		p.Try(StringValue).Bind(LessThanString),
		p.P(TimeValue).Bind(LessThanTime),
	).Bind(func(l interface{}) p.P {
		return func(st p.State) (interface{}, error) {
			_, err := p.EOF(st)
			if err != nil {
				return nil, fmt.Errorf("less args sign error: expect eof")
			}
			return l, nil
		}
	})(st)
	if err == nil {
		return l, nil
	}
	return nil, fmt.Errorf("expect two lessable values compare but error %v", err)
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:20,代碼來源:compare.go

示例14: less

func less(env Env) p.P {
	return func(st p.State) (interface{}, error) {
		l, err := p.Choice(
			p.Try(p.P(IntValue).Bind(LessThanNumber)),
			p.Try(p.P(NumberValue).Bind(LessThanFloat)),
			p.Try(p.P(StringValue).Bind(LessThanString)),
			p.Try(p.P(TimeValue).Bind(LessThanTime)),
			p.P(ListValue).Bind(LessThanList(env)),
		).Bind(func(l interface{}) p.P {
			return func(st p.State) (interface{}, error) {
				_, err := p.EOF(st)
				if err != nil {
					return nil, st.Trap("less args sign error: expect eof")
				}
				return l, nil
			}
		})(st)
		if err == nil {
			return l, nil
		}
		return nil, st.Trap("expect two lessable values compare but error %v", err)
	}
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:23,代碼來源:compare.go

示例15: ValueParser

// ValueParser 實現簡單的值解釋器
func ValueParser() p.P {
	return func(st p.State) (interface{}, error) {
		value, err := p.Choice(p.Try(StringParser),
			p.Try(FloatParser),
			p.Try(ObjectParser()),
			p.Try(ListParser()),
			p.Try(BoolParser),
			p.Try(NullParser),
		)(st)

		return value, err
	}
}
開發者ID:damonchen,項目名稱:pjson,代碼行數:14,代碼來源:parsec.go


注:本文中的github.com/Dwarfartisan/goparsec2.Try函數示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。