Mercurial > projects > dil
annotate trunk/src/main.d @ 10:3ee65d6e39c9
- Parsing // comments now.
author | aziz |
---|---|
date | Sat, 23 Jun 2007 08:33:00 +0000 |
parents | 5d6968cc751e |
children | cdf788d8bdaf |
rev | line source |
---|---|
0 | 1 /++ |
2 Author: Aziz Köksal | |
3 License: GPL2 | |
4 +/ | |
5 module dparser; | |
3 | 6 import Lexer; |
7 import Token; | |
8 import std.stdio; | |
4 | 9 import std.file; |
0 | 10 |
5 | 11 char[] xmlescape(char[] text) |
12 { | |
13 char[] result; | |
14 foreach(c; text) | |
15 switch(c) | |
16 { | |
17 case '<': result ~= "<"; break; | |
18 case '>': result ~= ">"; break; | |
19 case '&': result ~= "&"; break; | |
20 default: result ~= c; | |
21 } | |
22 return result; | |
23 } | |
24 | |
0 | 25 void main(char[][] args) |
26 { | |
4 | 27 auto srctext = cast(char[]) std.file.read(args[1]); |
28 auto lx = new Lexer(srctext); | |
0 | 29 |
5 | 30 auto tokens = lx.getTokens(); |
31 char* end = lx.text.ptr; | |
32 | |
33 writef(`<?xml version="1.0"?> | |
34 <?xml-stylesheet href="format.css" type="text/css"?> | |
35 <sourcetext>`); | |
36 foreach(ref token; tokens) | |
4 | 37 { |
5 | 38 if (end != token.start) |
39 writef("%s", xmlescape(end[0 .. token.start - end])); | |
40 char[] span = xmlescape(token.start[0 .. token.end-token.start]); | |
41 switch(token.type) | |
42 { | |
43 case TOK.Identifier: | |
44 writef("<i>%s</i>", span); | |
45 break; | |
46 case TOK.Whitespace: | |
47 writef(span); | |
48 break; | |
49 case TOK.Comment: | |
50 writef("<c>%s</c>", span); | |
51 break; | |
9
5d6968cc751e
- Parsing string and character literals now (rudimentary implementation.)
aziz
parents:
5
diff
changeset
|
52 case TOK.String: |
5d6968cc751e
- Parsing string and character literals now (rudimentary implementation.)
aziz
parents:
5
diff
changeset
|
53 writef("<sl>%s</sl>", span); |
5d6968cc751e
- Parsing string and character literals now (rudimentary implementation.)
aziz
parents:
5
diff
changeset
|
54 break; |
5d6968cc751e
- Parsing string and character literals now (rudimentary implementation.)
aziz
parents:
5
diff
changeset
|
55 case TOK.Character: |
5d6968cc751e
- Parsing string and character literals now (rudimentary implementation.)
aziz
parents:
5
diff
changeset
|
56 writef("<cl>%s</cl>", span); |
5d6968cc751e
- Parsing string and character literals now (rudimentary implementation.)
aziz
parents:
5
diff
changeset
|
57 break; |
5 | 58 default: |
59 } | |
60 end = token.end; | |
4 | 61 } |
10 | 62 writef("\n</sourcetext>"); |
0 | 63 } |