comparison 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
comparison
equal deleted inserted replaced
70:0d3ef6daec04 71:b3777cca323c
2 Author: Aziz Köksal 2 Author: Aziz Köksal
3 License: GPL2 3 License: GPL2
4 +/ 4 +/
5 module Parser; 5 module Parser;
6 import Lexer; 6 import Lexer;
7 import Token;
8 import Messages;
9 import Information;
7 import Expressions; 10 import Expressions;
8 11
9 enum STC 12 enum STC
10 { 13 {
11 Abstract, 14 Abstract,
19 Scope, 22 Scope,
20 Static, 23 Static,
21 Synchronized 24 Synchronized
22 } 25 }
23 26
27 private alias TOK T;
28
24 class Parser 29 class Parser
25 { 30 {
26 private Lexer lx; 31 Lexer lx;
27 alias lx.nextToken nextToken; 32 TOK delegate() nT;
28 33
34 Information[] errors;
35
36 this(char[] srcText, string fileName)
37 {
38 lx = new Lexer(srcText, fileName);
39 nT = &lx.nextToken;
40 }
41
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 }
29 } 100 }