// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import Scanner "scanner" func Scan1(filename, src string) { S := new(*Scanner.Scanner); S.Open(filename, src); for { tok, pos, val := S.Scan(); print(pos, ": ", Scanner.TokenName(tok)); if tok == Scanner.IDENT || tok == Scanner.INT || tok == Scanner.FLOAT || tok == Scanner.STRING { print(" ", val); } print("\n"); if tok == Scanner.EOF { return; } } } func Scan2(filename, src string) { S := new(*Scanner.Scanner); S.Open(filename, src); c := new(chan *Scanner.Token, 32); go S.Server(c); for { var t *Scanner.Token; t = <- c; tok, pos, val := t.tok, t.pos, t.val; print(pos, ": ", Scanner.TokenName(tok)); if tok == Scanner.IDENT || tok == Scanner.INT || tok == Scanner.FLOAT || tok == Scanner.STRING { print(" ", val); } print("\n"); if tok == Scanner.EOF { return; } } } func main() { for i := 1; i < sys.argc(); i++ { var src string; var ok bool; src, ok = sys.readfile(sys.argv(i)); if ok { print("scanning (standard) " + sys.argv(i) + "\n"); Scan1(sys.argv(i), src); print("\n"); print("scanning (channels) " + sys.argv(i) + "\n"); Scan2(sys.argv(i), src); } else { print("error: cannot read " + sys.argv(i) + "\n"); } print("\n"); } }