YACC語(yǔ)法分析器生成工具
Yacc(Yet Another Compiler Compiler), 是Unix/Linux上一個(gè)用來(lái)生成編譯器的編譯器(編譯器代碼生成器)。Yacc生成的編譯器主要是用C語(yǔ)言寫成的語(yǔ)法解析器(Parser),需要與詞法解析器Lex一起使用,再把兩部份產(chǎn)生出來(lái)的C程序一并編譯。Yacc本來(lái)只在Unix系統(tǒng)上才有,但現(xiàn)時(shí)已普遍移植往Windows及其他平臺(tái)。
分析程序生成器(parser generator)是一個(gè)指定某個(gè)格式中的一種語(yǔ)言的語(yǔ)法作為它的輸入,并為該種語(yǔ)言產(chǎn)生分析過(guò)程以作為它的輸出的程序。在歷史上,分析程序生成器被稱作編譯-編譯程序( compiler- compiler ),這是由于按照規(guī)律可將所有的編譯步驟作為包含在分析程序中的動(dòng)作來(lái)執(zhí)行?,F(xiàn)在的觀點(diǎn)是將分析程序僅考慮為編譯處理的一個(gè)部分,所以這個(gè)術(shù)語(yǔ)也就有些過(guò)時(shí)了。
合并 LALR(1) 分析算法是一種常用的分析生成器,它被稱作 Yacc( yet another compiler- compiler )。給出 Yacc 的概貌來(lái),將使用Yacc為 TINY 語(yǔ)言開(kāi)發(fā)一個(gè)分析程序。
Yacc提供了一種用于描述計(jì)算機(jī)程序輸入的通用工具。Yacc用戶指定其輸入的結(jié)構(gòu),以及在識(shí)別每個(gè)此類結(jié)構(gòu)時(shí)要調(diào)用的代碼。Yacc將這樣的規(guī)范轉(zhuǎn)換為處理輸入過(guò)程的子例程。通常,由該子例程處理用戶應(yīng)用程序中的大多數(shù)控制流是方便且適當(dāng)?shù)?/p>
