Mercurial > projects > dil
annotate src/dil/lexer/Identifier.d @ 806:bcb74c9b895c
Moved out files in the trunk folder to the root.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 09 Mar 2008 00:12:19 +0100 |
parents | trunk/src/dil/lexer/Identifier.d@9f61e8af55d5 |
children |
rev | line source |
---|---|
274 | 1 /++ |
2 Author: Aziz Köksal | |
3 License: GPL3 | |
4 +/ | |
600
041eae272362
Moved dil.Identifier to dil.lexer.Identifier.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
597
diff
changeset
|
5 module dil.lexer.Identifier; |
597
4d50267f59c9
Moved dil.TokensEnum to dil.lexer.TokensEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
505
diff
changeset
|
6 |
4d50267f59c9
Moved dil.TokensEnum to dil.lexer.TokensEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
505
diff
changeset
|
7 import dil.lexer.TokensEnum; |
602
c2e35c83c394
Moved dil.IdentsEnum to dil.lexer.IdentsEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
600
diff
changeset
|
8 import dil.lexer.IdentsEnum; |
391
33b566df6af4
Migrated project to Tango.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
327
diff
changeset
|
9 import common; |
274 | 10 |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
11 /// Represents an identifier as defined in the D specs. |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
12 /// |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
13 ///<pre> |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
14 /// Identifier := IdStart IdChar* |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
15 /// IdStart := "_" | Letter |
777
9f61e8af55d5
Added module dil.Compilation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
769
diff
changeset
|
16 /// IdChar := IdStart | "0"-"9" |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
17 /// Letter := UniAlpha |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
18 ///</pre> |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
19 /// Unicode alphas are defined in Unicode 5.0.0. |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
499
diff
changeset
|
20 align(1) |
274 | 21 struct Identifier |
22 { | |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
23 string str; /// The UTF-8 string of the identifier. |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
24 TOK kind; /// The token kind. |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
25 IDK idKind; /// Only for predefined identifiers. |
274 | 26 |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
27 static Identifier* opCall(string str, TOK kind) |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
28 { |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
29 auto id = new Identifier; |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
30 id.str = str; |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
31 id.kind = kind; |
505
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
32 return id; |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
33 } |
3bb94ba21490
Refactored a great amount of code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
34 |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
35 static Identifier* opCall(string str, TOK kind, IDK idKind) |
274 | 36 { |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
499
diff
changeset
|
37 auto id = new Identifier; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
499
diff
changeset
|
38 id.str = str; |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
39 id.kind = kind; |
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
610
diff
changeset
|
40 id.idKind = idKind; |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
499
diff
changeset
|
41 return id; |
274 | 42 } |
43 | |
44 uint toHash() | |
45 { | |
46 uint hash; | |
47 foreach(c; str) { | |
610
f58fd84c0d18
Changed 9 to 11 in hashing function for identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
602
diff
changeset
|
48 hash *= 11; |
274 | 49 hash += c; |
50 } | |
51 return hash; | |
52 } | |
53 } | |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
499
diff
changeset
|
54 // pragma(msg, Identifier.sizeof.stringof); |