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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
274
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
1 /++
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
2 Author: Aziz Köksal
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
3 License: GPL3
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
21 struct Identifier
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
42 }
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
43
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
44 uint toHash()
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
45 {
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
46 uint hash;
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
49 hash += c;
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
50 }
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
51 return hash;
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
52 }
dcce141c97f5 - Added module Identifier.
aziz
parents:
diff changeset
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);