青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    今天上完課回來繼續把昨天晚上剩下的using字句完成。使用Syngram寫編譯器真是舒服啊,直接在代碼里面加兩條推導式就完成了。昨天發現了InsertEnv指令的bug以后,改過來了。不過InsertEnv不能用在using身上,只好另外寫了一個UsingEnv指令,把環境以及上游的鏈表而不是多個環境插進當前的環境中。這里展示了class和namespace是如何通過閉包(函數)來實現的,以及他們的構造過程。

    class以及namespace都是通過在return的跳轉目標后添加指令而保證return結束但是不修改class和namespace表達式的返回值。

    class函數的參數是父類的構造子,class函數在所有代碼之前首先構造好一個父類的鏈表,然后通過InsertEnv將這個表引用到自己身上,從而實現了正確的scope。然后讓constructor為空函數。ClassName.new()的時候首先運行class函數(使用callctor而不是invoke來自動找到父類并添加到參數中),然后復制堆棧,獲取constructor并調用,最后pop掉constructor函數的返回值就構造了一個完整的對象了。

    namespace也是類似。class返回的是this,namespace返回的是_env。實際上_env和this對于這兩個函數來說代表的都是相同的對象——函數內部的上下文。上下文是一個符號表,符號表可以用Table.Member的形式訪問。構造namespace的時候,首先植入這個閉包,然后用空函數調用,把結果傳出來。

    代碼:
 1 VectorSpace=namespace
 2 {
 3     Vector=class()
 4     {
 5         local X=0;
 6         local Y=0;
 7 
 8         local __get__=func(name)
 9         {
10             if(name=="length")
11             {
12                 return sqrt(X*X+Y*Y);
13             }
14             else
15                 throw("找不到"++name++"");
16         };
17 
18         local __set__=func(name,value)
19         {
20             if(name=="length")
21             {
22                 len=sqrt(X*X+Y*Y);
23                 X=X*value/len;
24                 Y=Y*value/len;
25             }
26             else
27                 throw("找不到"++name++"");
28         };
29 
30         local __add__=func({Vector}a,{Vector}b)
31         {
32             return Vector.new(a.X+b.X,a.Y+b.Y);
33         };
34 
35         local __sub__=func({Vector}a,{Vector}b)
36         {
37             return Vector.new(a.X-b.X,a.Y-b.Y);
38         };
39 
40         local tostr=func()
41         {
42             return "("++X++","++Y++")";
43         };
44 
45         local constructor=func(x,y)
46         {
47             X=x;
48             Y=y;
49         };
50     };
51 };
52 
53 v1=VectorSpace.Vector.new(3,4);
54 writeln(v1.length);
55 v1.length=10;
56 writeln(v1.tostr());
57 
58 using VectorSpace;
59 
60 v2=Vector.new(-1,1);
61 writeln((v1+v2).tostr());
62 writeln((v1-v2).tostr());
    指令:
  1 Entry : 1
  2 
  3 func 0
  4 begin
  5 FINISH_FUNCTION :
  6 end
  7 
  8 func 1
  9 begin
 10   [Line : 1]    func         2
 11   [Line : 1]    invoke       0
 12   [Line : 1]    ref          VectorSpace
 13   [Line : 1]    assign       
 14   [Line : 1]    pop          
 15   [Line : 53]    push         VectorSpace
 16   [Line : 53]    field        Vector
 17   [Line : 53]    callctor     
 18   [Line : 53]    int          3
 19   [Line : 53]    int          4
 20   [Line : 53]    copystack    2
 21   [Line : 53]    element      constructor
 22   [Line : 53]    invoke       2
 23   [Line : 53]    pop          
 24   [Line : 53]    ref          v1
 25   [Line : 53]    assign       
 26   [Line : 53]    pop          
 27   [Line : 54]    push         v1
 28   [Line : 54]    field        length
 29   [Line : 54]    push         writeln
 30   [Line : 54]    invoke       1
 31   [Line : 54]    pop          
 32   [Line : 55]    int          10
 33   [Line : 55]    push         v1
 34   [Line : 55]    fieldref     length
 35   [Line : 55]    assign       
 36   [Line : 55]    pop          
 37   [Line : 56]    push         v1
 38   [Line : 56]    field        tostr
 39   [Line : 56]    invoke       0
 40   [Line : 56]    push         writeln
 41   [Line : 56]    invoke       1
 42   [Line : 56]    pop          
 43   [Line : 58]    push         VectorSpace
 44   [Line : 58]    usingenv     
 45   [Line : 60]    push         Vector
 46   [Line : 60]    callctor     
 47   [Line : 60]    int          1
 48   [Line : 60]    neg          
 49   [Line : 60]    int          1
 50   [Line : 60]    copystack    2
 51   [Line : 60]    element      constructor
 52   [Line : 60]    invoke       2
 53   [Line : 60]    pop          
 54   [Line : 60]    ref          v2
 55   [Line : 60]    assign       
 56   [Line : 60]    pop          
 57   [Line : 61]    push         v1
 58   [Line : 61]    push         v2
 59   [Line : 61]    add          
 60   [Line : 61]    field        tostr
 61   [Line : 61]    invoke       0
 62   [Line : 61]    push         writeln
 63   [Line : 61]    invoke       1
 64   [Line : 61]    pop          
 65   [Line : 62]    push         v1
 66   [Line : 62]    push         v2
 67   [Line : 62]    sub          
 68   [Line : 62]    field        tostr
 69   [Line : 62]    invoke       0
 70   [Line : 62]    push         writeln
 71   [Line : 62]    invoke       1
 72   [Line : 62]    pop          
 73 FINISH_FUNCTION :
 74 end
 75 
 76 func 2
 77 begin
 78   [Line : 3]    push         null
 79   [Line : 3]    func         3
 80   [Line : 3]    makector     
 81   [Line : 3]    ref          Vector
 82   [Line : 3]    assign       
 83   [Line : 3]    pop          
 84 FINISH_FUNCTION :
 85   [Line : 1]    push         _env
 86   [Line : 1]    result       
 87 end
 88 
 89 func 3
 90 begin
 91   [Line : 3]    func         0
 92   [Line : 3]    localref     constructor
 93   [Line : 3]    assign       
 94   [Line : 3]    pop          
 95   [Line : 3]    push         null
 96   [Line : 3]    push         ctor
 97   [Line : 3]    ctorbase     
 98   [Line : 3]    equ          
 99   [Line : 3]    jumpfalse    CONSTRUCTOR_CTOR_NOT_NULL
100   [Line : 3]    push         null
101   [Line : 3]    fixedref     base
102   [Line : 3]    assign       
103   [Line : 3]    pop          
104   [Line : 3]    jump         CONSTRUCTOR_FINISH
105 CONSTRUCTOR_CTOR_NOT_NULL :
106   [Line : 3]    push         ctor
107   [Line : 3]    ctorbase     
108   [Line : 3]    callctor     
109   [Line : 3]    copystack    0
110   [Line : 3]    fixedref     base
111   [Line : 3]    assign       
112   [Line : 3]    pop          
113   [Line : 3]    localref     temp
114   [Line : 3]    assign       
115   [Line : 3]    pop          
116   [Line : 3]    int          0
117   [Line : 3]    localref     count
118   [Line : 3]    assign       
119   [Line : 3]    pop          
120 CONSTRUCTOR_GET_BASE_LINK :
121   [Line : 3]    push         null
122   [Line : 3]    push         temp
123   [Line : 3]    equ          
124   [Line : 3]    jumptrue     CONSTRUCTOR_LINK_DONE
125   [Line : 3]    push         count
126   [Line : 3]    int          1
127   [Line : 3]    add          
128   [Line : 3]    localref     count
129   [Line : 3]    assign       
130   [Line : 3]    pop          
131   [Line : 3]    push         temp
132   [Line : 3]    copystack    0
133   [Line : 3]    element      base
134   [Line : 3]    localref     temp
135   [Line : 3]    assign       
136   [Line : 3]    pop          
137   [Line : 3]    jump         CONSTRUCTOR_GET_BASE_LINK
138 CONSTRUCTOR_LINK_DONE :
139   [Line : 3]    push         count
140   [Line : 3]    insertenv    
141   [Line : 3]    remove       count
142   [Line : 3]    remove       temp
143 CONSTRUCTOR_FINISH :
144   [Line : 5]    int          0
145   [Line : 5]    localref     X
146   [Line : 5]    assign       
147   [Line : 5]    pop          
148   [Line : 6]    int          0
149   [Line : 6]    localref     Y
150   [Line : 6]    assign       
151   [Line : 6]    pop          
152   [Line : 8]    func         4
153   [Line : 8]    localref     __get__
154   [Line : 8]    assign       
155   [Line : 8]    pop          
156   [Line : 18]    func         5
157   [Line : 18]    localref     __set__
158   [Line : 18]    assign       
159   [Line : 18]    pop          
160   [Line : 30]    func         6
161   [Line : 30]    localref     __add__
162   [Line : 30]    assign       
163   [Line : 30]    pop          
164   [Line : 35]    func         7
165   [Line : 35]    localref     __sub__
166   [Line : 35]    assign       
167   [Line : 35]    pop          
168   [Line : 40]    func         8
169   [Line : 40]    localref     tostr
170   [Line : 40]    assign       
171   [Line : 40]    pop          
172   [Line : 45]    func         9
173   [Line : 45]    localref     constructor
174   [Line : 45]    assign       
175   [Line : 45]    pop          
176 FINISH_FUNCTION :
177   [Line : 3]    push         this
178   [Line : 3]    result       
179 end
180 
181 func 4
182   name
183 begin
184   [Line : 10]    push         name
185   [Line : 10]    string       length
186   [Line : 10]    equ          
187   [Line : 10]    jumpfalse    CHOOSE_ELSE_0
188   [Line : 12]    push         X
189   [Line : 12]    push         X
190   [Line : 12]    mul          
191   [Line : 12]    push         Y
192   [Line : 12]    push         Y
193   [Line : 12]    mul          
194   [Line : 12]    add          
195   [Line : 12]    push         sqrt
196   [Line : 12]    invoke       1
197   [Line : 12]    result       
198   [Line : 12]    jump         FINISH_FUNCTION
199   [Line : 10]    jump         CHOOSE_END_0
200 CHOOSE_ELSE_0 :
201   [Line : 15]    string       找不到
202   [Line : 15]    push         name
203   [Line : 15]    join         
204   [Line : 15]    string       。
205   [Line : 15]    join         
206   [Line : 15]    push         throw
207   [Line : 15]    invoke       1
208   [Line : 15]    pop          
209 CHOOSE_END_0 :
210 FINISH_FUNCTION :
211 end
212 
213 func 5
214   name
215   value
216 begin
217   [Line : 20]    push         name
218   [Line : 20]    string       length
219   [Line : 20]    equ          
220   [Line : 20]    jumpfalse    CHOOSE_ELSE_0
221   [Line : 22]    push         X
222   [Line : 22]    push         X
223   [Line : 22]    mul          
224   [Line : 22]    push         Y
225   [Line : 22]    push         Y
226   [Line : 22]    mul          
227   [Line : 22]    add          
228   [Line : 22]    push         sqrt
229   [Line : 22]    invoke       1
230   [Line : 22]    ref          len
231   [Line : 22]    assign       
232   [Line : 22]    pop          
233   [Line : 23]    push         X
234   [Line : 23]    push         value
235   [Line : 23]    mul          
236   [Line : 23]    push         len
237   [Line : 23]    div          
238   [Line : 23]    ref          X
239   [Line : 23]    assign       
240   [Line : 23]    pop          
241   [Line : 24]    push         Y
242   [Line : 24]    push         value
243   [Line : 24]    mul          
244   [Line : 24]    push         len
245   [Line : 24]    div          
246   [Line : 24]    ref          Y
247   [Line : 24]    assign       
248   [Line : 24]    pop          
249   [Line : 20]    jump         CHOOSE_END_0
250 CHOOSE_ELSE_0 :
251   [Line : 27]    string       找不到
252   [Line : 27]    push         name
253   [Line : 27]    join         
254   [Line : 27]    string       。
255   [Line : 27]    join         
256   [Line : 27]    push         throw
257   [Line : 27]    invoke       1
258   [Line : 27]    pop          
259 CHOOSE_END_0 :
260 FINISH_FUNCTION :
261 end
262 
263 func 6
264   a
265   b
266 begin
267   [Line : 30]    string       參數"a"類型不匹配
268   [Line : 30]    push         a
269   [Line : 30]    push         Vector
270   [Line : 30]    isfromctor   
271   [Line : 30]    jumpfalse    PARAMCHECK_FAIL
272   [Line : 30]    pop          
273   [Line : 30]    string       參數"b"類型不匹配
274   [Line : 30]    push         b
275   [Line : 30]    push         Vector
276   [Line : 30]    isfromctor   
277   [Line : 30]    jumpfalse    PARAMCHECK_FAIL
278   [Line : 30]    jump         PARAMCHECK_SUCCESS
279 PARAMCHECK_FAIL :
280   [Line : 30]    raiseerror   
281 PARAMCHECK_SUCCESS :
282   [Line : 30]    pop          
283   [Line : 32]    push         Vector
284   [Line : 32]    callctor     
285   [Line : 32]    push         a
286   [Line : 32]    field        X
287   [Line : 32]    push         b
288   [Line : 32]    field        X
289   [Line : 32]    add          
290   [Line : 32]    push         a
291   [Line : 32]    field        Y
292   [Line : 32]    push         b
293   [Line : 32]    field        Y
294   [Line : 32]    add          
295   [Line : 32]    copystack    2
296   [Line : 32]    element      constructor
297   [Line : 32]    invoke       2
298   [Line : 32]    pop          
299   [Line : 32]    result       
300   [Line : 32]    jump         FINISH_FUNCTION
301 FINISH_FUNCTION :
302 end
303 
304 func 7
305   a
306   b
307 begin
308   [Line : 35]    string       參數"a"類型不匹配
309   [Line : 35]    push         a
310   [Line : 35]    push         Vector
311   [Line : 35]    isfromctor   
312   [Line : 35]    jumpfalse    PARAMCHECK_FAIL
313   [Line : 35]    pop          
314   [Line : 35]    string       參數"b"類型不匹配
315   [Line : 35]    push         b
316   [Line : 35]    push         Vector
317   [Line : 35]    isfromctor   
318   [Line : 35]    jumpfalse    PARAMCHECK_FAIL
319   [Line : 35]    jump         PARAMCHECK_SUCCESS
320 PARAMCHECK_FAIL :
321   [Line : 35]    raiseerror   
322 PARAMCHECK_SUCCESS :
323   [Line : 35]    pop          
324   [Line : 37]    push         Vector
325   [Line : 37]    callctor     
326   [Line : 37]    push         a
327   [Line : 37]    field        X
328   [Line : 37]    push         b
329   [Line : 37]    field        X
330   [Line : 37]    sub          
331   [Line : 37]    push         a
332   [Line : 37]    field        Y
333   [Line : 37]    push         b
334   [Line : 37]    field        Y
335   [Line : 37]    sub          
336   [Line : 37]    copystack    2
337   [Line : 37]    element      constructor
338   [Line : 37]    invoke       2
339   [Line : 37]    pop          
340   [Line : 37]    result       
341   [Line : 37]    jump         FINISH_FUNCTION
342 FINISH_FUNCTION :
343 end
344 
345 func 8
346 begin
347   [Line : 42]    string       (
348   [Line : 42]    push         X
349   [Line : 42]    join         
350   [Line : 42]    string       ,
351   [Line : 42]    join         
352   [Line : 42]    push         Y
353   [Line : 42]    join         
354   [Line : 42]    string       )
355   [Line : 42]    join         
356   [Line : 42]    result       
357   [Line : 42]    jump         FINISH_FUNCTION
358 FINISH_FUNCTION :
359 end
360 
361 func 9
362   x
363   y
364 begin
365   [Line : 47]    push         x
366   [Line : 47]    ref          X
367   [Line : 47]    assign       
368   [Line : 47]    pop          
369   [Line : 48]    push         y
370   [Line : 48]    ref          Y
371   [Line : 48]    assign       
372   [Line : 48]    pop          
373 FINISH_FUNCTION :
374 end
375 
posted on 2008-05-11 21:37 陳梓瀚(vczh) 閱讀(1555) 評論(4)  編輯 收藏 引用 所屬分類: Vczh Free Script

評論:
# re: Vczh Free Script 2.0中namespace和大部分操作符重載完成! 2008-05-12 00:45 | Gohan
Syngram是你以前的作品嗎?我對編譯還沒上手  回復  更多評論
  
# re: Vczh Free Script 2.0中namespace和大部分操作符重載完成! 2008-05-12 06:46 | 陳梓瀚(vczh)
是  回復  更多評論
  
# re: Vczh Free Script 2.0中namespace和大部分操作符重載完成![未登錄] 2008-05-13 04:16 | Alex
今天上完課回來繼續把昨天晚上身下的using字句完成


#- - 你把using壓身下了?  回復  更多評論
  
# re: Vczh Free Script 2.0中namespace和大部分操作符重載完成! 2008-05-15 01:07 | 買書網
寫編譯器不太好上手。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美色大人视频| 欧美亚洲在线视频| 欧美1区2区| 蜜臀久久久99精品久久久久久| 久久久www成人免费精品| 亚洲欧美精品在线| 亚洲一区二区影院| 亚洲一区二区免费视频| 亚洲一区尤物| 久久婷婷国产综合精品青草| 美女日韩欧美| 日韩亚洲精品电影| 亚洲在线不卡| 浪潮色综合久久天堂| 欧美国产三级| 国产毛片精品国产一区二区三区| 国产一区激情| 亚洲精品一二| 午夜欧美精品| 欧美1区2区| 美女爽到呻吟久久久久| 亚洲欧美久久| 久久视频在线看| 欧美成人嫩草网站| 日韩一二在线观看| 久久久91精品国产一区二区精品| 老司机午夜精品| 欧美三级在线| 激情综合视频| 亚洲欧美中文日韩v在线观看| 久久久精品tv| 99精品久久| 久久亚洲精品欧美| 国产精品一区二区黑丝| 亚洲精品视频免费在线观看| 性色av一区二区三区| 亚洲国产第一页| 亚洲无线一线二线三线区别av| 另类天堂视频在线观看| 国产精品一区免费视频| 99视频精品免费观看| 蜜臀av国产精品久久久久| 亚洲在线观看视频| 欧美日韩成人在线| 亚洲美女福利视频网站| 麻豆成人精品| 亚洲高清在线| 日韩一级在线| 麻豆国产精品一区二区三区| 国产欧美日韩精品丝袜高跟鞋| 日韩午夜在线视频| 狂野欧美性猛交xxxx巴西| 亚洲欧美怡红院| 国产精品乱看| 亚洲欧美国产不卡| 一区二区三区日韩在线观看| 欧美日韩直播| 亚洲午夜在线| av成人免费观看| 欧美日韩综合在线| 亚洲图片欧美午夜| 一区二区三区产品免费精品久久75| 欧美激情亚洲精品| 一级成人国产| 一区二区不卡在线视频 午夜欧美不卡在| 每日更新成人在线视频| 亚洲电影毛片| 亚洲激情在线观看| 欧美日本亚洲视频| 亚洲欧美综合| 欧美在线视频观看免费网站| 国产在线精品一区二区中文| 久久中文字幕导航| 免费在线播放第一区高清av| 日韩亚洲欧美成人| 亚洲少妇自拍| 国内激情久久| 亚洲国产欧美国产综合一区| 欧美日韩免费在线| 欧美一区国产二区| 久久久久国产精品麻豆ai换脸| 亚洲国产va精品久久久不卡综合| 亚洲经典在线| 国产精品丝袜xxxxxxx| 久久免费99精品久久久久久| 免费成人在线视频网站| 一本不卡影院| 欧美一区二区三区免费在线看| 一区在线视频| 亚洲精品一区二区网址| 国产日韩精品在线播放| 欧美国产一区二区在线观看 | 欧美午夜视频在线| 久久精品国产精品 | 免费看的黄色欧美网站| 亚洲网站啪啪| 欧美一区视频| 99精品视频免费| 午夜在线观看欧美| 亚洲三级视频在线观看| 亚洲一级特黄| 亚洲精品免费一二三区| 欧美在线精品免播放器视频| 日韩视频一区二区三区在线播放免费观看| 亚洲欧美中文日韩v在线观看| 亚洲国产成人精品视频| 亚洲精品免费一区二区三区| 国产日韩欧美视频| 亚洲精品在线观看视频| 在线观看日韩精品| 在线综合亚洲| 99精品国产在热久久婷婷| 欧美一区二区三区免费观看| 亚洲图片在线观看| 欧美粗暴jizz性欧美20| 久久久久国产成人精品亚洲午夜| 欧美日韩国产免费| 欧美激情无毛| 精品91在线| 性色一区二区三区| 亚洲欧美文学| 国产精品激情| 正在播放欧美视频| 一本色道久久综合狠狠躁篇怎么玩| 久久久噜噜噜久久人人看| 久久不射2019中文字幕| 国产精品视频大全| 亚洲性色视频| 午夜精品福利在线| 国产精品久久一卡二卡| 在线视频你懂得一区| 一区二区黄色| 欧美日韩一区二区三区在线| 亚洲乱码国产乱码精品精| 亚洲精品永久免费| 欧美激情欧美狂野欧美精品| 亚洲国产黄色| 99国产欧美久久久精品| 欧美大片在线观看一区二区| 亚洲国产岛国毛片在线| 亚洲精品久久久一区二区三区| 久久综合亚州| 欧美激情在线| 日韩视频一区二区三区| 激情六月婷婷综合| 亚洲人成网站在线观看播放| 性做久久久久久免费观看欧美 | 久久精品在线免费观看| 久久精品国产久精国产一老狼| 国产精品视频在线观看| 欧美一区2区三区4区公司二百 | 亚洲精品午夜| 亚洲天堂成人| 国产精品私房写真福利视频| 欧美一区二区久久久| 麻豆国产精品一区二区三区 | 亚洲欧美激情四射在线日| 一区二区av| 久久躁日日躁aaaaxxxx| 韩国一区二区在线观看| 久久久久久黄| 亚洲精品午夜精品| 久久av一区二区三区| 国产视频观看一区| 久久精品国产99精品国产亚洲性色 | 亚洲免费综合| 久久伊人亚洲| 99riav1国产精品视频| 国产精品爱久久久久久久| 香蕉国产精品偷在线观看不卡| 裸体一区二区| 一区二区福利| 国产一级揄自揄精品视频| 欧美电影免费| 欧美专区在线播放| 一本不卡影院| 亚洲国产mv| 欧美 日韩 国产在线| 精品动漫一区二区| 欧美黄色免费网站| 亚洲影视在线播放| 欧美国产日韩一区二区| 亚洲视频一区在线| 极品尤物av久久免费看| 欧美日韩一区二区免费在线观看| 久久99伊人| 一区二区三区四区在线| 亚洲福利视频网| 久久久久国产精品午夜一区| 一区二区三区免费网站| 国自产拍偷拍福利精品免费一| 欧美日韩成人综合| 久久先锋影音av| 欧美一级播放| 在线亚洲+欧美+日本专区| 欧美激情精品久久久久久蜜臀| 性欧美暴力猛交另类hd| 亚洲视频免费在线观看| 亚洲精品孕妇| 亚洲人成啪啪网站|