Mercurial > projects > dil
annotate trunk/src/Parser.d @ 71:b3777cca323c
- Added Identity and NotIdentity tokens.
- Added constructor to Parser. Added error method and parseCondExpression().
- Added parseAssignExpression() method.
- Moved arguments() function from error() method of Lexer to module Information.
- Added members and constructor to BinaryExpression.
- Added XYZAssignExpression classes.
- Added calls to super() to classes that inherit from BinaryExpression.
author | aziz |
---|---|
date | Sun, 01 Jul 2007 16:16:05 +0000 |
parents | 0d3ef6daec04 |
children | f75e359f939f |
rev | line source |
---|---|
0 | 1 /++ |
2 Author: Aziz Köksal | |
3 License: GPL2 | |
4 +/ | |
65 | 5 module Parser; |
69
24db7c5522d5
- Added module Information for compiler messages like warnings, info and errors to the user.
aziz
parents:
68
diff
changeset
|
6 import Lexer; |
71 | 7 import Token; |
8 import Messages; | |
9 import Information; | |
70 | 10 import Expressions; |
65 | 11 |
68
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
12 enum STC |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
13 { |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
14 Abstract, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
15 Auto, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
16 Const, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
17 Deprecated, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
18 Extern, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
19 Final, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
20 Invariant, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
21 Override, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
22 Scope, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
23 Static, |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
24 Synchronized |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
25 } |
7eb83dd38901
- Simplified suffix rule and added a few more numbers to unittest.
aziz
parents:
65
diff
changeset
|
26 |
71 | 27 private alias TOK T; |
28 | |
65 | 29 class Parser |
30 { | |
71 | 31 Lexer lx; |
32 TOK delegate() nT; | |
33 | |
34 Information[] errors; | |
35 | |
36 this(char[] srcText, string fileName) | |
37 { | |
38 lx = new Lexer(srcText, fileName); | |
39 nT = &lx.nextToken; | |
40 } | |
70 | 41 |
71 | 42 Expression parseAssignExpression() |
43 { | |
44 auto e = parseCondExpression(); | |
45 switch (lx.token.type) | |
46 { | |
47 case T.Assign: | |
48 nT(); e = new AssignExpression(e, parseAssignExpression()); | |
49 break; | |
50 case T.LShiftAssign: | |
51 nT(); e = new LShiftAssignExpression(e, parseAssignExpression()); | |
52 break; | |
53 case T.RShiftAssign: | |
54 nT(); e = new RShiftAssignExpression(e, parseAssignExpression()); | |
55 break; | |
56 case T.URShiftAssign: | |
57 nT(); e = new URShiftAssignExpression(e, parseAssignExpression()); | |
58 break; | |
59 case T.OrAssign: | |
60 nT(); e = new OrAssignExpression(e, parseAssignExpression()); | |
61 break; | |
62 case T.AndAssign: | |
63 nT(); e = new AndAssignExpression(e, parseAssignExpression()); | |
64 break; | |
65 case T.PlusAssign: | |
66 nT(); e = new PlusAssignExpression(e, parseAssignExpression()); | |
67 break; | |
68 case T.MinusAssign: | |
69 nT(); e = new MinusAssignExpression(e, parseAssignExpression()); | |
70 break; | |
71 case T.DivAssign: | |
72 nT(); e = new DivAssignExpression(e, parseAssignExpression()); | |
73 break; | |
74 case T.MulAssign: | |
75 nT(); e = new MulAssignExpression(e, parseAssignExpression()); | |
76 break; | |
77 case T.ModAssign: | |
78 nT(); e = new ModAssignExpression(e, parseAssignExpression()); | |
79 break; | |
80 case T.XorAssign: | |
81 nT(); e = new XorAssignExpression(e, parseAssignExpression()); | |
82 break; | |
83 case T.CatAssign: | |
84 nT(); e = new CatAssignExpression(e, parseAssignExpression()); | |
85 break; | |
86 default: | |
87 break; | |
88 } | |
89 return e; | |
90 } | |
91 Expression parseCondExpression() | |
92 { | |
93 return new Expression(); | |
94 } | |
95 | |
96 void error(MID id, ...) | |
97 { | |
98 errors ~= new Information(Information.Type.Parser, id, lx.loc, arguments(_arguments, _argptr)); | |
99 } | |
65 | 100 } |