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

隨筆-341  評論-2670  文章-0  trackbacks-0
    語法分析器終于完成了,總共花了7個小時的時間。其中遇到了一些小問題,譬如lambda expression的\param->expression和let-in expression的let declaration-list in expression里面的expression需要盡可能長的解決辦法。因為用了Vczh Syngram,所以不得不調整出符合需求的文法。

    為了大概看一看文法有沒有寫對,我寫了一個程序,讀入KernelFP語言寫的一份代碼,將其格式化并輸出。

    輸入代碼如下:
 1 type int
 2 type char
 3 type bool = true | false
 4 type list T = empty | list T (list T)
 5 
 6 func iadd::int->int->int alias "add"
 7 func isub::int->int->int alias "sub"
 8 func imul::int->int->int alias "mul"
 9 func idiv::int->int->int alias "div"
10 func imod::int->int->int alias "mod"
11 func ilg::int->int->bool alias "ilg"
12 func ism::int->int->bool alias "ism"
13 func iequ::int->int->bool alias "iequ"
14 func chr::int->char alias "chr"
15 func ord::char->int alias "ord"
16 
17 func not::bool->bool
18 def not a = select a of
19               case true : false
20               case false : true
21             end
22 
23 func and::bool->bool->bool
24 def and a b = select a of
25                 case true : b
26                 case false : false
27               end
28 
29 func or::bool->bool->bool
30 def or a b = select a of
31                 case true : true
32                 case false : b
33               end
34 
35 func xor::bool->bool->bool
36 def xor a b = select a of
37                 case true : not b
38                 case false : b
39               end
40 
41 func T if::bool->T->T
42 def if cond t f = select cond of
43                     case true : t
44                     case false : f
45                   end
46 
47 func ineg::int->int
48 def ineg num = isub 0 num
49 
50 func coffset::char->int->char
51 def coffset c i = chr (iadd (ord c) i)
52 
53 func itoa::int->list char
54 def itoa a = if (iequ a 0) (list '0' empty) (if (ism a 0)
55                (list '-' (itoa (ineg a)))
56                let
57                  func _itoa::int->(list char)->(list char)
58                  def _itoa a chs = select a of
59                                      case 0 : chs
60                                      else : _itoa (div a 10) (list (coffset '0' (mod a 10)) chs)
61                                    end
62                in _itoa a empty)
63 
64 func atoi::list char->int
65 def atoi chs = select chs of
66                  case empty : 0
67                  case list '-' chs : ineg (atoi chs)
68                  case c chs : iadd (imul 10 (isub (ord c) (ord '0'))) (atoi chs)
69                end

    輸出代碼如下:
 1 表達式1/1
 2   type int
 3 
 4   type char
 5 
 6   type bool = (true | false)
 7 
 8   type list T = (empty | (list T (list T)))
 9 
10   func iadd :: ((int -> int-> int) alias "add"
11 
12   func isub :: ((int -> int-> int) alias "sub"
13 
14   func imul :: ((int -> int-> int) alias "mul"
15 
16   func idiv :: ((int -> int-> int) alias "div"
17 
18   func imod :: ((int -> int-> int) alias "mod"
19 
20   func ilg :: ((int -> int-> bool) alias "ilg"
21 
22   func ism :: ((int -> int-> bool) alias "ism"
23 
24   func iequ :: ((int -> int-> bool) alias "iequ"
25 
26   func chr :: (int -> char) alias "chr"
27 
28   func ord :: (char -> int) alias "ord"
29 
30   func not :: (bool -> bool)
31   def not a = 
32     select a of
33       case true : false
34       case false : true
35     end
36 
37   func and :: ((bool -> bool-> bool)
38   def and a b = 
39     select a of
40       case true : b
41       case false : false
42     end
43 
44   func or :: ((bool -> bool-> bool)
45   def or a b = 
46     select a of
47       case true : true
48       case false : b
49     end
50 
51   func xor :: ((bool -> bool-> bool)
52   def xor a b = 
53     select a of
54       case true : (not b)
55       case false : b
56     end
57 
58   func T if :: ((bool -> T) -> T)
59   def if cond t f = 
60     select cond of
61       case true : t
62       case false : f
63     end
64 
65   func ineg :: (int -> int)
66   def ineg num = ((isub 0) num)
67 
68   func coffset :: ((char -> int-> char)
69   def coffset c i = (chr ((iadd (ord c)) i))
70 
71   func itoa :: (int -> (list char))
72   def itoa a = (((if ((iequ a) 0)) ((list '0') empty)) (((if ((ism a) 0)) ((list '-') (itoa (ineg a)))) 
73     (let
74       func _itoa :: ((int -> (list char)) -> (list char))
75       def _itoa a chs = 
76         select a of
77           case 0 : chs
78           else : ((_itoa ((div a) 10)) ((list ((coffset '0') ((mod a) 10))) chs))
79         end
80     in((_itoa a) empty))))
81 
82   func atoi :: ((list char-> int)
83   def atoi chs = 
84     select chs of
85       case empty : 0
86       case ((list '-') chs) : (ineg (atoi chs))
87       case (c chs) : ((iadd ((imul 10) ((isub (ord c)) (ord '0')))) (atoi chs))
88     end
89 

    今晚和明天要想出一個解決帶有模板參數的類型推導的解決辦法。因為實際上當你寫下
    func T1 T2 name::T1->T2
    def name a = ....
    的時候,T1和T2不一定能夠取到所有類型,而且T1和T2也不一定沒有關系。所以如果你不寫func頭的話,一個默認的,不影響語義的func頭是可以生成出來的,直接用模板就可以了。所以對于這門最小內核語言來說,這個語法糖是可以省略的。

    譬如說:
    func T1 T2 T3 makelist :: T1 -> T2 -> T3
    def makelist a b = list a (list b empty)
    在這個描述下,T1必須跟T2相同,而且T3必須是list T1這種類型。所以,你把函數頭改成了func T makelist::T->T->list T,也是絲毫沒有影響的。
posted on 2008-10-01 01:31 陳梓瀚(vczh) 閱讀(1580) 評論(0)  編輯 收藏 引用 所屬分類: 腳本技術
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久热精品视频在线免费观看| 欧美在线播放一区| 亚洲高清在线播放| 老鸭窝91久久精品色噜噜导演| 国产一区91| 另类av导航| 久热re这里精品视频在线6| 亚洲精品在线免费| 亚洲乱码国产乱码精品精| 欧美日韩亚洲在线| 欧美一区二区三区免费视频| 欧美亚洲一区三区| 亚洲国产成人精品女人久久久 | 精品88久久久久88久久久| 久久精品一区二区三区不卡| 亚洲成色999久久网站| 亚洲国产另类精品专区| 亚洲午夜av| 午夜精品久久久久久久99热浪潮| 国产一区二区视频在线观看| 久久综合伊人77777尤物| 男人的天堂成人在线| 一区二区三区国产| 欧美在线啊v| 亚洲美女视频网| 亚洲女人天堂av| 亚洲日本精品国产第一区| 一本色道久久综合亚洲精品不卡 | 国产一区二区三区黄视频| 欧美凹凸一区二区三区视频| 欧美日韩一区二区在线| 免费在线观看成人av| 欧美视频导航| 欧美成人亚洲成人日韩成人| 欧美性一二三区| 亚洲国产第一| 黑人巨大精品欧美黑白配亚洲| 亚洲片国产一区一级在线观看| 国产日韩欧美综合一区| 亚洲精品社区| 亚洲国产经典视频| 欧美一区二区在线观看| 亚洲综合精品| 欧美另类69精品久久久久9999| 久久夜色精品国产欧美乱极品| 欧美视频官网| 亚洲激情影院| 在线欧美福利| 久久99在线观看| 欧美日韩国产123区| 欧美电影免费网站| 牛夜精品久久久久久久99黑人| 亚洲午夜高清视频| 亚洲人成亚洲人成在线观看图片 | 一区二区三区精品久久久| 狠狠久久亚洲欧美专区| 亚洲综合色噜噜狠狠| av成人免费观看| 欧美韩日一区二区| 欧美国产精品| 亚洲电影免费观看高清| 久久全国免费视频| 麻豆精品一区二区av白丝在线| 国产女主播一区二区| 制服丝袜激情欧洲亚洲| 欧美一区二区三区久久精品| 欧美精品在线免费| 亚洲国产成人精品久久| 在线观看欧美一区| 久久久欧美精品| 欧美成人精品| 99国产精品久久久| 欧美日韩国产二区| 在线视频欧美日韩| 亚洲欧美中文在线视频| 国产精品视频免费一区| 亚洲尤物视频网| 久久精视频免费在线久久完整在线看| 国产精品视频yy9099| 午夜精品剧场| 免费在线播放第一区高清av| 亚洲三级毛片| 国产精品jvid在线观看蜜臀| 亚洲——在线| 美日韩免费视频| aaa亚洲精品一二三区| 国产精品久久久久久亚洲调教| 亚洲午夜精品久久| 久久免费视频在线| 亚洲欧洲一区二区天堂久久 | 欧美成年人视频网站| 亚洲国产成人久久综合一区| 亚洲午夜激情网页| 国产老女人精品毛片久久| 久久久久久亚洲精品中文字幕| 欧美激情网友自拍| 中国av一区| 一区免费观看| 欧美日韩专区| 久久伊伊香蕉| 亚洲一区二区三区在线观看视频| 久久人人97超碰人人澡爱香蕉| 亚洲日韩视频| 国产一区二区精品在线观看| 欧美成人精品激情在线观看 | 亚洲人体大胆视频| 欧美一区二视频在线免费观看| 伊人久久久大香线蕉综合直播 | 乱码第一页成人| 亚洲一区二区在线免费观看视频| 久久免费偷拍视频| 亚洲一区图片| 最新成人av网站| 国产精品美女久久久免费| 美女国产一区| 欧美一区二区成人| 一区二区高清视频在线观看| 免费成人av在线| 欧美在线视频日韩| 在线免费一区三区| 一区精品在线| 久久激情视频久久| 一区二区久久久久久| 男女精品视频| 久久网站免费| 欧美一区二区国产| 亚洲手机在线| 亚洲精品美女在线| 在线看日韩欧美| 国产色综合网| 国产精品夜夜夜| 欧美视频在线视频| 欧美日韩国产三区| 欧美精品一区二区三区在线播放 | 久久男人av资源网站| 午夜亚洲一区| 亚洲一区中文| 亚洲一区在线免费| 亚洲免费在线视频一区 二区| 亚洲精选在线观看| 亚洲美女福利视频网站| 亚洲精品一二三区| 亚洲在线观看免费视频| 亚洲国产成人av在线| 午夜精品久久久久久久久久久久| 亚洲大片在线观看| 红桃视频一区| 国内成+人亚洲| 国内精品久久久久影院薰衣草 | 久久免费偷拍视频| 久久精品在线播放| 久久狠狠亚洲综合| 久久精品91久久香蕉加勒比| 欧美伊人精品成人久久综合97| 亚洲专区欧美专区| 亚洲一线二线三线久久久| 亚洲一区免费网站| 欧美亚洲日本一区| 久久理论片午夜琪琪电影网| 久久久五月婷婷| 欧美高清自拍一区| 欧美日韩久久久久久| 国产精品高潮视频| 国产日韩欧美亚洲一区| 国产视频一区二区三区在线观看| 9国产精品视频| 久久婷婷蜜乳一本欲蜜臀| 久久久久久久久久久成人| 免费影视亚洲| 日韩视频永久免费观看| 亚洲综合首页| 久久婷婷蜜乳一本欲蜜臀| 欧美电影在线观看完整版| 欧美视频成人| 在线播放豆国产99亚洲| aa国产精品| 欧美一区二区视频免费观看| 蜜臀av在线播放一区二区三区| 亚洲欧洲在线看| 亚洲女人av| 欧美激情久久久| 国产农村妇女毛片精品久久莱园子| 国产一区二区你懂的| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲国产激情| 亚洲在线免费观看| 另类综合日韩欧美亚洲| 亚洲日本aⅴ片在线观看香蕉| 亚洲国产精品久久久久秋霞蜜臀| 韩国欧美国产1区| 国产精品视频网址| 91久久黄色| 午夜亚洲福利在线老司机| 欧美国产综合| 欧美一区二区三区免费在线看| 欧美日韩三级| 亚洲激情成人| 久久婷婷影院| 羞羞漫画18久久大片| 欧美三级第一页|