Changeset 35669
- Timestamp:
- 10/21/09 22:08:26 (4 years ago)
- Location:
- lang/haxe/Tonyu2
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/haxe/Tonyu2/Parser.hx
r35664 r35669 53 53 static function startsWith(s:String,head:String):Bool { 54 54 return s.substr(0,head.length)==head; 55 } 56 public function parse(m:Dynamic):Dynamic { 57 return toClosure(m)(this); 55 58 } 56 59 public function toClosure(match:Dynamic):ParserSub { -
lang/haxe/Tonyu2/Test.hx
r35664 r35669 1 1 2 class TestParser extends Parser { 3 static var alpha=~/^[a-z]+/; 4 public function new(src:String) {super(src);} 5 public function parse() { 6 var res=parseSeq([alpha,alpha]); 7 var r; 8 for (r in res) { 9 trace("found :"+r); 10 } 2 class Context { 3 var vars:Hash<String>; 4 public function new() { 5 vars=new Hash<String>(); 6 buf=new Array<String>(); 7 } 8 public function checkVar(s:String) { 9 vars.set(s,"Dynamic"); 10 } 11 var buf:Array<String>; 12 public function out(s:String) { 13 buf.push(s); 11 14 } 12 15 } 16 typedef Ar=Array<Dynamic>; 17 typedef Gen={pass1:Context->Void, gen:Context->Void}; 13 18 class Test { 19 static function nop(c:Context){} 20 static function pass1(g:Gen) {return funciton(c:Context){g.pass1(c);}} 21 static function elem(t:Parser) { 22 return parse(t.tryThese(const,_var)); 23 } 24 static function const(t:Parser) { 25 var r=t.parse(~/^[0-9]+/); 26 return {pass1:nop, gen:function (c){c.out(r);}}; 27 } 28 static function _var(t:Parser) { 29 var r:String=t.parse(~/^[a-z]+/); 30 return { 31 pass1:function (c) {c.checkVar(r);}, 32 gen:function (c) {c.out(r);} 33 }; 34 } 35 static function expr (t:Parser) { 36 var r=t.parseSeq([elem, t.rept0([~/\+\-/,elem]) ]); 37 var res:Gen=r[0]; 38 var p:Ar =r[1]; 39 return { 40 pass1:pass1(res), 41 gen:function (c) { 42 var x:Ar; 43 for (x in p) { 44 c.out(x[0]); 45 x[1].gen(c); 46 res=res+cast(x[1],Int); 47 } 48 } 49 }; 50 } 14 51 static function main() { 15 new TestParser(" (1+2)*3 ").parse(); 52 53 trace( new Parser(" x=5; y=x+20;").parse(expr) ); 16 54 //System.Console.Write("Test"); 17 55 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)