annotate trunk/src/main.d @ 9:5d6968cc751e

- Parsing string and character literals now (rudimentary implementation.)
author aziz
date Sat, 23 Jun 2007 07:46:00 +0000
parents 79b4e8848794
children 3ee65d6e39c9
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]);
92df59b1ec4a - Started implementation of scan().
aziz
parents: 3
diff changeset
28 auto lx = new Lexer(srctext);
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]));
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
40 char[] span = xmlescape(token.start[0 .. token.end-token.start]);
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.Whitespace:
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
47 writef(span);
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
48 break;
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
49 case TOK.Comment:
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
50 writef("<c>%s</c>", span);
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
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
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
58 default:
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
59 }
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
60 end = token.end;
4
92df59b1ec4a - Started implementation of scan().
aziz
parents: 3
diff changeset
61 }
5
79b4e8848794 - Started writing XML generator.
aziz
parents: 4
diff changeset
62 writef("</sourcetext>");
0
8ba2570de175 Initial import.
aziz
parents:
diff changeset
63 }