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

隨筆-341  評論-2670  文章-0  trackbacks-0
    可擴展編譯器架構的構想是最近幾天在洗澡的時候才最終完成的。我在思考如何開發一個可以同時給C、Pascal、Basic、Fortran和未知的類似語言使用的前端+后端。這只是VL++3.0的其中一個小部分,我把語言歸為幾類,C一類,C#一類,Javascript一類,還有其他的等等。這些類型會分別提供不同的前端支持。在設計第一類的編譯器期間遇到了點困難。

    第一個困難是語法樹很難統一。其實這并不是說那些語言完全不同,而是在于我想讓這N種語言的區別只有從字符串到語法樹的部分,從語法樹開始都執行相同的代碼來編譯。這就遇到了點麻煩。在語法分析的過程中,對于Pascal我不知道Name(Param)究竟是函數調用還是強制類型轉換,對于Basic來說我不知道Name(Param)是函數調用還是數組下標。還有Pascal和Basic的and等操作符可以同時作用于整數和布爾型(C使用了&&和&,而且它們在實現上有巨大差別)。Pascal自己還擴展了一些類型譬如說set,Pascal和Basic還有字符串。所以在語法分析的時候很難構直接造出FunctionInvokeExpression、SubscribeExpression和TypeCastExpression。

    第二個困難是擴展的類型。上面提到了Pascal有自己的set,我如何讓我的編譯器從前端開始就可以應付一門類似的未知語言他自己的新東西。譬如說未知的set類型,他也有自己的操作符(連已經存在的操作符operator+也可以用的),代碼生成的時候還有自己的方法。這不僅要求語法樹是可擴展的,接下來的一切包括符號表、語義分析、代碼生成等所有部分都需要可擴展的。

    第三個困難是C自己造成的,他有一個十分討厭的地方。當我得到ABC*DEF;的時候,語義分析沒開始,我不可能知道這是乘法還是定義一個變量。

    思考了許久,得出一個大概的方案:我先定義一門比較嚴格的語言,然后讓C、Pascal、Basic和Fortran來定義自己與該語言的不同之處,從而盡可能復用編譯器其余相同的部分。想到這里我得到一個比較奇怪的做法:

    第一個做法是在語義分析的時候修改語法樹。對于C語言的ABC*DEF;,這是一個statement。我給出一個接口,這個接口在語義分析的過程中被調用。語義分析產生了大量的信息全部傳遞過去,然后再第一次接觸到一個statement的時候,調用其中的ReplaceStatement函數。這個時候接口的ReplaceStatement可以通過語義分析的結果看看需不需要修改這個節點。如果上下文是int a,b;,那么a*b;就會被替換為乘法表達式。如果上下文是typedef int a;,那么a*b;保持不變(因為我默認是優先看成變量聲明)。ReplaceStatement對于同一個statement只會調用一次。至于Pascal的集合操作也可以通過這個來完成。對于a+b,可以在ReplaceExpression里面查看a和b是不是集合類型,如果是的話替換成自己的PascalSetBinaryExpression。這個小技巧解決了語法分析的時候遇到的歧義問題。這也是沒有辦法的辦法,因為這一次設計出來的結構的目的是為了讓新的語言可以用很小的代價來實現。

    第二個做法是語法樹的所有部分譬如Type、Expression、Statement和Declaration都存在一個ExtendedType、ExtendedExpression、ExtendedStatement和ExtendedDeclaration,語言可以通過繼承這四個“擴展類”來提供未知的東西,當然這個時候就要連帶提供所有操作了,譬如說根據語義分析的上下文來判斷他自己的ExtendedExpression的返回類型啦。

    至于符號表的可擴展性,我設計了一個可以應付絕大多數情況的通用符號表,因此隨時加入新的東西還是比較容易的。

    最新的代碼可以在http://vlpp.codeplex.com/這里獲得。
posted on 2010-01-31 00:13 陳梓瀚(vczh) 閱讀(2476) 評論(5)  編輯 收藏 引用 所屬分類: VL++3.0開發紀事

評論:
# re: Vczh Library++3.0之可擴展編譯器架構 2010-01-31 07:29 | heixia108
gcc 就可以擴展 :)   回復  更多評論
  
# re: Vczh Library++3.0之可擴展編譯器架構 2010-01-31 09:09 | 陳梓瀚(vczh)
@heixia108
擴展gcc的方法是重寫整個前端,顯然這不叫擴展,應該叫gcc提供了組件給你自己拼裝成新編譯器。  回復  更多評論
  
# re: Vczh Library++3.0之可擴展編譯器架構 2010-02-01 04:50 | SOS
我發現很多人都在洗澡時得到有用的信息。  回復  更多評論
  
# re: Vczh Library++3.0之可擴展編譯器架構 2010-02-01 21:22 | xxzh
@陳梓瀚(vczh)
Open Source 的LLVM,微軟的Phoenix,應該和你想做編譯器擴展差不多,或者更強大。  回復  更多評論
  
# re: Vczh Library++3.0之可擴展編譯器架構 2010-02-02 00:35 | 陳梓瀚(vczh)
@xxzh
目的還是不同的,我是想讓完全不同等級或范式的語言可以無縫協作。不過這個idea到底行不行還有待驗證……  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成人午夜77777| 亚洲乱码精品一二三四区日韩在线 | 亚洲人体一区| 欧美亚洲一级片| 欧美一区二区高清| 欧美国产综合一区二区| 亚洲经典在线| 亚洲欧洲综合另类在线| 亚洲毛片在线免费观看| 日韩视频一区二区| 亚洲小说区图片区| 欧美一区二区三区成人| 久久久青草青青国产亚洲免观| 久久激情综合网| 欧美激情中文字幕一区二区| 99成人免费视频| 亚洲你懂的在线视频| 久久精品国语| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 你懂的国产精品| 欧美视频一区在线观看| 韩国精品在线观看| 中日韩高清电影网| 久久精品中文字幕一区| 亚洲美女精品成人在线视频| 欧美一级大片在线免费观看| 欧美成人精品一区二区三区| 国产精品美女久久久久久免费| 国内精品久久久久伊人av| 一区二区激情视频| 美女999久久久精品视频| 一二美女精品欧洲| 久久综合福利| 国产性色一区二区| 亚洲一级免费视频| 亚洲第一福利视频| 欧美在线91| 国产精品av一区二区| 尤物yw午夜国产精品视频| 亚洲在线观看免费| 亚洲高清一二三区| 久久久精品国产99久久精品芒果| 欧美三级电影大全| 亚洲精品一区二区网址| 久久久7777| 亚洲欧美日韩专区| 欧美视频在线观看 亚洲欧| 亚洲精品乱码视频| 亚洲盗摄视频| 欧美成人精品高清在线播放| 在线日韩av片| 欧美www视频在线观看| 久久爱另类一区二区小说| 国产农村妇女毛片精品久久莱园子| 99国产一区二区三精品乱码| 牛夜精品久久久久久久99黑人| 欧美一激情一区二区三区| 国产精品一区二区黑丝| 亚洲欧美另类久久久精品2019| 久久精品国产久精国产爱| 最新日韩中文字幕| 久久人人97超碰国产公开结果| 欧美日韩精品三区| 亚洲国产精品va在线看黑人动漫| 久久久国产精品一区二区三区| 国产精品99久久久久久久女警 | 另类欧美日韩国产在线| 激情小说另类小说亚洲欧美| 久久久久久久久久码影片| 午夜精品免费| 国产一区日韩欧美| 久久综合网络一区二区| 久久都是精品| 亚洲国产精品成人一区二区 | 国产欧美视频一区二区三区| 欧美一区在线视频| 久久九九精品99国产精品| 国内精品一区二区三区| 欧美96在线丨欧| 欧美精品麻豆| 亚洲欧美中文日韩v在线观看| 亚洲一区二区三区午夜| 国产日韩精品一区观看| 欧美 日韩 国产在线| 欧美理论电影在线播放| 先锋影音一区二区三区| 久久国产精品久久久久久| 亚洲电影视频在线| 亚洲久久一区二区| 国产日韩欧美在线| 亚洲第一精品久久忘忧草社区| 欧美日韩岛国| 久久久久久久久久久一区| 免费在线看成人av| 亚洲欧美日韩国产成人| 久久精品夜色噜噜亚洲aⅴ| 91久久精品一区二区三区| 一区二区三区高清视频在线观看 | 国产一区二区三区久久| 猛男gaygay欧美视频| 欧美日韩三级电影在线| 久久综合久久88| 欧美午夜欧美| 欧美成人免费网站| 国产女精品视频网站免费| 亚洲国产精品悠悠久久琪琪| 国产精品嫩草影院av蜜臀| 欧美国产日韩视频| 国产午夜精品久久久久久免费视| 亚洲第一区中文99精品| 国产日韩精品入口| 日韩亚洲精品视频| 亚洲国产成人av好男人在线观看| 中文欧美字幕免费| 久久久久久久97| 亚洲精品一区二区在线| 欧美日韩免费观看一区二区三区| 亚洲女爱视频在线| 久久综合精品一区| 久久精品免费观看| 国产精品福利网| 亚洲精品美女在线观看播放| 黑人巨大精品欧美一区二区小视频 | 久久伊人免费视频| 欧美一区二区三区的| 欧美日韩精品系列| 亚洲国产精品成人精品| 1000精品久久久久久久久 | 欧美日韩一区二区视频在线| 欧美电影免费观看| 亚洲电影欧美电影有声小说| 欧美在线免费| 欧美综合二区| 国产亚洲精品久久久久久| 亚洲一区中文| 欧美一级大片在线观看| 国产精品亚洲成人| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美精品国产精品| 亚洲国产一区二区a毛片| 亚洲国产日韩欧美在线图片| 久热精品视频在线| 亚洲高清免费| 亚洲最新在线| 欧美午夜视频| 亚洲在线不卡| 久久激情五月婷婷| 红桃视频一区| 麻豆精品视频在线观看| 亚洲高清视频一区二区| 亚洲精品之草原avav久久| 欧美激情在线免费观看| 亚洲理伦电影| 久久国产婷婷国产香蕉| 在线日本成人| 国产精品黄页免费高清在线观看| 亚洲欧美清纯在线制服| 免费黄网站欧美| 一本综合久久| 国产精品夜夜嗨| 久久久蜜桃一区二区人| 亚洲国产精品成人精品 | 免费久久99精品国产自| 日韩一级在线| 国产精品日日摸夜夜摸av| 久久精品成人一区二区三区蜜臀| 欧美成人一区二区在线| 中文国产一区| 黄色影院成人| 欧美视频中文一区二区三区在线观看| 亚洲永久网站| 激情欧美一区二区| 亚洲香蕉网站| 欧美另类一区| 午夜免费日韩视频| 欧美成人蜜桃| 亚洲欧美日韩一区在线| 国精产品99永久一区一区| 欧美电影打屁股sp| 亚洲一区二区三区在线| 欧美激情亚洲国产| 久久精品av麻豆的观看方式| 亚洲精品一区在线观看香蕉| 国产精品男人爽免费视频1| 毛片精品免费在线观看| 亚洲综合色网站| 亚洲欧洲另类国产综合| 久久久久久午夜| 亚洲欧美自拍偷拍| 一区二区三区免费看| 1000部国产精品成人观看| 国产午夜精品在线| 国产精品亚洲综合色区韩国| 欧美日韩精选| 欧美精品在线观看一区二区| 蜜桃av噜噜一区二区三区| 久久久久久噜噜噜久久久精品| 亚洲一卡二卡三卡四卡五卡| 亚洲人成在线观看网站高清| 欧美成年人网站|