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


Golang parsex.NewStateInMemory函數代碼示例

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


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

示例1: ParsexSignChecker

func ParsexSignChecker(parser px.Parser) ArgsSignChecker {
	return func(args ...interface{}) error {
		st := px.NewStateInMemory(args)
		_, err := parser(st)
		return err
	}
}
開發者ID:zy02636,項目名稱:gisp,代碼行數:7,代碼來源:functor.go

示例2: NewStringState

// NewStringState 構造一個新的基於字符串的 state
func NewStringState(data string) *px.StateInMemory {
	buf := make([]interface{}, len(data))
	for idx, r := range data {
		buf[idx] = r
	}
	return px.NewStateInMemory(buf)
}
開發者ID:gale320,項目名稱:gisp,代碼行數:8,代碼來源:parsex.go

示例3: LetFunc

func LetFunc(env Env, args ...interface{}) (Lisp, error) {
	st := px.NewStateInMemory(args)
	_, err := TypeAs(LIST)(st)
	if err != nil {
		return nil, ParsexSignErrorf("Let Args Error: except args list but error: %v", err)
	}

	local := map[string]Var{}
	vars := args[0].(List)
	for _, v := range vars {
		declares := v.(List)
		varb := declares[0].(Atom)
		slot := VarSlot(varb.Type)
		value, err := Eval(env, (declares[1]))
		if err != nil {
			return nil, err
		}
		slot.Set(value)
		local[varb.Name] = slot
	}
	meta := map[string]interface{}{
		"local": local,
	}
	let := Let{meta, args}
	return let, nil
}
開發者ID:zy02636,項目名稱:gisp,代碼行數:26,代碼來源:let.go

示例4: OrExpr

// OrExpr 是  or 表達式
func OrExpr(x, y px.Parser) LispExpr {
	return func(env Env, args ...interface{}) (Lisp, error) {
		data, err := Evals(env, args...)
		if err != nil {
			return nil, err
		}
		st := px.NewStateInMemory(data)
		rex, err := x(st)
		if err != nil {
			return nil, err
		}
		if b, ok := rex.(bool); ok {
			if b {
				return Q(true), nil
			}
			st.SeekTo(0)
			rex, err = y(st)
			if err != nil {
				return nil, err
			}
			return Q(rex), nil
		}
		return nil, ParsexSignErrorf("Unknow howto combine %v or %v for %v", x, y, data)
	}
}
開發者ID:gale320,項目名稱:gisp,代碼行數:26,代碼來源:proposition.go

示例5: TestAddx0

func TestAddx0(t *testing.T) {
	var data = []interface{}{0, 1, 2, 3, 4, 5, 6}
	st := px.NewStateInMemory(data)
	s, err := addx(st)
	if err != nil {
		t.Fatalf("except error is nil but %v", err)
	}
	if s.(Int) != 21 {
		t.Fatalf("except sum 0~6 is 21 but got %v", s)
	}
}
開發者ID:zy02636,項目名稱:gisp,代碼行數:11,代碼來源:math_test.go

示例6: GetArgs

// GetArgs 方法為將傳入的 args 的 gisp 值從指定環境中解析出來,然後傳入 parser 。
func GetArgs(env Env, parser px.Parser, args []interface{}) ([]interface{}, error) {
	ret, err := Evals(env, args...)
	if err != nil {
		return nil, err
	}
	st := px.NewStateInMemory(ret)
	_, err = parser(st)
	if err != nil {
		return nil, fmt.Errorf("Args Type Sign Check got error:%v", err)
	}
	return ret, nil
}
開發者ID:gale320,項目名稱:gisp,代碼行數:13,代碼來源:args.go

示例7: LambdaExpr

// LambdaExpr 生成一個封裝後的 Lambda 表達式
func LambdaExpr(env Env, args ...interface{}) (Tasker, error) {
	st := px.NewStateInMemory(args)
	_, err := TypeAs(LIST)(st)
	if err != nil {
		return nil, ParsexSignErrorf("Lambda Args Error: except args list but error: %v", err)
	}
	lptr, err := DeclareLambda(env, args[0].(List), args[1:]...)
	if err != nil {
		return nil, fmt.Errorf("Lambda Args Error: except lambda tasker but error: %v", err)
	}
	return Q(lptr).Eval, nil
}
開發者ID:gale320,項目名稱:gisp,代碼行數:13,代碼來源:lambda.go

示例8: MatchArgsSign

// MatchArgsSign 校驗參數是否匹配
func (lambda Lambda) MatchArgsSign(env Env, args ...interface{}) (interface{}, error) {
	params := make([]interface{}, len(args))
	for idx, arg := range args {
		param, err := Eval(env, arg)
		if err != nil {
			return nil, err
		}
		params[idx] = param
	}
	pxs := lambda.Meta["parameter parsexs"].([]px.Parser)
	st := px.NewStateInMemory(params)
	return px.UnionAll(pxs...)(st)
}
開發者ID:gale320,項目名稱:gisp,代碼行數:14,代碼來源:lambda.go

示例9: ExtExpr

// ExtExpr 帶擴展環境
func ExtExpr(extExpr func(env Env) px.Parser) LispExpr {
	return func(env Env, args ...interface{}) (Lisp, error) {
		data, err := Evals(env, args...)
		if err != nil {
			return nil, err
		}
		st := px.NewStateInMemory(data)
		ret, err := extExpr(env)(st)
		if err != nil {
			return nil, err
		}
		return Q(ret), nil
	}
}
開發者ID:gale320,項目名稱:gisp,代碼行數:15,代碼來源:proposition.go

示例10: Task

func (mrm mrMul) Task(env Env, args ...interface{}) (Lisp, error) {
	params, err := Evals(env, args...)
	if err != nil {
		return nil, err
	}
	st := px.NewStateInMemory(params)
	data, err := mrm.argsParser(st)
	if err != nil {
		return nil, err
	}
	return TaskBox{func(env Env) (interface{}, error) {
		vals := data.([]interface{})
		m := vals[0].(money)
		for _, r := range vals[1].([]interface{}) {
			m = m.Mul(r.(Float))
		}
		return m, nil
	}}, nil
}
開發者ID:kooksee,項目名稱:gisp2,代碼行數:19,代碼來源:function_test.go

示例11: ParsexReverseExpr

// ParsexReverseExpr 是倒排運算
func ParsexReverseExpr(pxExpr px.Parser) LispExpr {
	return func(env Env, args ...interface{}) (Lisp, error) {
		data, err := Evals(env, args...)
		if err != nil {
			return nil, err
		}
		l := len(data)
		last := l - 1
		datax := make([]interface{}, l)
		for idx, item := range data {
			datax[last-idx] = item
		}
		st := px.NewStateInMemory(data)
		x, err := pxExpr(st)
		if err != nil {
			return nil, err
		}
		return Q(x), nil
	}
}
開發者ID:gale320,項目名稱:gisp,代碼行數:21,代碼來源:proposition.go

示例12:

// Axiom 是基本的 LISP 公理實現,盡可能貼近原始的 LISP 公理描述,但是部分實現對實際的 golang
// 環境做了妥協
var Axiom = Toolkit{
	Meta: map[string]interface{}{
		"name":     "axiom",
		"category": "package",
	},
	Content: map[string]interface{}{
		"quote": LispExpr(func(env Env, args ...interface{}) (Lisp, error) {
			if len(args) != 1 {
				return nil, fmt.Errorf("Quote Args Error: except only one arg but %v", args)
			}
			return Q(Q(args[0])), nil
		}),
		"var": LispExpr(func(env Env, args ...interface{}) (Lisp, error) {
			st := px.NewStateInMemory(args)
			_, err := px.Binds_(TypeAs(ATOM), px.Either(px.Try(px.Eof),
				px.Bind_(px.AnyOne, px.Eof)))(st)
			if err != nil {
				return nil, err
			}
			first := args[0].(Atom)
			slot := VarSlot(first.Type)
			if len(args) == 1 {
				err := env.Defvar(first.Name, slot)
				return Q(nil), err
			}
			val, err := Eval(env, args[1])
			slot.Set(val)
			err = env.Defvar(first.Name, slot)
			return Q(val), err
開發者ID:gale320,項目名稱:gisp,代碼行數:31,代碼來源:axiom.go

示例13:

		"category": "package",
	},
	Content: map[string]interface{}{
		"state": func(env Env, args ...interface{}) (Lisp, error) {
			if len(args) != 1 {
				return nil, ParsexSignErrorf("Parsex Arg Error:except args has 1 arg.")
			}
			param, err := Eval(env, args[0])
			if err != nil {
				return nil, err
			}
			switch data := param.(type) {
			case string:
				return Q(NewStringState(data)), nil
			case List:
				return Q(px.NewStateInMemory(data)), nil
			default:
				return nil, fmt.Errorf("Parsex Error: Except create a state from a string or List but %v", data)
			}
		},
		"s2str": func(env Env, args ...interface{}) (Lisp, error) {
			if len(args) != 1 {
				return nil, ParsexSignErrorf("Slice to string Arg Error:except args has 1 arg.")
			}
			param, err := Eval(env, args[0])
			if err != nil {
				return nil, err
			}
			var (
				slice []interface{}
				ok    bool
開發者ID:gale320,項目名稱:gisp,代碼行數:31,代碼來源:parsex.go


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