Beispiel #1
0
func Example_completeGeneratedProgram() { // main
	fset := token.NewFileSet()
	file := fset.AddFile("example.go", -1, len(src))
	src := bytes.NewBufferString(src)
	lx, err := lex.New(file, src, lex.RuneClass(rune2Class))
	if err != nil {
		panic(err)
	}

	l := &lexer{lx}
	for {
		c := l.scan()
		fmt.Printf("%v: %v %q\n", file.Position(c.Pos()), str(c.Rune), l.TokenBytes(nil))
		if c.Rune == lex.RuneEOF {
			return
		}
	}
	// Output:
	// example.go:3:1: FUNC "func"
	// example.go:3:6: IDENT "Xφ42"
	// example.go:3:11: '(' "("
	// example.go:3:12: ')' ")"
	// example.go:3:14: IDENT "int"
	// example.go:3:18: '{' "{"
	// example.go:3:20: IDENT "return"
	// example.go:3:27: INT "314"
	// example.go:3:31: '}' "}"
	// example.go:4:2: EOF "\xff"
}
Beispiel #2
0
func newLexer(file *token.File, src io.RuneReader) (_ *lexer, err error) {
	l := &lexer{}
	if l.Lexer, err = lex.New(
		file,
		src,
		lex.ErrorFunc(func(pos token.Pos, msg string) {
			l.errors.Add(l.File.Position(pos), msg)
		}),
		lex.RuneClass(runeClass),
	); err != nil {
		return nil, err
	}

	return l, nil
}