Hex Artifact Content
Not logged in

Artifact 6aa982b32b1d6e05b414acdba79a4b82222f1df4:


0000: ef bb bf 2f 2a 2a 0d 0a 20 2a 20 41 75 74 68 6f  .../**.. * Autho
0010: 72 73 3a 20 6b 2e 69 6e 61 62 61 0d 0a 20 2a 20  rs: k.inaba.. * 
0020: 4c 69 63 65 6e 73 65 3a 20 4e 59 53 4c 20 30 2e  License: NYSL 0.
0030: 39 39 38 32 20 68 74 74 70 3a 2f 2f 77 77 77 2e  9982 http://www.
0040: 6b 6d 6f 6e 6f 73 2e 6e 65 74 2f 6e 79 73 6c 2f  kmonos.net/nysl/
0050: 0d 0a 20 2a 0d 0a 20 2a 20 53 79 6e 74 61 78 20  .. *.. * Syntax 
0060: 74 72 65 65 20 66 6f 72 20 50 6f 6c 65 6d 79 20  tree for Polemy 
0070: 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
0080: 75 61 67 65 2e 0d 0a 20 2a 2f 0d 0a 6d 6f 64 75  uage... */..modu
0090: 6c 65 20 70 6f 6c 65 6d 79 2e 61 73 74 3b 0d 0a  le polemy.ast;..
00a0: 69 6d 70 6f 72 74 20 70 6f 6c 65 6d 79 2e 5f 63  import polemy._c
00b0: 6f 6d 6d 6f 6e 3b 0d 0a 69 6d 70 6f 72 74 20 70  ommon;..import p
00c0: 6f 6c 65 6d 79 2e 6c 65 78 20 3a 20 4c 65 78 50  olemy.lex : LexP
00d0: 6f 73 69 74 69 6f 6e 3b 0d 0a 0d 0a 61 6c 69 61  osition;....alia
00e0: 73 20 53 74 61 74 65 6d 65 6e 74 5b 5d 20 50 72  s Statement[] Pr
00f0: 6f 67 72 61 6d 3b 0d 0a 0d 0a 61 62 73 74 72 61  ogram;....abstra
0100: 63 74 20 63 6c 61 73 73 20 53 74 61 74 65 6d 65  ct class Stateme
0110: 6e 74 0d 0a 7b 0d 0a 09 69 6d 6d 75 74 61 62 6c  nt..{...immutabl
0120: 65 20 4c 65 78 50 6f 73 69 74 69 6f 6e 20 70 6f  e LexPosition po
0130: 73 3b 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c  s;...mixin Simpl
0140: 65 43 6f 6e 73 74 72 75 63 74 6f 72 3b 0d 0a 7d  eConstructor;..}
0150: 0d 0a 0d 0a 63 6c 61 73 73 20 44 65 63 6c 53 74  ....class DeclSt
0160: 61 74 65 6d 65 6e 74 20 3a 20 53 74 61 74 65 6d  atement : Statem
0170: 65 6e 74 0d 0a 7b 0d 0a 09 73 74 72 69 6e 67 20  ent..{...string 
0180: 20 20 20 20 76 61 72 3b 0d 0a 09 45 78 70 72 65      var;...Expre
0190: 73 73 69 6f 6e 20 65 78 70 72 3b 0d 0a 09 6d 69  ssion expr;...mi
01a0: 78 69 6e 20 53 69 6d 70 6c 65 43 6f 6e 73 74 72  xin SimpleConstr
01b0: 75 63 74 6f 72 3b 0d 0a 09 6d 69 78 69 6e 20 53  uctor;...mixin S
01c0: 69 6d 70 6c 65 43 6f 6d 70 61 72 65 3b 20 2f 2f  impleCompare; //
01d0: 20 64 6f 20 6e 6f 74 20 74 61 6b 65 20 22 70 6f   do not take "po
01e0: 73 22 20 69 6e 74 6f 20 61 63 63 6f 75 6e 74 0d  s" into account.
01f0: 0a 7d 0d 0a 0d 0a 63 6c 61 73 73 20 45 78 70 72  .}....class Expr
0200: 53 74 61 74 65 6d 65 6e 74 20 3a 20 53 74 61 74  Statement : Stat
0210: 65 6d 65 6e 74 0d 0a 7b 0d 0a 09 45 78 70 72 65  ement..{...Expre
0220: 73 73 69 6f 6e 20 65 78 70 72 3b 0d 0a 09 6d 69  ssion expr;...mi
0230: 78 69 6e 20 53 69 6d 70 6c 65 43 6f 6e 73 74 72  xin SimpleConstr
0240: 75 63 74 6f 72 3b 0d 0a 09 6d 69 78 69 6e 20 53  uctor;...mixin S
0250: 69 6d 70 6c 65 43 6f 6d 70 61 72 65 3b 20 2f 2f  impleCompare; //
0260: 20 64 6f 20 6e 6f 74 20 74 61 6b 65 20 22 70 6f   do not take "po
0270: 73 22 20 69 6e 74 6f 20 61 63 63 6f 75 6e 74 0d  s" into account.
0280: 0a 7d 0d 0a 0d 0a 61 62 73 74 72 61 63 74 20 63  .}....abstract c
0290: 6c 61 73 73 20 45 78 70 72 65 73 73 69 6f 6e 0d  lass Expression.
02a0: 0a 7b 0d 0a 09 69 6d 6d 75 74 61 62 6c 65 20 4c  .{...immutable L
02b0: 65 78 50 6f 73 69 74 69 6f 6e 20 70 6f 73 3b 0d  exPosition pos;.
02c0: 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65 43 6f  ..mixin SimpleCo
02d0: 6e 73 74 72 75 63 74 6f 72 3b 0d 0a 09 6d 69 78  nstructor;...mix
02e0: 69 6e 20 53 69 6d 70 6c 65 43 6f 6d 70 61 72 65  in SimpleCompare
02f0: 3b 20 2f 2f 20 64 6f 20 6e 6f 74 20 74 61 6b 65  ; // do not take
0300: 20 22 70 6f 73 22 20 69 6e 74 6f 20 61 63 63 6f   "pos" into acco
0310: 75 6e 74 0d 0a 7d 0d 0a 0d 0a 63 6c 61 73 73 20  unt..}....class 
0320: 53 74 72 4c 69 74 65 72 61 6c 45 78 70 72 65 73  StrLiteralExpres
0330: 73 69 6f 6e 20 3a 20 45 78 70 72 65 73 73 69 6f  sion : Expressio
0340: 6e 0d 0a 7b 0d 0a 09 73 74 72 69 6e 67 20 64 61  n..{...string da
0350: 74 61 3b 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70  ta;...mixin Simp
0360: 6c 65 43 6f 6e 73 74 72 75 63 74 6f 72 3b 0d 0a  leConstructor;..
0370: 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65 43 6f 6d  .mixin SimpleCom
0380: 70 61 72 65 3b 20 2f 2f 20 64 6f 20 6e 6f 74 20  pare; // do not 
0390: 74 61 6b 65 20 22 70 6f 73 22 20 69 6e 74 6f 20  take "pos" into 
03a0: 61 63 63 6f 75 6e 74 0d 0a 7d 0d 0a 0d 0a 63 6c  account..}....cl
03b0: 61 73 73 20 49 6e 74 4c 69 74 65 72 61 6c 45 78  ass IntLiteralEx
03c0: 70 72 65 73 73 69 6f 6e 20 3a 20 45 78 70 72 65  pression : Expre
03d0: 73 73 69 6f 6e 0d 0a 7b 0d 0a 09 42 69 67 49 6e  ssion..{...BigIn
03e0: 74 20 64 61 74 61 3b 0d 0a 09 6d 69 78 69 6e 20  t data;...mixin 
03f0: 53 69 6d 70 6c 65 43 6f 6e 73 74 72 75 63 74 6f  SimpleConstructo
0400: 72 3b 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c  r;...mixin Simpl
0410: 65 43 6f 6d 70 61 72 65 3b 20 2f 2f 20 64 6f 20  eCompare; // do 
0420: 6e 6f 74 20 74 61 6b 65 20 22 70 6f 73 22 20 69  not take "pos" i
0430: 6e 74 6f 20 61 63 63 6f 75 6e 74 0d 0a 7d 0d 0a  nto account..}..
0440: 0d 0a 63 6c 61 73 73 20 56 61 72 45 78 70 72 65  ..class VarExpre
0450: 73 73 69 6f 6e 20 3a 20 45 78 70 72 65 73 73 69  ssion : Expressi
0460: 6f 6e 0d 0a 7b 0d 0a 09 73 74 72 69 6e 67 20 76  on..{...string v
0470: 61 72 3b 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70  ar;...mixin Simp
0480: 6c 65 43 6f 6e 73 74 72 75 63 74 6f 72 3b 0d 0a  leConstructor;..
0490: 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65 43 6f 6d  .mixin SimpleCom
04a0: 70 61 72 65 3b 20 2f 2f 20 64 6f 20 6e 6f 74 20  pare; // do not 
04b0: 74 61 6b 65 20 22 70 6f 73 22 20 69 6e 74 6f 20  take "pos" into 
04c0: 61 63 63 6f 75 6e 74 0d 0a 7d 0d 0a 0d 0a 63 6c  account..}....cl
04d0: 61 73 73 20 41 73 73 69 67 6e 45 78 70 72 65 73  ass AssignExpres
04e0: 73 69 6f 6e 20 3a 20 45 78 70 72 65 73 73 69 6f  sion : Expressio
04f0: 6e 0d 0a 7b 0d 0a 09 45 78 70 72 65 73 73 69 6f  n..{...Expressio
0500: 6e 20 6c 68 73 3b 0d 0a 09 45 78 70 72 65 73 73  n lhs;...Express
0510: 69 6f 6e 20 72 68 73 3b 0d 0a 09 6d 69 78 69 6e  ion rhs;...mixin
0520: 20 53 69 6d 70 6c 65 43 6f 6e 73 74 72 75 63 74   SimpleConstruct
0530: 6f 72 3b 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70  or;...mixin Simp
0540: 6c 65 43 6f 6d 70 61 72 65 3b 20 2f 2f 20 64 6f  leCompare; // do
0550: 20 6e 6f 74 20 74 61 6b 65 20 22 70 6f 73 22 20   not take "pos" 
0560: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 0d 0a 7d 0d  into account..}.
0570: 0a 0d 0a 63 6c 61 73 73 20 46 75 6e 63 61 6c 6c  ...class Funcall
0580: 45 78 70 72 65 73 73 69 6f 6e 20 3a 20 45 78 70  Expression : Exp
0590: 72 65 73 73 69 6f 6e 0d 0a 7b 0d 0a 09 45 78 70  ression..{...Exp
05a0: 72 65 73 73 69 6f 6e 20 20 20 66 75 6e 3b 0d 0a  ression   fun;..
05b0: 09 45 78 70 72 65 73 73 69 6f 6e 5b 5d 20 61 72  .Expression[] ar
05c0: 67 73 3b 0d 0a 09 74 68 69 73 28 69 6d 6d 75 74  gs;...this(immut
05d0: 61 62 6c 65 20 4c 65 78 50 6f 73 69 74 69 6f 6e  able LexPosition
05e0: 20 70 6f 73 2c 20 45 78 70 72 65 73 73 69 6f 6e   pos, Expression
05f0: 20 66 75 6e 2c 20 45 78 70 72 65 73 73 69 6f 6e   fun, Expression
0600: 5b 5d 20 61 72 67 73 2e 2e 2e 29 0d 0a 09 09 7b  [] args...)....{
0610: 20 73 75 70 65 72 28 70 6f 73 29 3b 20 74 68 69   super(pos); thi
0620: 73 2e 66 75 6e 3d 66 75 6e 3b 20 74 68 69 73 2e  s.fun=fun; this.
0630: 61 72 67 73 3d 61 72 67 73 2e 64 75 70 3b 20 7d  args=args.dup; }
0640: 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65 43  ...mixin SimpleC
0650: 6f 6d 70 61 72 65 3b 20 2f 2f 20 64 6f 20 6e 6f  ompare; // do no
0660: 74 20 74 61 6b 65 20 22 70 6f 73 22 20 69 6e 74  t take "pos" int
0670: 6f 20 61 63 63 6f 75 6e 74 0d 0a 7d 0d 0a 0d 0a  o account..}....
0680: 63 6c 61 73 73 20 46 75 6e 4c 69 74 65 72 61 6c  class FunLiteral
0690: 45 78 70 72 65 73 73 69 6f 6e 20 3a 20 45 78 70  Expression : Exp
06a0: 72 65 73 73 69 6f 6e 0d 0a 7b 0d 0a 09 73 74 72  ression..{...str
06b0: 69 6e 67 5b 5d 20 70 61 72 61 6d 73 3b 0d 0a 09  ing[] params;...
06c0: 50 72 6f 67 72 61 6d 20 20 66 75 6e 62 6f 64 79  Program  funbody
06d0: 3b 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65  ;...mixin Simple
06e0: 43 6f 6e 73 74 72 75 63 74 6f 72 3b 0d 0a 09 6d  Constructor;...m
06f0: 69 78 69 6e 20 53 69 6d 70 6c 65 43 6f 6d 70 61  ixin SimpleCompa
0700: 72 65 3b 20 2f 2f 20 64 6f 20 6e 6f 74 20 74 61  re; // do not ta
0710: 6b 65 20 22 70 6f 73 22 20 69 6e 74 6f 20 61 63  ke "pos" into ac
0720: 63 6f 75 6e 74 0d 0a 7d 0d 0a                    count..}..