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

Lex和Yacc從入門到精通(3) - 一個極其簡單的lex和yacc程序

原文地址

摘要

在本章中,將會首先給出一個最基本的lex和yacc聯合使用的框架,這個基本框架最主要的特點就是能夠正確的被編譯。在我學習lex和yacc的過程中經歷了無數次的痛苦折磨,我發現一個一開始足夠簡單而且能夠被正確編譯的例子往往能夠使 學習者增加學習的興趣和信心。因此我的所有的文章都盡可能的采用這種方式進行描述。我寫這些文檔的最大的愿望就是希望能夠減少新手學習的痛苦。希望自 己能夠做到這一點!

例 3.1. frame.l

 

%{
int yywrap( void );
%}
%%
%%
int yywrap( void )
{
return 1;
}

lex文件和yacc文件都是被%%分成了上中下三個部分,在這個程序中的yywrap函數 需要說明一下:

yywrap
lex源文件中的yywrap函數是必須的!具體的原因就是因為給了這個函數實 現之后就可以不需要依賴flex庫了。具體yywrap的作用會在后面的章節應 用的時候進行解釋。通常的做法就是直接返回1,表示輸入已經結束了。

例 3.2. frame.y

 

%{
void yyerror( const char *s);
%}
%%
program:
;
%%
void yyerror( const char *s)
{
}
int main()
{
yyparse();
return 0;
}

如前所述,yacc文件被%%分成了上中下三個部分,在這個程序中有幾個需要說明 的地方:

program
這是語法規則里面的第一個非終結符,注意上面的格式哦:“program”后面緊跟著一個冒號“:”,然后換行之后有一個分號“;”,這表明這個 program是由空串組成的。至于什么是非終結符以及什么是終結符,還有什么是語法規則都會在后面的章節中進行詳細介 紹。
yyerror
從字面上就可以看出是一個處理錯誤的函數,在這里為空的原因是為了保 證代碼盡可能的簡潔! 實際上這個函數里面的代碼通常只有一句輸出語句 ,當然如果你喜歡還可以加入糾錯代碼,使你的解析器具備糾錯能力:)
yyparse
其實這個函數是yacc生成的,所以你在代碼里面可以直接使用。這個時候你可能會問:“yacc生成了yyparse函數,那么lex是不是也生成了什么函數呢?”,是的,lex生成的函數為yylex函數。實際上yyparse還間接調用 了yylex函數,可以在生成的C源文件中去核實。
main
每一個C/C++程序都必須的裝備啊,少了怎么能行呢:)所以這個main函數你 可以放到任何的地方,當然要保證能夠調用yyparse就可以了。但是通常的 做法就是將main函數放到yacc文件中。

從上面的yacc文件中還可以看出被%%分割成為的三個部分,第一部分中要寫入 C/C++代碼必須用%{和%}括起來;但是第三個部分就可以直接寫入C/C++代碼了,不需要任何的修飾;中間的那一部分就是yacc語法規則了。為了能夠讓這個最最簡單的yacc源程序能夠通過bison的編譯必須要提供一個語法規則,這里給出了一個最簡單的規則:一個program就是由空字符串構成的。實際上等于什么也沒有做。呵呵,對啊,本章的目的就是為了能夠編譯通過lex和yacc源程序,并且也能夠被C/C++編譯器編譯通過啊。現在是不是已經真的編譯通過了呢 ,可以按照下面的編譯步驟一步一步的來編譯核實。

提示

對yacc的描述同樣也適用于lex。

lex就是詞法掃描器,yacc就是語法分析器,這是通用的說法;具體的實現有所 不同GNU的lex就是flex,GNU的yacc就是bison。為了統一,所以在后面的文章 中就只會用lex來表達詞法掃描器,用yacc來表達語法分析器啦!

下面是編譯全過程記錄,采用了我在第一章中所制作的lex和yacc轉換環境:

 

D:\work\lex_yacc\chapter03>dir
驅動器 D 中的卷是 工作區
卷的序列號是 54D0-5FC0

D:\work\lex_yacc\chapter03 的目錄

2006-09-25 20:27 <DIR> .
2006-09-25 20:27 <DIR> ..
2006-09-25 20:07 71 frame.l
2006-09-25 20:20 144 frame.y
2 個文件 215 字節
2 個目錄 7,785,578,496 可用字節

D:\work\lex_yacc\chapter03>flex frame.l

D:\work\lex_yacc\chapter03>dir
驅動器 D 中的卷是 工作區
卷的序列號是 54D0-5FC0

D:\work\lex_yacc\chapter03 的目錄

2006-09-25 20:28 <DIR> .
2006-09-25 20:28 <DIR> ..
2006-09-25 20:07 71 frame.l
2006-09-25 20:20 144 frame.y
2006-09-25 20:28 36,997 lex.yy.c
3 個文件 37,212 字節
2 個目錄 7,785,537,536 可用字節

D:\work\lex_yacc\chapter03>bison -d frame.y

D:\work\lex_yacc\chapter03>dir
驅動器 D 中的卷是 工作區
卷的序列號是 54D0-5FC0

D:\work\lex_yacc\chapter03 的目錄

2006-09-25 20:28 <DIR> .
2006-09-25 20:28 <DIR> ..
2006-09-25 20:07 71 frame.l
2006-09-25 20:28 19,416 frame.tab.c
2006-09-25 20:28 74 frame.tab.h
2006-09-25 20:20 144 frame.y
2006-09-25 20:28 36,997 lex.yy.c
5 個文件 56,702 字節
2 個目錄 7,785,517,056 可用字節

D:\work\lex_yacc\chapter03>

過程 3.1. 總的來說就是如下的幾個步驟:

  1. 將前面的例子frame.lframe.y保存成為相應的文件
  2. flex frame.l
  3. bison frame.y
  4. gcc frame.tab.c lex.yy.c

提示

實際上經過flex和bison的轉換之后的C/C++源程序是可以直接在VC里面使用的!

上面的frame.tab.c是由bison編譯frame.y產生的,而lex.yy.c則是由flex編譯 frame.l產生的。

好了,一個最簡單的lex和yacc程序已經完備了,因此這一章的目的也就已經達到了。在下一章里面將會對這里的框架例子進行擴充以適應自己特殊的需要,逐步逐步的實現一個分析C/C++源代碼的工具程序,但是每一章的結尾都會盡可能的給出一個可以編譯通過的lex和yacc源程序。本來也想給出一個計算器的源程序作為例子的,但是這樣的資料已經很多了。這些資料往往不能夠讓自己說清楚問題,在自己的開發中還是會遇到千奇百怪的問題,因此為了讓自己能夠有機會解決一個新手在開發新程序中可能出現的問題,我也就找了一個我沒有開發過的程序來讓自己一步一步的解決這些問題 。我想這種方式也許是比較好的學習方式吧:)


posted on 2008-02-03 17:59 FongLuo 閱讀(359) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

常用鏈接

留言簿

隨筆分類(11)

隨筆檔案(79)

文章檔案(1)

收藏夾(38)

學習網站

一般網站

最新隨筆

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区成人| 欧美成人蜜桃| 国产人成精品一区二区三| 一本色道久久综合精品竹菊 | 亚洲精品在线电影| 欧美欧美在线| 亚洲淫片在线视频| 嫩草伊人久久精品少妇av杨幂| 亚洲第一网站免费视频| 欧美区在线观看| 亚洲综合首页| 欧美激情在线观看| 亚洲综合首页| **性色生活片久久毛片| 欧美日韩国产综合视频在线观看中文| 亚洲一区二区在线| 欧美成人一区二免费视频软件| 一区二区欧美精品| 国内精品美女av在线播放| 欧美国产日本| 午夜免费日韩视频| 亚洲欧洲精品一区二区| 亚洲在线免费观看| 亚洲国产日韩综合一区| 国产精品进线69影院| 狂野欧美一区| 亚洲字幕一区二区| 亚洲人精品午夜在线观看| 午夜精品久久久久久久男人的天堂| 一区精品久久| 国产精品久久久久久久一区探花| 久久久久久网址| 亚洲影音一区| 欧美韩国日本综合| 久久久www成人免费无遮挡大片| 亚洲三级视频| 国产亚洲人成a一在线v站 | 亚洲欧美日韩直播| 男男成人高潮片免费网站| 亚洲一级黄色| 亚洲国产日韩精品| 国产一区再线| 欧美精品在线观看91| 久久国产视频网站| 亚洲伊人一本大道中文字幕| 欧美国产精品人人做人人爱| 久久成人在线| 亚洲影院免费观看| 亚洲国产精品一区二区www在线 | 亚洲精品久久久久中文字幕欢迎你| 久久久久久久精| 亚洲视频香蕉人妖| 亚洲欧洲精品一区二区三区波多野1战4| 国产精品日韩欧美大师| 欧美日韩美女在线观看| 久久人人精品| 久久久国产精品亚洲一区 | 中文有码久久| 日韩午夜黄色| 亚洲精品一区在线观看| 免费不卡中文字幕视频| 久久精品国产99国产精品澳门| 一区二区国产精品| 亚洲精品在线视频| 亚洲免费成人| 99re亚洲国产精品| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲欧美视频| 亚洲欧美日韩一区在线观看| 日韩视频中文| 一区二区三区四区五区精品视频| 亚洲欧洲在线一区| 欧美激情在线狂野欧美精品| 欧美成人激情视频免费观看| 免费91麻豆精品国产自产在线观看| 久久字幕精品一区| 久久综合伊人| 欧美成人影音| 亚洲乱码国产乱码精品精98午夜| 亚洲精选国产| 亚洲婷婷在线| 欧美专区亚洲专区| 久久久美女艺术照精彩视频福利播放| 久久亚洲欧美国产精品乐播| 嫩模写真一区二区三区三州| 欧美国产日本韩| 欧美日韩免费看| 国产精品热久久久久夜色精品三区 | 宅男噜噜噜66一区二区66| 亚洲视频在线观看视频| 午夜精品久久久久久久久久久久久| 校园激情久久| 男人的天堂亚洲| 欧美日韩一区二区视频在线观看 | 欧美一区二区三区四区夜夜大片 | 国产日韩亚洲欧美| 在线观看福利一区| 99在线精品观看| 欧美中文字幕在线观看| 免费视频一区| 亚洲三级国产| 午夜精品网站| 欧美成人有码| 国产欧美欧洲在线观看| 亚洲国产mv| 欧美亚洲在线观看| 欧美成人a视频| 亚洲视频碰碰| 久热国产精品| 国产精品试看| 亚洲日本乱码在线观看| 性欧美精品高清| 亚洲福利在线观看| 亚洲一区在线播放| 欧美成人免费观看| 国产日韩欧美一区二区三区在线观看 | 久久久无码精品亚洲日韩按摩| 欧美激情一区在线观看| 一本色道久久88综合日韩精品 | 国产欧美精品一区| 日韩视频免费大全中文字幕| 欧美一区二区三区四区在线观看| 欧美国产国产综合| 午夜精品久久久久久久久久久| 男人的天堂亚洲在线| 国产美女一区二区| 一本久久a久久免费精品不卡 | 亚洲第一精品福利| 午夜精品视频| 欧美视频中文字幕在线| 亚洲成人在线| 久久国产精品久久久久久电车| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美一区二区三区日韩| 欧美午夜精品久久久久久久| 亚洲国产精品精华液网站| 久久九九国产精品怡红院| 一区二区电影免费观看| 欧美国产精品va在线观看| 激情伊人五月天久久综合| 午夜视频在线观看一区二区三区| 亚洲日本电影在线| 免费人成网站在线观看欧美高清| 国产字幕视频一区二区| 香蕉成人伊视频在线观看| 日韩午夜三级在线| 欧美大胆成人| 最新高清无码专区| 免播放器亚洲| 久久青草欧美一区二区三区| 国产一区二区三区成人欧美日韩在线观看 | 亚洲午夜精品| 国产精品av久久久久久麻豆网| 一本色道久久综合亚洲精品高清| 欧美激情精品久久久久久黑人| 久久人人九九| 在线欧美日韩精品| 免费影视亚洲| 久久在线免费观看视频| 雨宫琴音一区二区在线| 美女亚洲精品| 久久影院午夜片一区| 在线成人av| 欧美国产成人在线| 美日韩丰满少妇在线观看| 亚洲高清视频在线观看| 欧美成人69av| 欧美电影在线观看| 99riav1国产精品视频| 亚洲精一区二区三区| 欧美日韩视频第一区| 亚洲午夜电影| 亚洲欧美日韩精品久久久久| 国产偷自视频区视频一区二区| 久久九九99| 玖玖在线精品| 日韩视频一区二区三区在线播放| 亚洲精品护士| 国产精品超碰97尤物18| 欧美一区二区三区免费视频| 久久av资源网| 亚洲精品黄网在线观看| 一区二区三区精品视频| 国产女主播一区二区三区| 久久人人九九| 欧美激情精品久久久久久黑人| 在线亚洲电影| 欧美亚洲免费高清在线观看| 在线欧美日韩精品| 亚洲免费播放| 黑人一区二区三区四区五区| 欧美激情一区二区三区不卡| 欧美色精品天天在线观看视频| 亚洲专区一区二区三区| 久久国产色av| 这里只有精品电影| 午夜伦欧美伦电影理论片| 亚洲激情校园春色| 亚洲在线1234| 亚洲全部视频|