Mercurial > projects > dil
annotate trunk/src/main.d @ 363:2b387a3c6b58
- Added package cmd.
- Moved code from main.d to cmd.Generate.
- Added command stats/statistics (implemented in cmd.Statistics.)
author | aziz |
---|---|
date | Thu, 30 Aug 2007 12:02:04 +0000 |
parents | 0faf57d99c1c |
children | 1059295c2727 |
rev | line source |
---|---|
0 | 1 /++ |
2 Author: Aziz Köksal | |
249 | 3 License: GPL3 |
0 | 4 +/ |
347 | 5 module main; |
3 | 6 import std.stdio; |
327 | 7 import dil.Parser; |
8 import dil.Lexer; | |
9 import dil.Token; | |
10 import dil.Messages; | |
11 import dil.Settings; | |
12 import dil.Declarations, dil.Expressions, dil.SyntaxTree; | |
351 | 13 import dil.File; |
363 | 14 import cmd.Generate; |
15 import cmd.Statistics; | |
306 | 16 |
0 | 17 void main(char[][] args) |
18 { | |
309 | 19 GlobalSettings.load(); |
20 | |
306 | 21 if (args.length <= 1) |
338 | 22 return writefln(helpMain()); |
306 | 23 |
24 string command = args[1]; | |
25 switch (command) | |
26 { | |
329 | 27 case "gen", "generate": |
322
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
28 char[] fileName; |
329 | 29 DocOption options = DocOption.Tokens; |
322
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
30 foreach (arg; args[2..$]) |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
31 { |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
32 switch (arg) |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
33 { |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
34 case "--syntax": |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
35 options |= DocOption.Syntax; break; |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
36 case "--xml": |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
37 options |= DocOption.XML; break; |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
38 case "--html": |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
39 options |= DocOption.HTML; break; |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
40 default: |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
41 fileName = arg; |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
42 } |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
43 } |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
44 if (!(options & (DocOption.XML | DocOption.HTML))) |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
45 options |= DocOption.XML; // Default to XML. |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
46 if (options & DocOption.Syntax) |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
47 syntaxToDoc(fileName, options); |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
48 else |
ed4ef0173793
- Moved out large TOK switch case to function printToken().
aziz
parents:
315
diff
changeset
|
49 tokensToDoc(fileName, options); |
306 | 50 break; |
363 | 51 case "stats", "statistics": |
52 statistics(args[2]); | |
53 break; | |
312 | 54 case "parse": |
55 if (args.length == 3) | |
56 parse(args[2]); | |
57 break; | |
338 | 58 case "?", "help": |
59 if (args.length == 3) | |
60 printHelp(args[2]); | |
61 else | |
62 writefln(helpMain()); | |
63 break; | |
306 | 64 default: |
65 } | |
66 } | |
67 | |
338 | 68 const char[] COMMANDS = |
69 " generate (gen)\n" | |
363 | 70 " help (?)\n" |
71 " statistics (stats)\n"; | |
338 | 72 |
73 char[] helpMain() | |
74 { | |
75 return format(MID.HelpMain, VERSION, COMMANDS, COMPILED_WITH, COMPILED_VERSION, COMPILED_DATE); | |
76 } | |
77 | |
78 void printHelp(char[] command) | |
79 { | |
80 char[] msg; | |
81 switch (command) | |
82 { | |
83 case "gen", "generate": | |
84 msg = GetMsg(MID.HelpGenerate); | |
85 break; | |
86 default: | |
87 msg = helpMain(); | |
88 } | |
89 writefln(msg); | |
90 } | |
91 | |
306 | 92 void parse(string fileName) |
93 { | |
358
0faf57d99c1c
- Replaced calls to std.file.read() with dil.loadFile().
aziz
parents:
351
diff
changeset
|
94 auto sourceText = loadFile(fileName); |
306 | 95 auto parser = new Parser(sourceText, fileName); |
213
b0ebde88d2d4
- Added members trying, errorCount and prev (for debugging) to Parser.
aziz
parents:
112
diff
changeset
|
96 parser.start(); |
305 | 97 auto root = parser.parseModule(); |
299
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
98 |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
99 void print(Node[] decls, char[] indent) |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
100 { |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
101 foreach(decl; decls) |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
102 { |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
103 assert(decl !is null); |
303 | 104 writefln(indent, decl.classinfo.name, ": begin=%s end=%s", decl.begin ? decl.begin.srcText : "\33[31mnull\33[0m", decl.end ? decl.end.srcText : "\33[31mnull\33[0m"); |
299
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
105 print(decl.children, indent ~ " "); |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
106 } |
559d5d62e0c1
- Added checks for null before adding member to Node.children.
aziz
parents:
249
diff
changeset
|
107 } |
305 | 108 print(root.children, ""); |
213
b0ebde88d2d4
- Added members trying, errorCount and prev (for debugging) to Parser.
aziz
parents:
112
diff
changeset
|
109 foreach (error; parser.errors) |
b0ebde88d2d4
- Added members trying, errorCount and prev (for debugging) to Parser.
aziz
parents:
112
diff
changeset
|
110 { |
b0ebde88d2d4
- Added members trying, errorCount and prev (for debugging) to Parser.
aziz
parents:
112
diff
changeset
|
111 writefln(`%s(%d)P: %s`, parser.lx.fileName, error.loc, error.getMsg); |
b0ebde88d2d4
- Added members trying, errorCount and prev (for debugging) to Parser.
aziz
parents:
112
diff
changeset
|
112 } |
306 | 113 } |