annotate trunk/src/main.d @ 30:426767b94635

- Added code for parsing the '#line' special token. - Added fileName to Lexer. - Added _uint to Token. - Added basic peek() method to Lexer.
author aziz
date Mon, 25 Jun 2007 08:37:02 +0000
parents 3a9daccf7d96
children 94f09f4e988e
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
8ba2570de175 Initial import.
aziz
parents:
diff changeset
3 License: GPL2
8ba2570de175 Initial import.
aziz
parents:
diff changeset
4 +/
8ba2570de175 Initial import.
aziz
parents:
diff changeset
5 module dparser;
3
4bbce78bfb1e - Added TOK enum.
aziz
parents: 0
diff changeset
6 import Lexer;
4bbce78bfb1e - Added TOK enum.
aziz
parents: 0
diff changeset
7 import Token;
4bbce78bfb1e - Added TOK enum.
aziz
parents: 0
diff changeset
8 import std.stdio;
4
92df59b1ec4a - Started implementation of scan().
aziz
parents: 3
diff changeset
9 import std.file;
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
10
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
11 char[] xmlescape(char[] text)
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
12 {
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
13 char[] result;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
14 foreach(c; text)
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
15 switch(c)
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
16 {
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
17 case '<': result ~= "&lt;"; break;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
18 case '>': result ~= "&gt;"; break;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
19 case '&': result ~= "&amp;"; break;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
20 default: result ~= c;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
21 }
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
22 return result;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
23 }
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
24
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
25 void main(char[][] args)
8ba2570de175 Initial import.
aziz
parents:
diff changeset
26 {
4
92df59b1ec4a - Started implementation of scan().
aziz
parents: 3
diff changeset
27 auto srctext = cast(char[]) std.file.read(args[1]);
30
426767b94635 - Added code for parsing the '#line' special token.
aziz
parents: 28
diff changeset
28 auto lx = new Lexer(srctext, args[1]);
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
29
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
30 auto tokens = lx.getTokens();
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
31 char* end = lx.text.ptr;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
32
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
33 writef(`<?xml version="1.0"?>
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
34 <?xml-stylesheet href="format.css" type="text/css"?>
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
35 <sourcetext>`);
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
36 foreach(ref token; tokens)
4
92df59b1ec4a - Started implementation of scan().
aziz
parents: 3
diff changeset
37 {
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
38 if (end != token.start)
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
39 writef("%s", xmlescape(end[0 .. token.start - end]));
28
3a9daccf7d96 - Added table for identifiers to Lexer.
aziz
parents: 22
diff changeset
40 string span = xmlescape(token.span);
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
41 switch(token.type)
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
42 {
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
43 case TOK.Identifier:
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
44 writef("<i>%s</i>", span);
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
45 break;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
46 case TOK.Comment:
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
47 writef("<c>%s</c>", span);
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
48 break;
9
5d6968cc751e - Parsing string and character literals now (rudimentary implementation.)
aziz
parents: 5
diff changeset
49 case TOK.String:
5d6968cc751e - Parsing string and character literals now (rudimentary implementation.)
aziz
parents: 5
diff changeset
50 writef("<sl>%s</sl>", span);
5d6968cc751e - Parsing string and character literals now (rudimentary implementation.)
aziz
parents: 5
diff changeset
51 break;
5d6968cc751e - Parsing string and character literals now (rudimentary implementation.)
aziz
parents: 5
diff changeset
52 case TOK.Character:
5d6968cc751e - Parsing string and character literals now (rudimentary implementation.)
aziz
parents: 5
diff changeset
53 writef("<cl>%s</cl>", span);
5d6968cc751e - Parsing string and character literals now (rudimentary implementation.)
aziz
parents: 5
diff changeset
54 break;
14
cdf788d8bdaf - Parsing /= now.
aziz
parents: 10
diff changeset
55 case TOK.DivisionAssign:
cdf788d8bdaf - Parsing /= now.
aziz
parents: 10
diff changeset
56 writef("<op>%s</op>", span);
cdf788d8bdaf - Parsing /= now.
aziz
parents: 10
diff changeset
57 break;
15
c70c028e47dd - Started implementation of lexing numbers.
aziz
parents: 14
diff changeset
58 case TOK.Number:
c70c028e47dd - Started implementation of lexing numbers.
aziz
parents: 14
diff changeset
59 writef("<n>%s</n>", span);
c70c028e47dd - Started implementation of lexing numbers.
aziz
parents: 14
diff changeset
60 break;
20
d6adfbd7c513 - Added code for parsing braces.
aziz
parents: 17
diff changeset
61 case TOK.LParen, TOK.RParen, TOK.LBracket,
d6adfbd7c513 - Added code for parsing braces.
aziz
parents: 17
diff changeset
62 TOK.RBracket, TOK.LBrace, TOK.RBrace:
d6adfbd7c513 - Added code for parsing braces.
aziz
parents: 17
diff changeset
63 writef("<br>%s</br>", span);
d6adfbd7c513 - Added code for parsing braces.
aziz
parents: 17
diff changeset
64 break;
22
b05fff8e2ce4 - Added code for parsing Dot, Slice and Ellipses tokens.
aziz
parents: 21
diff changeset
65 case TOK.EOF: break;
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
66 default:
28
3a9daccf7d96 - Added table for identifiers to Lexer.
aziz
parents: 22
diff changeset
67 if (token.isKeyword())
3a9daccf7d96 - Added table for identifiers to Lexer.
aziz
parents: 22
diff changeset
68 writef("<k>%s</k>", span);
3a9daccf7d96 - Added table for identifiers to Lexer.
aziz
parents: 22
diff changeset
69 else
3a9daccf7d96 - Added table for identifiers to Lexer.
aziz
parents: 22
diff changeset
70 writef("%s", span);
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
71 }
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
72 end = token.end;
4
92df59b1ec4a - Started implementation of scan().
aziz
parents: 3
diff changeset
73 }
10
3ee65d6e39c9 - Parsing // comments now.
aziz
parents: 9
diff changeset
74 writef("\n</sourcetext>");
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
75 }