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

隨筆-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>
            亚洲精品视频免费观看| 99re6这里只有精品| 亚洲女同性videos| 国产精品美女一区二区在线观看| 午夜在线一区二区| 午夜精品久久久久久久久| 国产日韩专区| 欧美成人精品激情在线观看| 欧美激情在线狂野欧美精品| 亚洲一级在线观看| 欧美一级视频精品观看| 一区二区三区在线不卡| 国产精品一区二区a| 一区二区三区视频在线| 中文亚洲视频在线| 国产综合自拍| 亚洲国产欧美久久| 欧美日韩国产精品专区| 亚洲影院在线| 卡一卡二国产精品| 亚洲校园激情| 久久久国产精品一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美一级淫片播放口| 亚洲国产精品久久| 亚洲免费网址| 日韩一二三在线视频播| 午夜在线视频观看日韩17c| 在线日韩视频| 亚洲中午字幕| 日韩亚洲国产欧美| 欧美在线播放一区| 在线亚洲高清视频| 久热国产精品| 久久精品国产综合| 欧美日韩视频| 欧美第十八页| 国产综合色在线视频区| 一区二区三区av| 91久久在线播放| 久久av资源网| 国产精品久久久久天堂| 欧美电影免费观看网站| 国产精品资源在线观看| 一本色道久久综合亚洲精品不| 亚洲高清在线观看一区| 亚洲专区一区| 亚洲一区二区视频在线观看| 久久综合一区| 欧美暴力喷水在线| 精品51国产黑色丝袜高跟鞋| 亚洲中午字幕| 欧美一级片一区| 国产精品电影在线观看| 99国产精品久久久| 一区二区三区 在线观看视| 美女被久久久| 亚洲福利在线视频| 亚洲电影天堂av| 免费视频一区| 亚洲电影av| 亚洲毛片视频| 欧美日韩和欧美的一区二区| 91久久久在线| 一区二区黄色| 国产精品久久久久7777婷婷| 亚洲午夜久久久久久尤物 | 久久精品国产亚洲a| 国产精品久线观看视频| 亚洲欧美日韩视频二区| 久久大综合网| 在线观看91精品国产麻豆| 久久免费高清| 亚洲国产成人久久| 99在线热播精品免费99热| 欧美日本高清视频| 亚洲色诱最新| 久久国产免费| 亚洲国产精品国自产拍av秋霞| 欧美激情国产高清| 在线亚洲免费视频| 久久久久久久999| 欧美高清成人| 久久国产精品网站| 久久深夜福利免费观看| 国产精品网站在线播放| 先锋影音网一区二区| 久久躁日日躁aaaaxxxx| 久久精品首页| 亚洲肉体裸体xxxx137| 一区二区三区视频在线看| 国产老肥熟一区二区三区| 欧美中文字幕在线视频| 欧美黑人在线观看| 先锋影音网一区二区| 狠狠色综合色区| 欧美日韩欧美一区二区| 午夜在线播放视频欧美| 亚洲第一色中文字幕| 亚洲欧美日韩综合| 亚洲国产va精品久久久不卡综合| 欧美日韩成人激情| 久久国产福利国产秒拍| 亚洲精品久久视频| 久久全球大尺度高清视频| 99精品视频免费观看| 国产亚洲视频在线| 欧美日韩国产色视频| 久久精品视频在线播放| 亚洲午夜激情网站| 亚洲精品一区二区在线观看| 久久夜色精品国产欧美乱| 亚洲中字在线| 99riav久久精品riav| 国产一区二区三区自拍| 欧美视频一区二| 欧美成人午夜激情| 久久久久久免费| 亚洲伊人久久综合| 一区二区电影免费观看| 亚洲国产精品美女| 开心色5月久久精品| 欧美一级日韩一级| 亚洲一区激情| 亚洲最新色图| 亚洲人成网站影音先锋播放| 韩国免费一区| 国产一二精品视频| 国产欧美一二三区| 国产精品一级二级三级| 欧美日韩一区二区精品| 欧美电影资源| 欧美成人免费全部观看天天性色| 久久久久综合网| 久久久国产精品一区| 久久国产毛片| 久久人人97超碰国产公开结果| 亚洲一区二区动漫| 亚洲小视频在线| 亚洲欧美激情诱惑| 亚洲欧美另类综合偷拍| 亚洲欧美电影院| 小辣椒精品导航| 欧美影视一区| 玖玖精品视频| 欧美精品色综合| 欧美日韩国产影片| 欧美日韩国产区一| 国产精品久久久久久av福利软件 | 久久久久在线观看| 久久天天躁狠狠躁夜夜av| 久久免费视频一区| 欧美激情成人在线| 亚洲人成人99网站| 一本久道久久久| 亚洲欧美区自拍先锋| 欧美在线视频二区| 巨乳诱惑日韩免费av| 欧美日本成人| 国产午夜精品福利| 在线欧美日韩国产| 亚洲久久一区| 欧美一区二区三区啪啪| 久久中文欧美| 亚洲精品美女在线观看| 亚洲资源在线观看| 亚洲国产精品久久久久| 亚洲精品日韩激情在线电影| 亚洲视频一区二区在线观看 | 国产精品影院在线观看| 国产一区二区视频在线观看 | 日韩午夜激情电影| 欧美一区二区精品在线| 免费一级欧美片在线播放| 91久久久一线二线三线品牌| 亚洲欧美电影在线观看| 欧美69wwwcom| 国产精品影音先锋| 亚洲每日在线| 久久精品亚洲乱码伦伦中文 | 久久亚洲精品一区| 夜夜嗨av一区二区三区四季av| 久久激情五月婷婷| 欧美午夜精品理论片a级大开眼界| 国产在线拍偷自揄拍精品| 日韩亚洲视频| 美女诱惑黄网站一区| 一本不卡影院| 女生裸体视频一区二区三区| 国产欧美婷婷中文| 中日韩午夜理伦电影免费| 美女黄色成人网| 亚洲天堂网在线观看| 欧美不卡视频一区| 韩日欧美一区二区| 久久www免费人成看片高清| 日韩图片一区| 欧美高清在线一区| …久久精品99久久香蕉国产| 欧美伊人久久大香线蕉综合69|