Mercurial > projects > dang
annotate lexer/Token.d @ 37:858b9805843d new_gen
Bug-fixes
Void can now be used and is recognized as a keyword by lexer
Fixed a problem with casting on pointer types
The expression is now optional for a ReturnStmt (only legal in void funcs)
author | Anders Halager <halager@gmail.com> |
---|---|
date | Sun, 20 Apr 2008 23:53:05 +0200 |
parents | ce17bea8e9bd |
children | 4e879f82dd64 |
rev | line source |
---|---|
1 | 1 module lexer.Token; |
2 | |
3 public | |
4 import misc.Location; | |
5 | |
6 import Integer = tango.text.convert.Integer; | |
7 | |
8 struct Token | |
9 { | |
10 Tok type; | |
11 Location location; | |
12 uint length; | |
13 | |
14 static Token opCall (Tok type, Location location, uint length) | |
15 { | |
16 Token t; | |
17 t.type = type; | |
18 t.location = location; | |
19 t.length = length; | |
20 return t; | |
21 } | |
22 | |
23 char[] getType () | |
24 { | |
25 return typeToString[this.type]; | |
26 } | |
27 | |
28 char[] toString () | |
29 { | |
30 return this.getType()~": Len: "~Integer.toString(this.length) | |
31 ~", Loc: "~location.toString; | |
32 } | |
33 | |
34 char[] get () | |
35 { | |
36 return location.get(length); | |
37 } | |
38 } | |
39 | |
40 enum Tok : ushort | |
41 { | |
42 /* Non-code related tokens */ | |
43 EOF, | |
44 | |
45 /* Basic types */ | |
46 Identifier, | |
47 Integer, | |
48 | |
49 /* Basic operators */ | |
50 Assign, | |
51 Add, Sub, | |
52 Mul, Div, | |
53 Comma, | |
54 | |
55 /* Symbols */ | |
56 OpenParentheses, | |
57 CloseParentheses, | |
58 OpenBrace, | |
59 CloseBrace, | |
60 Seperator, | |
36
ce17bea8e9bd
Switch statements support
Anders Halager <halager@gmail.com>
parents:
28
diff
changeset
|
61 Colon, |
28
69464d465284
Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents:
22
diff
changeset
|
62 Dot, |
1 | 63 |
8
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
64 /* Comparator operators */ |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
65 Eq, Ne, |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
66 Lt, Gt, |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
67 Le, Ge, |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
68 |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
69 Not, |
6 | 70 |
1 | 71 /* Keywords */ |
72 Byte, Ubyte, | |
73 Short, Ushort, | |
74 Int, Uint, | |
75 Long, Ulong, | |
76 | |
77 Float, Double, | |
78 | |
5
2c5a8f4c254a
Added very simple if support.
Anders Halager <halager@gmail.com>
parents:
1
diff
changeset
|
79 Bool, |
2c5a8f4c254a
Added very simple if support.
Anders Halager <halager@gmail.com>
parents:
1
diff
changeset
|
80 |
37 | 81 Void, |
82 | |
22 | 83 Struct, |
84 | |
11
642c6a998fd9
Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents:
8
diff
changeset
|
85 If, Else, |
642c6a998fd9
Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents:
8
diff
changeset
|
86 While, |
36
ce17bea8e9bd
Switch statements support
Anders Halager <halager@gmail.com>
parents:
28
diff
changeset
|
87 Switch, Case, Default, |
1 | 88 Return, |
89 | |
90 } | |
91 | |
92 public char[][Tok] typeToString; | |
93 | |
94 static this() | |
95 { | |
96 typeToString = | |
97 [ | |
98 Tok.EOF:"EOF"[], | |
99 Tok.Identifier:"Identifier", | |
100 Tok.Byte:"Byte", | |
101 Tok.Short:"Short", | |
102 Tok.Int:"Int", | |
103 Tok.Long:"Long", | |
5
2c5a8f4c254a
Added very simple if support.
Anders Halager <halager@gmail.com>
parents:
1
diff
changeset
|
104 Tok.Bool:"Bool", |
37 | 105 Tok.Void:"Void", |
8
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
106 Tok.Eq:"Eq", |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
107 Tok.Ne:"Ne", |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
108 Tok.Lt:"Lt", |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
109 Tok.Le:"Le", |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
110 Tok.Gt:"Gt", |
2e1069ee21af
Added Ne, Lt, Le, Gt, Ge and Not in lexer
johnsen@johnsen-desktop
parents:
6
diff
changeset
|
111 Tok.Ge:"Ge", |
1 | 112 Tok.OpenParentheses:"OpenParentheses", |
113 Tok.CloseParentheses:"CloseParentheses", | |
114 Tok.OpenBrace:"OpenBrace", | |
115 Tok.CloseBrace:"CloseBrace", | |
28
69464d465284
Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents:
22
diff
changeset
|
116 Tok.Dot:"Dot", |
1 | 117 Tok.Assign:"Assign", |
118 Tok.Add:"Add", | |
119 Tok.Sub:"Sub", | |
120 Tok.Mul:"Mul", | |
121 Tok.Div:"Div", | |
5
2c5a8f4c254a
Added very simple if support.
Anders Halager <halager@gmail.com>
parents:
1
diff
changeset
|
122 Tok.Integer:"Integer", |
2c5a8f4c254a
Added very simple if support.
Anders Halager <halager@gmail.com>
parents:
1
diff
changeset
|
123 Tok.If:"If", |
11
642c6a998fd9
Support for while statements and fixed scope for if
Anders Halager <halager@gmail.com>
parents:
8
diff
changeset
|
124 Tok.While:"While", |
36
ce17bea8e9bd
Switch statements support
Anders Halager <halager@gmail.com>
parents:
28
diff
changeset
|
125 Tok.Switch:"Switch", |
ce17bea8e9bd
Switch statements support
Anders Halager <halager@gmail.com>
parents:
28
diff
changeset
|
126 Tok.Case:"Case", |
ce17bea8e9bd
Switch statements support
Anders Halager <halager@gmail.com>
parents:
28
diff
changeset
|
127 Tok.Default:"Default", |
21
0fb2d13dce37
Now working with gdc also (gdc use reverse paremeter validating on function calls)
johnsen@johnsen-laptop
parents:
11
diff
changeset
|
128 Tok.Comma:"Comma", |
5
2c5a8f4c254a
Added very simple if support.
Anders Halager <halager@gmail.com>
parents:
1
diff
changeset
|
129 Tok.Return:"Return", |
22 | 130 Tok.Struct:"Struct", |
36
ce17bea8e9bd
Switch statements support
Anders Halager <halager@gmail.com>
parents:
28
diff
changeset
|
131 Tok.Colon:"Colon", |
1 | 132 Tok.Seperator:"Seperator" |
133 ]; | |
134 } |