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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
1 /++
8ba2570de175 Initial import.
aziz
parents:
diff changeset
2 Author: Aziz Köksal
249
32d354584b28 - Upgraded license notices to GPL3.
aziz
parents: 213
diff changeset
3 License: GPL3
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
4 +/
347
73f81f21f870 - Changed module name of main.d from dparser to main.
aziz
parents: 343
diff changeset
5 module main;
3
4bbce78bfb1e - Added TOK enum.
aziz
parents: 0
diff changeset
6 import std.stdio;
327
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 323
diff changeset
7 import dil.Parser;
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 323
diff changeset
8 import dil.Lexer;
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 323
diff changeset
9 import dil.Token;
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 323
diff changeset
10 import dil.Messages;
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 323
diff changeset
11 import dil.Settings;
a48a987f7515 - Added package dil to import declarations.
aziz
parents: 323
diff changeset
12 import dil.Declarations, dil.Expressions, dil.SyntaxTree;
351
97a9a2d7d46d - Added module File.
aziz
parents: 347
diff changeset
13 import dil.File;
363
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
14 import cmd.Generate;
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
15 import cmd.Statistics;
306
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
16
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
17 void main(char[][] args)
8ba2570de175 Initial import.
aziz
parents:
diff changeset
18 {
309
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 308
diff changeset
19 GlobalSettings.load();
b4d842b0d2c7 - Added new files Settings.d, config.d and lang_en.d
aziz
parents: 308
diff changeset
20
306
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
21 if (args.length <= 1)
338
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
22 return writefln(helpMain());
306
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
23
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
24 string command = args[1];
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
25 switch (command)
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
26 {
329
17f43b0d6106 - Renamed command highlight to generate.
aziz
parents: 328
diff changeset
27 case "gen", "generate":
322
ed4ef0173793 - Moved out large TOK switch case to function printToken().
aziz
parents: 315
diff changeset
28 char[] fileName;
329
17f43b0d6106 - Renamed command highlight to generate.
aziz
parents: 328
diff changeset
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
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
50 break;
363
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
51 case "stats", "statistics":
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
52 statistics(args[2]);
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
53 break;
312
fa0b6f32c1ae - Added Special to enum TOK.
aziz
parents: 309
diff changeset
54 case "parse":
fa0b6f32c1ae - Added Special to enum TOK.
aziz
parents: 309
diff changeset
55 if (args.length == 3)
fa0b6f32c1ae - Added Special to enum TOK.
aziz
parents: 309
diff changeset
56 parse(args[2]);
fa0b6f32c1ae - Added Special to enum TOK.
aziz
parents: 309
diff changeset
57 break;
338
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
58 case "?", "help":
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
59 if (args.length == 3)
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
60 printHelp(args[2]);
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
61 else
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
62 writefln(helpMain());
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
63 break;
306
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
64 default:
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
65 }
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
66 }
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
67
338
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
68 const char[] COMMANDS =
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
69 " generate (gen)\n"
363
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
70 " help (?)\n"
2b387a3c6b58 - Added package cmd.
aziz
parents: 358
diff changeset
71 " statistics (stats)\n";
338
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
72
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
73 char[] helpMain()
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
74 {
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
75 return format(MID.HelpMain, VERSION, COMMANDS, COMPILED_WITH, COMPILED_VERSION, COMPILED_DATE);
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
76 }
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
77
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
78 void printHelp(char[] command)
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
79 {
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
80 char[] msg;
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
81 switch (command)
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
82 {
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
83 case "gen", "generate":
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
84 msg = GetMsg(MID.HelpGenerate);
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
85 break;
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
86 default:
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
87 msg = helpMain();
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
88 }
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
89 writefln(msg);
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
90 }
63c6afb915f7 - Made some corrections to the message catalogs.
aziz
parents: 334
diff changeset
91
306
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
92 void parse(string fileName)
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
93 {
358
0faf57d99c1c - Replaced calls to std.file.read() with dil.loadFile().
aziz
parents: 351
diff changeset
94 auto sourceText = loadFile(fileName);
306
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
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
df237b3b5f09 - Added class Declarations.
aziz
parents: 303
diff changeset
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
bc1112f7933d - Added keyword debug to some statements.
aziz
parents: 299
diff changeset
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
df237b3b5f09 - Added class Declarations.
aziz
parents: 303
diff changeset
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
9c866aadcb5b - Moved code out of main() to separate functions.
aziz
parents: 305
diff changeset
113 }