@@ -3,37 +3,57 @@ package main
33import (
44 "flag"
55 "fmt"
6+ "io/ioutil"
67 "log"
78 "os"
89
10+ "github.com/ncw/gpython/compile"
911 "github.com/ncw/gpython/parser"
1012)
1113
1214var (
13- lex = flag .Bool ("l" , false , "Lex the file only" )
14- debugLevel = flag .Int ("d" , 0 , "Debug level 0-4" )
15+ lexFile = flag .Bool ("l" , false , "Lex the file only" )
16+ compileFile = flag .Bool ("c" , false , "Lex, Parse and compile the file" )
17+ debugLevel = flag .Int ("d" , 0 , "Debug level 0-4" )
1518)
1619
1720func main () {
1821 flag .Parse ()
1922 parser .SetDebug (* debugLevel )
23+ if len (flag .Args ()) == 0 {
24+ log .Printf ("Need files to parse" )
25+ os .Exit (1 )
26+ }
2027 for _ , path := range flag .Args () {
21- if * lex {
28+ if * lexFile {
2229 fmt .Printf ("Lexing %q\n " , path )
30+ } else if * compileFile {
31+ fmt .Printf ("Compiling %q\n " , path )
2332 } else {
2433 fmt .Printf ("Parsing %q\n " , path )
2534 }
2635 in , err := os .Open (path )
2736 if err != nil {
2837 log .Fatal (err )
2938 }
30- fmt .Printf ("-----------------\n " )
31- if * lex {
32- _ , err = parser .Lex (in , "exec" )
39+ if * debugLevel > 0 {
40+ fmt .Printf ("-----------------\n " )
41+ }
42+ if * lexFile {
43+ _ , err = parser .Lex (in , path , "exec" )
44+ } else if * compileFile {
45+ var input []byte
46+ input , err = ioutil .ReadAll (in )
47+ if err != nil {
48+ log .Fatalf ("Failed to read %q: %v" , path , err )
49+ }
50+ _ , err = compile .Compile (string (input ), path , "exec" , 0 , false )
3351 } else {
34- _ , err = parser .Parse (in , "exec" )
52+ _ , err = parser .Parse (in , path , "exec" )
53+ }
54+ if * debugLevel > 0 {
55+ fmt .Printf ("-----------------\n " )
3556 }
36- fmt .Printf ("-----------------\n " )
3757 closeErr := in .Close ()
3858 if err != nil {
3959 log .Fatalf ("Failed on %q: %v" , path , err )
0 commit comments