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

隨筆-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) 閱讀(1563) 評論(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>
            欧美高清免费| 亚洲三级毛片| 久久综合色播五月| 久久av一区二区三区漫画| 中国亚洲黄色| 亚洲一区免费视频| 午夜精品婷婷| 老司机67194精品线观看| 久久久亚洲国产美女国产盗摄| 午夜精品婷婷| 久久看片网站| 欧美激情一区二区三区蜜桃视频 | 国产精品久久久久久久久动漫| 欧美人与禽性xxxxx杂性| 欧美日韩视频在线第一区| 国产精品高潮在线| 国外精品视频| 亚洲精品美女91| 性做久久久久久| 欧美阿v一级看视频| 日韩视频在线观看免费| 亚洲女同在线| 欧美成人精品h版在线观看| 欧美视频一区二区三区在线观看| 国产精品成人aaaaa网站 | 欧美亚男人的天堂| 国内自拍一区| 在线一区日本视频| 美乳少妇欧美精品| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久久久综合网天天| 欧美高清视频在线播放| 一区二区免费在线观看| 久久亚洲影音av资源网| 欧美日韩xxxxx| 在线观看91精品国产入口| 亚洲一区二区伦理| 亚洲国产精品va在看黑人| 亚洲激情精品| 欧美在线影院在线视频| 欧美视频官网| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧美综合一区| 亚洲精品视频二区| 久久国产精品亚洲va麻豆| 欧美日韩精品中文字幕| 亚洲激情一区二区| 国产一区二区电影在线观看 | 国语自产精品视频在线看抢先版结局 | 国产欧美日韩精品丝袜高跟鞋 | 欧美在线观看一区| 欧美日产在线观看| 亚洲黄一区二区三区| 久久久综合精品| 亚洲综合国产| 国产精品高潮视频| 亚洲欧美变态国产另类| 亚洲精品视频在线播放| 欧美成人午夜| 亚洲美女诱惑| 亚洲精品小视频| 欧美日韩黄色大片| 一区二区av| 亚洲精品在线二区| 欧美日韩一区二区三区在线看| 日韩视频―中文字幕| 亚洲国产欧美一区二区三区同亚洲 | 久久久久久一区二区| 国产一区二区三区av电影| 久久久av水蜜桃| 久久精品国产亚洲a| 狠狠色狠狠色综合日日五| 久久视频在线视频| 麻豆精品精华液| 亚洲区第一页| 亚洲乱码视频| 国产精品一区在线播放| 久久国产一区| 免费观看国产成人| 99成人在线| 亚洲一区二区三区色| 国产欧美一区二区三区久久| 久久久精品国产一区二区三区| 久久成人在线| 亚洲国产精品一区二区第一页| 欧美激情精品久久久久久大尺度| 欧美91福利在线观看| 亚洲香蕉在线观看| 欧美在线观看网址综合| 亚洲人午夜精品| 亚洲一区二区精品在线| 久久久一二三| 亚洲精品女av网站| 亚洲综合精品自拍| 亚洲高清在线观看| a91a精品视频在线观看| 国产视频久久网| 亚洲狠狠婷婷| 国产日韩av在线播放| 亚洲高清在线播放| 国产精品久久久久一区二区三区共| 欧美中文字幕在线观看| 欧美成人精品在线观看| 欧美一区成人| 欧美成人黄色小视频| 欧美一级淫片aaaaaaa视频| 麻豆精品视频在线| 欧美一区二区观看视频| 欧美激情免费观看| 久久一区二区三区av| 欧美色另类天堂2015| 女主播福利一区| 国产精品免费网站| 91久久精品国产91久久性色tv | 亚洲欧美中文另类| 亚洲欧洲日本国产| 欧美一区激情| 亚洲欧美日韩国产另类专区| 老司机免费视频一区二区| 欧美一级电影久久| 欧美日本一区二区三区| 免费成人激情视频| 国产欧美日韩免费| 一区二区三区精品国产| 亚洲激情av| 久久琪琪电影院| 久久久久.com| 国产精品免费看久久久香蕉| 亚洲精品美女在线| 亚洲精品乱码久久久久久日本蜜臀| 久久精品国产亚洲精品 | 国产一区二区久久久| 亚洲自拍三区| 先锋亚洲精品| 国产精品男女猛烈高潮激情| 亚洲激情婷婷| 亚洲免费不卡| 欧美乱人伦中文字幕在线| 亚洲国产导航| 亚洲精品美女久久久久| 欧美风情在线| 亚洲福利视频网| 亚洲麻豆视频| 欧美四级伦理在线| 亚洲一区二区三区精品在线观看| 这里只有精品在线播放| 欧美色图五月天| 亚洲影视在线| 久久久久久久成人| 在线观看亚洲视频啊啊啊啊| 久久综合一区| 最新高清无码专区| 亚洲天堂成人在线观看| 欧美性猛交一区二区三区精品| 一本大道久久a久久精二百| 欧美午夜激情视频| 夜色激情一区二区| 午夜精品一区二区三区在线播放 | 亚洲天堂偷拍| 国产精品久久国产三级国电话系列| 一区二区三区精密机械公司| 亚洲欧美日韩爽爽影院| 国产日韩欧美亚洲| 麻豆精品视频在线| 亚洲日本成人女熟在线观看| 亚洲婷婷在线| 国产亚洲精品成人av久久ww| 久久午夜色播影院免费高清| 亚洲国产一区在线| 先锋亚洲精品| 曰韩精品一区二区| 欧美成人伊人久久综合网| 99国产精品视频免费观看| 欧美一区二区三区在线看| 在线国产亚洲欧美| 欧美视频中文在线看| 久久不射电影网| 亚洲精品中文字幕在线| 欧美在线免费观看亚洲| 91久久精品一区| 国产精品最新自拍| 欧美国产综合视频| 午夜亚洲福利在线老司机| 亚洲国产精品va在线看黑人动漫| 亚洲一区二区三区在线视频| 韩日欧美一区| 欧美日韩在线免费视频| 欧美在线视频在线播放完整版免费观看 | 国产婷婷成人久久av免费高清| 久久久久久久一区二区三区| 亚洲人成毛片在线播放女女| 久久精彩免费视频| 亚洲一区亚洲二区| 亚洲精品日韩综合观看成人91| 国产欧美日韩专区发布| 毛片一区二区三区| 久久久九九九九| 午夜精品福利在线观看| 99香蕉国产精品偷在线观看| 亚洲夫妻自拍|