Differences From Artifact [dd714695d64176f9]:
- File        
polemy/ast.d
- 2010-11-09 10:28:08 - part of checkin [dc93ad8cf6] on branch trunk - layered exec expression @lay(...) added (user: kinaba) [annotate]
 
To Artifact [b8324439b8512940]:
- File        
polemy/ast.d
- 2010-11-10 12:38:54 - part of checkin [38fcc662be] on branch trunk - cleaned up documentation comments (user: kinaba) [annotate]
 
     4      4    *
     5      5    * Syntax tree for Polemy programming language.
     6      6    */
     7      7   module polemy.ast;
     8      8   import polemy._common;
     9      9   import polemy.lex;
    10     10   
           11  +///
    11     12   abstract class AST
    12     13   {
    13     14    immutable LexPosition pos;
    14     15    mixin SimpleConstructor;
    15     16   }
    16     17   
           18  +///
    17     19   class StrLiteral : AST
    18     20   {
    19     21    string data;
    20     22    mixin SimpleClass;
    21     23   }
    22     24   
           25  +///
    23     26   class IntLiteral : AST
    24     27   {
    25     28    BigInt data;
    26     29    mixin SimpleClass;
    27     30    this(immutable LexPosition pos, long n) {super(pos); data = n;}
    28     31    this(immutable LexPosition pos, BigInt n) {super(pos); data = n;}
    29     32    this(immutable LexPosition pos, string n) {super(pos); data = BigInt(n);}
    30     33   }
    31     34   
           35  +///
    32     36   class VarExpression : AST
    33     37   {
    34     38    string var;
    35     39    mixin SimpleClass;
    36     40   }
    37     41   
           42  +///
    38     43   class LayeredExpression : AST
    39     44   {
    40     45    string lay;
    41     46    AST    expr;
    42     47    mixin SimpleClass;
    43     48   }
    44     49   
           50  +///
    45     51   class LetExpression : AST
    46     52   {
    47     53    string var;
    48     54    string layer;
    49     55    AST    init;
    50     56    AST    expr;
    51     57    mixin SimpleClass;
    52     58   }
    53     59   
           60  +///
    54     61   class FuncallExpression : AST
    55     62   {
    56     63    AST   fun;
    57     64    AST[] args;
    58     65    this(immutable LexPosition pos, AST fun, AST[] args...)
    59     66     { super(pos); this.fun=fun; this.args=args.dup; }
    60     67    mixin SimpleClass;
    61     68   }
    62     69   
           70  +///
    63     71   class FunLiteral : AST
    64     72   {
    65     73    string[] params;
    66     74    AST      funbody;
    67     75    mixin SimpleClass;
    68     76   }
    69     77   
    70     78   /// Handy Generator for AST nodes. To use this, mixin EasyAst;
    71     79   
    72     80   /*mixin*/
    73     81   template EasyAST()
    74     82   {
           83  + ///
    75     84    template genEast(T)
    76     85     { T genEast(P...)(P ps) { return new T(LexPosition.dummy, ps); } }
    77     86   
    78         - alias genEast!StrLiteral strl;
    79         - alias genEast!IntLiteral intl;
    80         - auto fun(string[] xs, AST ps) { return genEast!FunLiteral(xs,ps); } // to help type inference of D
    81         - alias genEast!VarExpression var;
    82         - alias genEast!LayeredExpression lay;
    83         - alias genEast!LetExpression let;
    84         - alias genEast!FuncallExpression call;
           87  + alias genEast!StrLiteral strl; ///
           88  + alias genEast!IntLiteral intl; ///
           89  + auto fun(string[] xs, AST ps) { return genEast!FunLiteral(xs,ps); } ///
           90  + alias genEast!VarExpression var; ///
           91  + alias genEast!LayeredExpression lay; ///
           92  + alias genEast!LetExpression let; ///
           93  + alias genEast!FuncallExpression call; ///
    85     94   }