root/lang/haxe/Tonyu2/Test2.hx @ 36070

Revision 35831, 2.1 kB (checked in by hoge1e3, 5 years ago)
Line 
1
2class 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);
14        }
15}
16typedef Ar=Array<Dynamic>;
17typedef Gen={pass1:Context->Void, gen:Context->Void};
18class Test2 {
19    static function nop(c:Context){}
20    static function pass1(g:Gen) {return function(c:Context){g.pass1(c);}}
21    static function elem(t:Parser) {
22           return t.parse(t.either([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        }
51        static function main() {
52                var home=neko.FileSystem.fullPath("test");
53                trace("make "+home);
54                var p=new Project(home);
55                p.make();
56                trace("Compile " +home+" done!");
57        }
58        static function main5() {
59                neko.Sys.setCwd("test");
60                var f=neko.io.File.read("Test.tonyu",false);
61                var buf="";
62                while (!f.eof()) {
63                        var s=f.readLine();
64                        //if (s==null) break;
65                        buf=buf+s;
66                }
67                f.close();
68                var x="01234567890123456789";
69               
70                var cl=new grm.TParser(buf).tClass();
71                var c=new grm.Context();
72                c.className="Test";
73                cl.genCode(c);
74                trace(c.buf);
75               
76                neko.Sys.setCwd("haxe");
77            var fout = neko.io.File.write("Test.hx", false);
78                fout.writeString(c.buf);
79                fout.close();
80               
81                var p=new neko.io.Process("make.bat",[]);
82                while (true) {
83                        try {
84                                var s=p.stderr.readLine();
85                                trace(s);
86                        } catch (e:haxe.io.Eof) {break;}
87                }
88                p.close();
89                //System.Console.Write("Test");
90        }
91}
Note: See TracBrowser for help on using the browser.