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

隨筆-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久久香蕉加勒比| 亚洲人成人一区二区三区| 亚洲一区精品视频| 亚洲第一在线综合在线| 性欧美xxxx视频在线观看| 欧美性色视频在线| 中日韩视频在线观看| 欧美第一黄色网| 久久亚洲风情| 亚洲欧洲日本在线| 免费观看30秒视频久久| 久久精品91久久久久久再现| 国产精品久久久久三级| 亚洲在线视频观看| 亚洲一区二区在线| 国产日韩精品一区二区| 亚洲欧美日韩精品| 亚洲专区欧美专区| 国产亚洲人成a一在线v站| 亚洲欧美综合国产精品一区| 亚洲视频久久| 国产欧美精品一区| 久久久久久网站| 久久久久久尹人网香蕉| 精品91在线| 欧美激情二区三区| 欧美成人四级电影| 亚洲永久在线| 久久国产视频网站| 亚洲精品免费一区二区三区| 欧美激情1区2区3区| 欧美激情视频一区二区三区在线播放| 一区二区成人精品 | 国产日韩欧美亚洲一区| 久久精品综合网| 久久亚洲欧洲| 一区二区三区免费在线观看| 亚洲性感美女99在线| 国产一区二区三区无遮挡| 欧美电影在线免费观看网站| 欧美日韩亚洲一区三区| 欧美在线观看www| 久久永久免费| 亚洲一区二区3| 欧美自拍偷拍午夜视频| 日韩一级大片| 欧美伊人久久| 亚洲午夜视频在线观看| 久久久亚洲人| 亚洲影院在线观看| 美女视频网站黄色亚洲| 亚洲影视九九影院在线观看| 久久精品观看| 亚洲一卡久久| 麻豆亚洲精品| 久久精品九九| 国产精品初高中精品久久| 久久亚洲私人国产精品va媚药 | 午夜免费在线观看精品视频| 久久久久久噜噜噜久久久精品| 国产精品99久久久久久人| 欧美中文字幕在线播放| 午夜精品美女自拍福到在线| 免费不卡在线观看| 久久视频在线免费观看| 国产精品国产三级国产普通话三级| 欧美福利精品| 国产亚洲欧洲997久久综合| 一区二区久久久久| 夜夜嗨av色综合久久久综合网| 久久婷婷蜜乳一本欲蜜臀| 亚洲一区久久| 欧美日韩精品欧美日韩精品| 欧美激情第六页| 在线观看欧美黄色| 欧美亚洲一区三区| 欧美一区成人| 国产精品久久久久久久久久久久久久 | 亚洲视频综合在线| 欧美大片第1页| 欧美大片在线观看一区二区| 国产亚洲二区| 亚洲欧美国产日韩天堂区| 亚洲系列中文字幕| 欧美激情第二页| 亚洲国内在线| 亚洲人久久久| 美女久久一区| 亚洲电影免费观看高清完整版在线观看| 国产亚洲精品一区二区| 性欧美在线看片a免费观看| 亚洲欧美日韩国产一区二区| 欧美日韩在线播放三区| 亚洲国产高清视频| 亚洲性xxxx| 亚洲视频中文| 国产精品久久久久天堂| 在线亚洲自拍| 午夜欧美不卡精品aaaaa| 国产精品久久久久aaaa| 中日韩男男gay无套| 亚洲一级黄色| 国产精品卡一卡二卡三| 亚洲欧美文学| 久久精品久久99精品久久| 狠狠久久五月精品中文字幕| 久久久久欧美| 亚洲福利专区| 亚洲一级免费视频| 国产日韩欧美在线观看| 久久精品最新地址| 欧美激情国产日韩精品一区18| 亚洲人成绝费网站色www| 欧美日韩美女一区二区| 午夜精品www| 每日更新成人在线视频| 亚洲三级网站| 国产精品久久网| 久久久国产午夜精品| 欧美激情a∨在线视频播放| 99国产精品久久久久久久久久 | 欧美大学生性色视频| 亚洲人成在线观看| 亚洲欧洲av一区二区三区久久| 国产日韩精品久久| 免费不卡亚洲欧美| 一区二区日韩| 久久资源av| 在线一区欧美| 尤物九九久久国产精品的特点| 欧美极品欧美精品欧美视频| 亚洲午夜在线视频| 欧美jizzhd精品欧美巨大免费| 一区二区三区不卡视频在线观看 | 久久婷婷国产麻豆91天堂| 亚洲日韩视频| 裸体女人亚洲精品一区| 亚洲午夜av在线| 在线观看欧美黄色| 国产精品欧美日韩一区| 鲁大师成人一区二区三区 | 在线观看视频一区二区| 欧美三区美女| 欧美88av| 久久久国产精品一区二区中文| 亚洲人成绝费网站色www| 久久久久国产精品一区三寸| 中文久久乱码一区二区| 亚洲国产高清在线观看视频| 国产精品久久久久影院色老大 | 久久国产一区二区| 一区二区三区四区五区在线| 欧美偷拍一区二区| 一本大道av伊人久久综合| 欧美在线亚洲一区| 亚洲视频在线视频| 日韩午夜免费视频| 亚洲黄色一区| 曰韩精品一区二区| 国精品一区二区三区| 国产美女扒开尿口久久久| 欧美三级网址| 欧美午夜不卡视频| 欧美精品在线极品| 欧美激情精品久久久久久黑人| 久久婷婷av| 美女露胸一区二区三区| 久久久精品午夜少妇| 久久国产福利国产秒拍| 欧美一级大片在线观看| 午夜视频在线观看一区| 亚洲欧美区自拍先锋| 在线综合欧美| 亚洲一二三区在线| 亚洲在线观看| 欧美一级大片在线免费观看| 午夜精品久久久久久久久久久久| 亚洲综合国产激情另类一区| 亚洲一区二区久久| 亚洲欧美日韩国产一区二区三区| 亚洲无毛电影| 午夜视频一区| 久久精品人人做人人爽电影蜜月| 久久精品盗摄| 欧美成人激情在线| 欧美日韩大片| 国产精品久久久久永久免费观看 | 亚洲欧美日韩区| 欧美亚洲免费在线| 久久精品国产免费观看| 久久精品一区二区国产| 久久亚洲综合色| 亚洲电影天堂av| 亚洲人成网站色ww在线| 这里只有精品电影| 午夜天堂精品久久久久| 久久久久久久综合日本| 欧美激情一区二区三区在线视频观看| 欧美三级日本三级少妇99|