Differences From Artifact [cc80329bc2ab2034]:
- File
polemy/lex.d
- 2010-11-08 16:40:55 - part of checkin [aa770610d3] on branch trunk - added layered-let (user: kinaba) [annotate]
To Artifact [df057f5d35e6bc8a]:
- File
polemy/lex.d
- 2010-11-09 05:19:20 - part of checkin [8de5b49cdf] on branch trunk - split tricks module into a separate package. (user: kinaba) [annotate]
11 11
12 /// Exception from this module 12 /// Exception from this module
13 13
14 class LexException : Exception 14 class LexException : Exception
15 { 15 {
16 const LexPosition pos; 16 const LexPosition pos;
17 17
18 private this( const LexPosition pos, string msg ) | 18 this( const LexPosition pos, string msg, string file="", int line=0 )
19 { super(sprintf!"%s [%s]"(msg, pos)); this.pos = pos; } | 19 { super(sprintf!"[%s] %s"(pos, msg), file, line); this.pos = pos
20 }; 20 };
21 21
22 /// Represents a position in a source code 22 /// Represents a position in a source code
23 23
24 class LexPosition 24 class LexPosition
25 { 25 {
26 immutable string filename; /// name of the source file 26 immutable string filename; /// name of the source file
27 immutable int lineno; /// 1-origin 27 immutable int lineno; /// 1-origin
28 immutable int column; /// 1-origin 28 immutable int column; /// 1-origin
29 29
> 30 mixin SimpleClass;
30 override string toString() const 31 override string toString() const
31 { return sprintf!"%s:%d:%d"(filename, lineno, column); } 32 { return sprintf!"%s:%d:%d"(filename, lineno, column); }
32 33
33 mixin SimpleConstructor; <
34 mixin SimpleCompare; <
35 <
36 static immutable LexPosition dummy; 34 static immutable LexPosition dummy;
37 static this(){ dummy = new immutable(LexPosition)("<unnamed>",0,0); } 35 static this(){ dummy = new immutable(LexPosition)("<unnamed>",0,0); }
38 } 36 }
39 37
40 unittest 38 unittest
41 { 39 {
42 auto p = new LexPosition("hello.cpp", 123, 45); 40 auto p = new LexPosition("hello.cpp", 123, 45);
................................................................................................................................................................................
59 57
60 class Token 58 class Token
61 { 59 {
62 immutable LexPosition pos; /// Position where the token occurred in t 60 immutable LexPosition pos; /// Position where the token occurred in t
63 immutable string str; /// The token string itself 61 immutable string str; /// The token string itself
64 immutable bool quoted; /// Was it a "quoted" token or unquoted? 62 immutable bool quoted; /// Was it a "quoted" token or unquoted?
65 63
66 mixin SimpleConstructor; <
67 mixin SimpleCompare; | 64 mixin SimpleClass;
68 mixin SimpleToString; <
69 } 65 }
70 66
71 unittest 67 unittest
72 { 68 {
73 auto p = new immutable(LexPosition)("hello.cpp", 123, 45); 69 auto p = new immutable(LexPosition)("hello.cpp", 123, 45);
74 auto t = new Token(p, "class", false); 70 auto t = new Token(p, "class", false);
75 auto u = new Token(p, "class", true); 71 auto u = new Token(p, "class", true);