postgresql 之bison學(xué)習(xí)

按一定語(yǔ)法寫(xiě)好規(guī)則,bison則可以自動(dòng)識(shí)別語(yǔ)法屈溉,網(wǎng)上關(guān)于Yacc的資料很多,但是幾個(gè)關(guān)鍵點(diǎn)講的不夠清晰抬探,這里按自己的理解寫(xiě)下來(lái)子巾,加深記憶。

定義段寫(xiě)法:

定義段可以分為兩部分:
第一部分以符號(hào)%{和%}包裹,里面為以C語(yǔ)法寫(xiě)的一些定義和聲明:例如线梗,文件包含椰于,宏定義,全局變量定義仪搔,函數(shù)聲明等瘾婿。
第二部分主要是對(duì)文法的終結(jié)符和非終結(jié)符做一些相關(guān)聲明。這些聲明主要有如下一些:%token僻造,%left憋他,%right,%nonassoc髓削,%union,%type镀娶,%start立膛。下面分別說(shuō)明它們的用法。
%token定義文法中使用了哪些終結(jié)符梯码,定義形式為:
%token TOKEN1 TOKEN2 TOKEN3 …

%left宝泵,%right,%nonassoc也是定義文法中使用的終結(jié)符轩娶,定義形式與%token類(lèi)似儿奶,但是他們定義的終結(jié)符具有某種優(yōu)先級(jí)和結(jié)合性,%left表示左結(jié)合鳄抒,%right表示右結(jié)合闯捎,%nonassoc表示不可結(jié)合(即它定義的終結(jié)符不能連續(xù)出現(xiàn):例如<,如果文法中不允許出現(xiàn)形如a<b<c的句子许溅,則<就是不可結(jié)合的)瓤鼻。而優(yōu)先級(jí)關(guān)系則是以他們定義出現(xiàn)的順序決定的,先定義的優(yōu)先級(jí)低贤重,最后定義的優(yōu)先級(jí)最高茬祷,同時(shí)定義的優(yōu)先級(jí)相同。例如并蝗,如果有如下定義:
%left A B %nonassoc C %right D
則表示優(yōu)先級(jí)關(guān)系為: A=B < C < D祭犯,而結(jié)合性關(guān)系為:A,B左結(jié)合,C不可結(jié)合滚停,D右結(jié)合沃粗。

%union和%type用來(lái)處理文法中各符號(hào)所帶的屬性。在詞法分析的學(xué)習(xí)中铐刘,我們知道記號(hào)是由記號(hào)名和記號(hào)的屬性值兩部分組成的陪每,文法中的終結(jié)符就是記號(hào),他們有屬性值,同樣檩禾,非終結(jié)符也是可以有屬性值的挂签。

%union { int num; char * id; }

定義了類(lèi)型,再將類(lèi)型和具體的標(biāo)示符進(jìn)行關(guān)聯(lián)盼产,如果是
終結(jié)符:
%token <num> TOKEN1 %token <id> TOKEN2 TOKEN3
非終結(jié)符:
%type <id> sym1 sym2 %type <num> sym3

第二部分規(guī)則段的寫(xiě)法

第二部分好理解饵婆,不作回顧。

第三部分輔助函數(shù)段的寫(xiě)法

輔助函數(shù)段用C語(yǔ)言語(yǔ)法來(lái)寫(xiě)戏售,輔助函數(shù)一般指在規(guī)則段中用到或者在語(yǔ)法分析器的其他部分用到的函數(shù)侨核。這一部分一般會(huì)被直接拷貝到y(tǒng)acc編譯器產(chǎn)生的c源文件中。 一般來(lái)說(shuō)灌灾,除規(guī)則段用到的函數(shù)外搓译,輔助函數(shù)段一般包括如下一些例程:yylex(),yyerror()锋喜,main()些己。
int yylex()是詞法分析程序,它返回記號(hào)嘿般。語(yǔ)法分析驅(qū)動(dòng)程序yyparse()將會(huì)調(diào)用yylex()獲取記號(hào)段标。如果不使用lex生成這個(gè)函數(shù),則必須在輔助函數(shù)段用C語(yǔ)言寫(xiě)這個(gè)程序炉奴。記號(hào)由記號(hào)名和屬性值構(gòu)成逼庞,記號(hào)名一般作為yylex的返回值(注意,記號(hào)名是由%token等定義的終結(jié)符名瞻赶,這些終結(jié)符名在yacc內(nèi)部會(huì)被宏定義成一些常數(shù)赛糟。),而屬性值則由yacc內(nèi)部定義的變量yylval來(lái)傳遞例如共耍,若屬性值棧定義為
%union { int num; char * id; }
而yylex返回記號(hào)的屬性值為”myid”(類(lèi)型為char *)時(shí)虑灰,yylex在返回之前,應(yīng)使用如下語(yǔ)句將屬性值傳遞給語(yǔ)法分析器:
yylval.id = “myid”;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痹兜,一起剝皮案震驚了整個(gè)濱河市穆咐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌字旭,老刑警劉巖对湃,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異遗淳,居然都是意外死亡拍柒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)屈暗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拆讯,“玉大人脂男,你說(shuō)我怎么就攤上這事≈帜牛” “怎么了宰翅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)爽室。 經(jīng)常有香客問(wèn)我汁讼,道長(zhǎng),這世上最難降的妖魔是什么阔墩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任嘿架,我火速辦了婚禮,結(jié)果婚禮上啸箫,老公的妹妹穿的比我還像新娘耸彪。我一直安慰自己,他們只是感情好忘苛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布搜囱。 她就那樣靜靜地躺著,像睡著了一般柑土。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绊汹,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天稽屏,我揣著相機(jī)與錄音,去河邊找鬼西乖。 笑死狐榔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的获雕。 我是一名探鬼主播薄腻,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼届案!你這毒婦竟也來(lái)了庵楷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤楣颠,失蹤者是張志新(化名)和其女友劉穎尽纽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體童漩,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弄贿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矫膨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片差凹。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡期奔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出危尿,到底是詐尸還是另有隱情呐萌,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布脚线,位于F島的核電站搁胆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏邮绿。R本人自食惡果不足惜渠旁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望船逮。 院中可真熱鬧顾腊,春花似錦、人聲如沸挖胃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酱鸭。三九已至吗垮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凹髓,已是汗流浹背烁登。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔚舀,地道東北人饵沧。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赌躺,于是被迫代替她去往敵國(guó)和親狼牺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理礼患,服務(wù)發(fā)現(xiàn)是钥,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 簡(jiǎn)介 如果你有Unix環(huán)境的編程經(jīng)驗(yàn)讶泰,想必你肯定遇到過(guò)神秘的Lex和YACC工具咏瑟,在GUN/Linux中,又分別稱...
    upupSue閱讀 4,509評(píng)論 0 8
  • 特別說(shuō)明痪署,為便于查閱码泞,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 467評(píng)論 0 0
  • 真的:true 非零數(shù)字 ,非空的字符串余寥,非空對(duì)象假的:false 數(shù)字零领铐,空字符串,空對(duì)象绪撵,undefined
    發(fā)光驢子閱讀 309評(píng)論 0 0
  • 即使每天都有大量有關(guān)多運(yùn)動(dòng)和健康飲食的宣傳,美國(guó)人依然是全世界最?lèi)?ài)暴飲暴食的一群绎狭。美國(guó)被連續(xù)評(píng)為全球最肥胖國(guó)家细溅,如...
    李虓酒評(píng)論閱讀 1,345評(píng)論 5 14