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

隨筆-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>
            午夜一区二区三区在线观看| 1024成人网色www| 夜夜嗨一区二区三区| 欧美国产欧美综合 | 亚洲无线观看| 这里只有精品视频| 国产欧美精品一区aⅴ影院| 性久久久久久久| 欧美在线电影| 亚洲黄色天堂| 99这里只有精品| 国产婷婷精品| 亚洲成人在线视频播放| 久久久久一本一区二区青青蜜月| 在线日韩av片| 一本色道久久综合狠狠躁篇怎么玩| 欧美午夜视频一区二区| 久久久久免费观看| 欧美美女日韩| 久久精品女人天堂| 欧美精品久久天天躁| 亚洲欧美日韩国产一区二区| 久久精品日产第一区二区| 亚洲精品国产欧美| 亚洲一级免费视频| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲乱码国产乱码精品精98午夜| 国产精品亚洲一区| 亚洲高清一区二| 国产精品人人爽人人做我的可爱| 欧美成人午夜77777| 国产精品久久久久国产a级| 久久一区二区精品| 欧美性生交xxxxx久久久| 欧美成va人片在线观看| 国产精品亚洲综合一区在线观看| 亚洲精品免费在线播放| 国产精品xvideos88| 免费美女久久99| 国产精品99免视看9| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美午夜激情视频| 亚洲国产国产亚洲一二三| 国产日韩欧美一区二区| 日韩一级大片| 日韩视频不卡中文| 久久久亚洲精品一区二区三区 | 国产精品免费一区豆花| 亚洲电影免费观看高清完整版在线| 国产精品日韩在线一区| 亚洲精品中文字| 亚洲欧洲精品一区二区三区| 久久九九国产精品| 久久久精品tv| 国产一区二区在线观看免费播放 | 99re6热只有精品免费观看 | 99精品视频网| 欧美91大片| 欧美.www| 亚洲国产精品久久精品怡红院| 小处雏高清一区二区三区| 西西人体一区二区| 国产精品资源| 亚洲欧美久久久| 欧美诱惑福利视频| 国产视频一区免费看| 性色av一区二区怡红| 欧美在线免费一级片| 国产美女在线精品免费观看| 亚洲伊人一本大道中文字幕| 校园春色综合网| 国产精品久久久久天堂| 亚洲欧美日韩精品久久久久| 性视频1819p久久| 国产午夜精品在线观看| 久久久久一区二区| 亚洲电影在线播放| 亚洲免费电影在线观看| 欧美日本一区| 亚洲一级黄色片| 久久亚洲精品视频| 亚洲美女啪啪| 欧美午夜剧场| 久久精品国产免费看久久精品| 美女黄毛**国产精品啪啪| 亚洲人成在线观看一区二区 | 欧美一区日韩一区| 欧美激情国产高清| 亚洲一区二区三区久久| 国产欧美二区| 免费的成人av| 亚洲一区二区在线| 欧美mv日韩mv国产网站app| 日韩午夜av在线| 国产精品日韩在线| 欧美不卡激情三级在线观看| 99视频精品免费观看| 狠久久av成人天堂| 99国产成+人+综合+亚洲欧美| 小嫩嫩精品导航| 最新日韩av| 国产欧美日韩不卡| 欧美国产日韩一区二区三区| 亚洲伊人伊色伊影伊综合网| 欧美激情第三页| 欧美在线视频观看| 99视频有精品| 在线不卡亚洲| 国产精品一区二区女厕厕| 久久五月天婷婷| 亚洲综合日韩中文字幕v在线| 欧美高清你懂得| 久久久国产精品亚洲一区 | 国产精品久久福利| 免费在线国产精品| 欧美一级久久久| 一区二区三区色| 亚洲国产精品一区二区尤物区 | 亚洲精品一区二区三区蜜桃久| 国产欧美日韩精品a在线观看| 欧美日本网站| 欧美超级免费视 在线| 欧美在线视频在线播放完整版免费观看 | 激情成人av在线| 欧美日韩综合| 欧美激情导航| 模特精品裸拍一区| 久久久视频精品| 久久精品最新地址| 欧美资源在线| 欧美一区二区三区成人| 亚洲网站视频福利| 一本色道久久综合狠狠躁的推荐| 亚洲人成网站精品片在线观看 | 欧美顶级艳妇交换群宴| 久久精品视频亚洲| 久久精品91久久久久久再现| 欧美亚洲在线视频| 亚洲永久在线观看| 亚洲特级片在线| 亚洲永久在线| 欧美一区二区福利在线| 午夜精品福利电影| 午夜欧美理论片| 欧美主播一区二区三区| 欧美在线日韩在线| 久久免费少妇高潮久久精品99| 久久免费视频一区| 免费不卡在线观看| 欧美国产精品va在线观看| 男人的天堂亚洲| 亚洲电影免费观看高清完整版在线 | 国产午夜精品理论片a级探花 | 亚洲精品四区| 亚洲美女网站| 亚洲一区二区三区欧美| 午夜久久一区| 久久久久高清| 欧美国产精品va在线观看| 亚洲激情第一页| 洋洋av久久久久久久一区| 亚洲私人黄色宅男| 欧美激情一二三区| 一区一区视频| 亚洲精品视频在线播放| 亚洲一级在线观看| 久久精品国产2020观看福利| 欧美电影电视剧在线观看| 亚洲免费观看高清完整版在线观看| 一区二区高清视频| 欧美一区二视频在线免费观看| 欧美成人性生活| 国产精品国产三级国产普通话99| 国产日产欧产精品推荐色| 亚洲二区在线观看| 亚洲图片欧美午夜| 久久一二三国产| 日韩亚洲精品在线| 欧美综合77777色婷婷| 欧美激情一区二区三区 | 久久综合九色综合欧美就去吻| 欧美片第一页| 黄色一区二区三区四区| 99在线热播精品免费| 久久精品毛片| 日韩天堂av| 久久久欧美一区二区| 国产精品成人一区二区| 一区二区视频免费完整版观看| 亚洲天堂视频在线观看| 久久综合中文色婷婷| 亚洲精品你懂的| 欧美一级视频| 国产精品成人观看视频国产奇米| 一区二区亚洲| 久久久久久伊人| 亚洲欧美在线x视频| 欧美日韩国产综合视频在线观看中文| 红桃av永久久久| 久久国产精品一区二区|