示例#1
0
func Example() {
	f, err := os.Open("hello.ook")
	if err != nil {
		panic(err)
	}

	commands, err := Parse(bufio.NewReader(f))
	if err != nil {
		panic(err)
	}

	err = f.Close()
	if err != nil {
		panic(err)
	}

	var buf bytes.Buffer
	w := bf.NewWriter(&buf)
	_, err = w.Program(commands)
	if err != nil {
		panic(err)
	}
	err = w.Close()
	if err != nil {
		panic(err)
	}

	prog, err := bit.Parse(&buf)
	if err != nil {
		panic(err)
	}

	bw := bufio.NewWriter(os.Stdout)

	err = prog.RunByte(bufio.NewReader(os.Stdin), bw)
	if err != nil {
		panic(err)
	}

	err = bw.Flush()
	if err != nil {
		panic(err)
	}

	// Output:
	// Hello World!
}
示例#2
0
文件: main.go 项目: BenLubar/bit
func main() {
	list, err := bf.Parse(bf.Tokenize(os.Stdin))
	if err != nil {
		log.Fatal(err)
	}

	w := bf.NewWriter(os.Stdout)

	_, err = w.Program(list)
	if err != nil {
		log.Fatal(err)
	}

	err = w.Close()
	if err != nil {
		log.Fatal(err)
	}
}
示例#3
0
文件: main.go 项目: BenLubar/bit
func main() {
	yyErrorVerbose = true

	list, err := Parse(bufio.NewReader(os.Stdin))
	if err != nil {
		log.Fatal(err)
	}

	w := bf.NewWriter(os.Stdout)

	_, err = w.Program(list)
	if err != nil {
		log.Fatal(err)
	}

	err = w.Close()
	if err != nil {
		log.Fatal(err)
	}
}
示例#4
0
文件: opt_test.go 项目: BenLubar/bit
func testOpt(t *testing.T, bfprog []bf.Command) {
	r, w := io.Pipe()

	errs := make(chan error, 2)
	ch := make(chan Program, 1)

	go func() {
		bfw := bf.NewWriter(w)
		_, err := bfw.Program(bfprog)
		if err != nil {
			t.Error(err)
			errs <- err
			return
		}
		err = bfw.Close()
		if err != nil {
			t.Error(err)
			errs <- err
			return
		}
		err = w.Close()
		if err != nil {
			t.Error(err)
			errs <- err
			return
		}
	}()

	go func() {
		prog, err := Parse(bufio.NewReader(r))
		if err != nil {
			t.Error(err)
			errs <- err
			return
		}
		ch <- prog
	}()

	select {
	case err := <-errs:
		panic(err)

	case prog := <-ch:
		ctx0, err := prog.run(nil, nil, nil)
		if err != nil {
			panic(err)
		}

		prog.Optimize()

		trace := func(l *line, c *context) {
			if l.opt != nil {
				t.Logf("%d: %#v", l.num, l.opt)
			} else {
				t.Logf("%d: %#v", l.num, l.stmt)
			}
		}
		ctx1, err := prog.run(nil, nil, trace)
		if err != nil {
			panic(err)
		}

		if !reflect.DeepEqual(ctx0, ctx1) {
			t.Errorf("expected equal:\n%#v\n%#v", ctx0, ctx1)
		}
	}
}