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

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

用Flex/Bison分析c代碼的經(jīng)歷

這些日子花了不少時間在一個c語言的語法分析程序上,這個程序要能識別變量、函數(shù)的定義、聲明和引用,簡而言之就是找出sourceinsight所能提供的信息(比si還要精確)。

分析代碼和編譯代碼一樣,都要做語法分析。但是因為分析代碼不做預處理,所以就會遇到一些麻煩,比如處理一些定義的稀奇古怪的宏,無法判斷一個identifier是變量還是類型。這么一來,嚴格的用C語言語法來分析代碼就沒法通過。

考慮到這個問題,一開始決定用lex作詞法分析,生寫語法分析。進行到中間,代碼復雜度越來越高,感覺力不從心。又決定通過修改標準的C語言語法規(guī)則,用bisonyaccGNU實現(xiàn))來完成語法分析

所謂“工欲善其事,必先利其器”,bison在做語法分析上,果然很方便。但是很快就遇到上面所說的問題:不做預處理,無法得到一個token的類型。標準的yacc支持的是LALR語法,LALR語法只預讀一個token,無法解決這個問題。

好在GNUYacc實現(xiàn)bison支持GLR語法GLR沒有只預讀一個token的限制,它用狀態(tài)分裂來解決無法判斷token類型的問題。采用GLR,寫語法規(guī)則就基本上沒有什么限制了。

但是GLR有個問題,它用狀態(tài)分裂解決問題,如果所有分裂的狀態(tài)只有一個能分析成功,那自然OK;如果不能,就叫產(chǎn)生了ambiguity(不確定),分析就失敗了。

解決ambiguity,可以用%dprec來指定規(guī)則的優(yōu)先級。當兩個狀態(tài)發(fā)生ambiguity時,根據(jù)它們對應的reduce規(guī)則的優(yōu)先級,選擇優(yōu)先級高的那個狀態(tài)。

但還有一類ambiguity的情況,用%dprec也沒發(fā)解決。那就是兩個產(chǎn)生ambiguity的狀態(tài)它們對應的reduce規(guī)則是同一條。這類問題很棘手,我只好采用重寫規(guī)則來避免。但這就導致規(guī)則的可讀性很差,而且往往是解決一個ambiguity又引入另外一個。

無奈,往bisonmail list里發(fā)了一封信求救,第二天收到一哥們回信,信中說:

“用merge啊。我也遇到過類似的問題。”

merge是啥呢?merge就正好是處理上面這類問題的,相當于把多個狀態(tài)合并。因為是比較新的特性,在bison的文檔里并沒有很明顯的提及。

這樣,用bison分析c代碼就基本沒有問題了;)

 

備注

Flex:詞法分析器

Bison:語法分析器

GNU bison是一個自由軟件,用于自動生成語法分析器程序,實際上可用于所有常見的操作系統(tǒng)。Bison把LALR形式的上下文無關文法描述轉(zhuǎn)換為可做語法分析的CC++程序。在新近版本中,Bison增加了對GLR語法分析算法的支持。

GNU bison基本兼容Yacc,并做了一些改進。它一般與flex一起使用。

posted on 2008-11-22 00:02 肥仔 閱讀(7864) 評論(1)  編輯 收藏 引用 所屬分類: LEX & YACC

評論

# re: 用Flex/Bison分析c代碼的經(jīng)歷[未登錄]  回復  更多評論   

果然想到一起了,最近也在做提取C變量、函數(shù)的定義之類的程序想用lex和yacc,也郁悶在預處理上了,不知項目能否開源參考一下?
2012-11-19 15:45 | 逗你玩
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99综合电影在线视频| 久久国产欧美| 亚洲狼人综合| 欧美日韩亚洲一区二区三区四区| 日韩亚洲精品在线| 91久久精品一区二区三区| 免费成人美女女| 一本到12不卡视频在线dvd| 亚洲精品美女久久久久| 欧美特黄一级大片| 久久国产精品亚洲77777| 欧美在线999| 亚洲国产成人porn| 亚洲另类一区二区| 国产欧美日韩在线视频| 免费成人高清| 欧美日韩在线视频一区二区| 午夜在线观看欧美| 久久久青草婷婷精品综合日韩| 亚洲国产精品第一区二区| 亚洲精品久久视频| 国产午夜亚洲精品羞羞网站| 欧美激情无毛| 国产欧美精品一区二区色综合 | 亚洲欧美国产高清| 久久xxxx| 亚洲一区二区三区免费在线观看 | 亚洲精品孕妇| 激情av一区| 亚洲视频每日更新| 亚洲黄色在线| 欧美一区二区在线免费观看| 99国产精品久久久久久久成人热 | 亚洲欧美区自拍先锋| 国语自产精品视频在线看一大j8| 亚洲高清在线| 国产亚洲人成a一在线v站| 亚洲人成在线播放| 国内精品模特av私拍在线观看| 亚洲精品久久嫩草网站秘色| 伊人天天综合| 亚洲欧美日韩国产综合精品二区| 亚洲伦理久久| 久久夜色精品| 另类av一区二区| 国产精品亚洲一区| 一本色道精品久久一区二区三区| 亚洲大胆女人| 久久精品在线| 午夜一区二区三区不卡视频| 欧美精品亚洲一区二区在线播放| 久久综合九色综合久99| 国产欧美日韩一区二区三区| 日韩香蕉视频| 中文久久精品| 欧美日韩国产不卡| 亚洲国产精品一区二区第一页| 国内精品模特av私拍在线观看| 亚洲综合不卡| 西瓜成人精品人成网站| 国产精品久久久久久影院8一贰佰| 91久久精品www人人做人人爽| 在线播放日韩| 狼人社综合社区| 美日韩精品视频免费看| 一区二区三区在线看| 久久蜜桃av一区精品变态类天堂| 久久亚洲综合色| 影音先锋亚洲一区| 久久综合九色欧美综合狠狠| 亚洲高清在线| 一本一本大道香蕉久在线精品| 欧美精品午夜视频| 一区二区欧美日韩| 亚洲综合欧美| 国产亚洲精品久久久久婷婷瑜伽| 亚洲欧美日韩电影| 久久视频一区二区| 亚洲精品影院在线观看| 欧美精品一区视频| 亚洲一区二区欧美| 久久影院午夜论| 亚洲精品社区| 欧美性片在线观看| 久久国产精品网站| 亚洲第一毛片| 亚洲自拍偷拍麻豆| 一区二区三区在线观看视频| 欧美成人精品h版在线观看| 91久久精品国产91久久性色| 亚洲欧美卡通另类91av| 激情自拍一区| 欧美日本网站| 欧美在线一区二区三区| 亚洲电影专区| 久久精品国产亚洲一区二区三区| 在线国产日韩| 欧美亚州一区二区三区| 久久久精品动漫| 亚洲裸体在线观看| 久久久久一本一区二区青青蜜月| 理论片一区二区在线| 亚洲国产精品成人综合色在线婷婷| 欧美福利精品| 亚洲欧美在线观看| 亚洲三级视频| 久久人人爽人人爽| 亚洲男人的天堂在线| 精品福利av| 国产精品香蕉在线观看| 欧美国产日产韩国视频| 亚洲欧洲av一区二区三区久久| 欧美韩国日本综合| 欧美在线看片| 亚洲男女自偷自拍图片另类| 亚洲区在线播放| 韩日欧美一区二区| 国产精品日韩在线一区| 欧美久久在线| 欧美99久久| 久久精品免费播放| 亚洲欧美日韩国产另类专区| 亚洲精品视频免费在线观看| 另类成人小视频在线| 性久久久久久久久久久久| 99精品视频免费在线观看| 在线观看视频免费一区二区三区| 国产精品欧美日韩一区| 欧美日韩在线高清| 欧美高清在线播放| 老司机午夜精品| 久久久精品日韩| 香蕉免费一区二区三区在线观看| 亚洲深夜激情| 一区二区三区视频在线观看 | 久久精品国产亚洲精品| 亚洲免费在线看| 亚洲小说欧美另类社区| 一区二区国产日产| 一区二区三区**美女毛片| 日韩视频永久免费观看| 亚洲人屁股眼子交8| 亚洲大胆av| 亚洲日本视频| 亚洲麻豆一区| 99re亚洲国产精品| 一本色道久久88综合日韩精品 | 亚洲国产视频a| 亚洲精品国产精品国自产观看浪潮 | 国产日韩一区二区| 国产日韩在线一区| 一区免费观看视频| 亚洲第一黄网| 亚洲精品中文字| 夜夜嗨av一区二区三区四区| 国产精品99久久久久久宅男 | 在线看片日韩| 亚洲精品日本| 一区二区三区国产精品| 亚洲免费视频在线观看| 欧美在线啊v| 麻豆精品一区二区综合av| 亚洲第一色在线| 99在线观看免费视频精品观看| 99精品国产在热久久下载| 亚洲视频免费在线| 久久成人羞羞网站| 女生裸体视频一区二区三区| 欧美日韩久久久久久| 日韩天天综合| 欧美激情日韩| 日韩视频第一页| 亚洲欧美综合网| 免费观看日韩av| 欧美亚男人的天堂| 狠狠综合久久| 正在播放欧美一区| 久久久久国产一区二区| 亚洲国产欧美日韩精品| 一本色道久久综合亚洲二区三区| 午夜精品美女自拍福到在线| 久久综合一区| 国产精品乱人伦一区二区| 尤物九九久久国产精品的分类| 日韩视频二区| 久久精品欧洲| 亚洲精品一区二区三区蜜桃久| 午夜精品美女久久久久av福利| 美女久久网站| 国产欧美一区二区三区另类精品| 亚洲九九爱视频| 久久激情视频久久| 中文欧美在线视频| 每日更新成人在线视频| 国产私拍一区| 亚洲性感激情| 亚洲人成网在线播放| 久久大香伊蕉在人线观看热2| 欧美日韩精品一区二区三区| 亚洲大片av|