Differences From Artifact [9b22488b3393157f]:
- File
polemy/ast.d
- 2010-11-08 11:57:48 - part of checkin [077506b38c] on branch trunk - Generic toString utility added. (user: kinaba) [annotate]
To Artifact [f03af1208bc8c434]:
- File
polemy/ast.d
- 2010-11-08 12:26:39 - part of checkin [80ff567c75] on branch trunk - Testing easyAST. (user: kinaba) [annotate]
2 2 * Authors: k.inaba
3 3 * License: NYSL 0.9982 http://www.kmonos.net/nysl/
4 4 *
5 5 * Syntax tree for Polemy programming language.
6 6 */
7 7 module polemy.ast;
8 8 import polemy._common;
9 -import polemy.lex : LexPosition;
9 +import polemy.lex;
10 10
11 11 alias Statement[] Program;
12 12
13 13 abstract class Statement
14 14 {
15 15 immutable LexPosition pos;
16 16 mixin SimpleConstructor;
17 17 }
18 18
19 19 class DeclStatement : Statement
20 20 {
21 21 string var;
22 22 Expression expr;
23 - mixin SimpleConstructor;
24 - mixin SimpleCompare;
23 + mixin SimpleClass;
25 24 }
26 25
27 26 class ExprStatement : Statement
28 27 {
29 28 Expression expr;
30 - mixin SimpleConstructor;
31 - mixin SimpleCompare;
29 + mixin SimpleClass;
32 30 }
33 31
34 32 abstract class Expression
35 33 {
36 34 immutable LexPosition pos;
37 35 mixin SimpleConstructor;
38 - mixin SimpleCompare;
39 36 }
40 37
41 38 class StrLiteralExpression : Expression
42 39 {
43 40 string data;
44 - mixin SimpleConstructor;
45 - mixin SimpleCompare;
41 + mixin SimpleClass;
46 42 }
47 43
48 44 class IntLiteralExpression : Expression
49 45 {
50 46 BigInt data;
51 - mixin SimpleConstructor;
52 - mixin SimpleCompare;
47 + mixin SimpleClass;
53 48 }
54 49
55 50 class VarExpression : Expression
56 51 {
57 52 string var;
58 - mixin SimpleConstructor;
59 - mixin SimpleCompare;
53 + mixin SimpleClass;
60 54 }
61 55
62 56 class AssignExpression : Expression
63 57 {
64 58 Expression lhs;
65 59 Expression rhs;
66 - mixin SimpleConstructor;
67 - mixin SimpleCompare;
60 + mixin SimpleClass;
68 61 }
69 62
70 63 class FuncallExpression : Expression
71 64 {
72 65 Expression fun;
73 66 Expression[] args;
74 67 this(immutable LexPosition pos, Expression fun, Expression[] args...)
75 68 { super(pos); this.fun=fun; this.args=args.dup; }
76 - mixin SimpleCompare;
69 + mixin SimpleClass;
77 70 }
78 71
79 72 class FunLiteralExpression : Expression
80 73 {
81 74 string[] params;
82 75 Program funbody;
83 - mixin SimpleConstructor;
84 - mixin SimpleCompare;
76 + mixin SimpleClass;
77 +}
78 +
79 +/// Handy Generator for AST nodes. To use this, mixin EasyAst;
80 +
81 +/*mixin*/
82 +template EasyAst()
83 +{
84 + template genEast(T)
85 + { T genEast(P...)(P ps) { return new T(LexPosition.dummy, ps); } }
86 +
87 + alias genEast!DeclStatement decl;
88 + alias genEast!ExprStatement expr;
89 + alias genEast!VarExpression var;
90 + alias genEast!FuncallExpression funcall;
91 + alias genEast!IntLiteralExpression intl;
92 + alias genEast!StrLiteralExpression strl;
93 + alias genEast!FunLiteralExpression fun;
85 94 }