Кіріспе
Berkeley Yacc (byacc) – Yacc-пен үйлесімді болу үшін жасалған Unix parser генераторы. Ол 1989 жылы Роберт Корбеттің жұмысымен жарыққа шықты. Лицензиясының еркін болуы және AT&T Yacc-тан жылдамдығының арқасында, ол Yacc-тың ең танымал нұсқасына айналды. Оның артықшылықтары – ANSI C89 стандартында жазылғандығы және ашық кодты бағдарламалық қамтамасы болып табылады. Онда Yacc-та жоқ, мысалы, қайта кіру мүмкіндігі сияқты функциялар бар, ол GNU Bison-мен толық үйлесімділікпен іске асырылған.
Berkeley Yacc (byacc) is a Unix parser generator designed to be compatible with Yacc. It was originally written by Robert Corbett and released in 1989. Due to its liberal license and because it was faster than the AT&T Yacc, it quickly became the most popular version of Yacc. It has the advantages of being written in ANSI C89 and being public domain software. It contains features not available in Yacc, such as reentrancy, which is implemented in a way that is broadly compatible with GNU Bison.
Тарих
1985 жылы Роберт Корбетт ДеРмер мен Пеннеллоның 1982 жылғы мақаласына негізделген түпнұсқа LALR талдау генераторын жасады. Корбетт оны философия ғылымы бойынша докторлық диссертациясының бөлігі ретінде жазды, және 1985 жылдың маусымында Калифорния университетінен (Беркли) алды. Ол бастапқыда Byson деп аталды және Yacc-пен үйлесімсіз болды, бірақ кейіннен Bison деп аталып, GNU Bison-ның негізіне айналды. Кейін 1985 жылы Корбетт өзінің LALR талдау генераторын жасап, оны Yacc-ке үйлесімді етіп, Zeus деп атады, бірақ кейіннен Zoo деп өзгертті. Корбетт Zoo бағдарламасының бастапқы кодын Usenet жаңалық тобында жариялады, бірақ ол 1989 жылдың қыркүйегінде Корбетт компиляторлар тобында FTP серверіне кодты орналастыру туралы хабарлағанға дейін көбінесе назарсыз қалды. 1995 жылы Крис Додд BtYacc-ты, Беркли Yacc-тың кері іздеу туындысын, C++ сияқты контекстке сезімтал тілдерді талдауды қолдау үшін жасады, бұл 1993 жылы Мерриллдің AT&T Yacc-қа ұқсас өзгерістерді сипаттаған мақаласына негізделген. Оның кері іздеу және семантикалық түсіндіру мүмкіндіктері екіұшты грамматикалар үшін талдаушыларды (parser) құруға мүмкіндік береді. Семантикалық ақпарат бойынша талданған, бірақ қабылданбаған ереже кері қайтарылып, талдаушы басқа ережені сынап көруі мүмкін. Дегенмен, ол қосымша әсерлерсіз сынақ әрекеттерін қажет ететіндігі және shift-reduce қайшылықтарын шешудегі икемсіздігі үшін де сынға ұшырады. 1997 жылы Вадим Маслов өзінің компаниясы жасаған COBOL талдаушысын қолдау үшін BtYacc-ты күтіп-ұстауды өз мойнына алды. 1999 жылға қарай соңғы 3.0 нұсқасы C++-қа ауыстырылды, сондықтан ол енді C тілінде іске асырылмайды. 2000 жылы Томас Э. Дикки Berkeley Yacc-ты OpenVMS-ке порттады, tin-ді VMS-ке порттауды жеңілдету үшін. Басқа күтіп-ұстаушыны таба алмағаннан кейін Дикки 2002 жылдың ақпанынан бері Berkeley Yacc-ты күтіп-ұстап келеді. Маңызды жаңарту K&R C-дан ANSI C89 стандартына көшу болды.
In 2000, Thomas E. Dickey ported Berkeley Yacc to OpenVMS to facilitate porting tin to VMS. After failing to find another maintainer, Dickey has maintained Berkeley Yacc since February 2002. A significant update was the conversion from K&R C to ANSI C89.
Тілдер
Parser генераторлары әдетте үш тілмен жұмыс істейді: генератор іске асырылған тіл, жасалған parser іске асырылған тіл және, әрине, жасалған parser нені талдауы керек екенін сипаттайтын метатіл. Жасалған parser талдайтын тілді төртінші тіл деп санауға болады, бірақ parser генераторлары оны тікелей өңдемейді, тек берілген сипаттамадан parser жасауға назар аударады, ал жасалған parser осы тілді өңдеумен айналысады. Yacc C тілінде жазылған және өзінің Yacc метатіліндегі сипаттамаларынан C тілінде parser-лер жасайды. Бұл Беркли Yacc-тың да жұмыс принципі (осылайша олардың үйлесімділігі), алайда, C-ден басқа тілдерде parser-лер жасауға мүмкіндік беретін бірнеше туынды нұсқалар жасалды. Ray Lischner byacc 1.6 негізінде perl byacc (pbyacc) құрамын жасады, соның арқасында ол Perl тілінде де parser-лер жасай алатын болды. Кейін Ричард "Рик" Онемус byacc 1.6-дан byacc 1.8-ге түзетулерді көшірді. Ал 1996 жылы Джейк Донхэм perl yacc 1.8.2 негізінде p5yacc-ті жасады, осылайша жасалған Perl parser-лері Perl 5 кластарын пайдаланатын болды. 1994 жылы Майк Клейн perl yacc 1.8.2 негізінде tyacc-ті жасады, соның арқасында ол Tcl тілінде де parser-лер жасай алатын болды.
Ray Lischner developed perl byacc (pbyacc) from byacc 1.6, so that it could also generate parsers in Perl. Later Richard "Rick" Ohnemus ported the patches from byacc 1.6 to byacc 1.8. And later in 1996, Jake Donham developed p5yacc from perl yacc 1.8.2 so that its generated Perl parsers would use Perl 5 classes. In 1994, Mike Kleyn developed tyacc from perl yacc 1.8.2 so that it could also generate parsers in Tcl
In 1997, Bob Jamison developed BYACC/Java (later called BYACC/J or byaccj) from byacc 1.8, so that it could also generate parsers in Java. In 2000, Bruce Bahnsen merged in the Java parser capabilities of BYACC/J into perl yacc and added the ability to generate parsers in Python. In 2013, Thomas Dickerson made further improvements on it deeming it PyByacc. In 2003, Dave Bodenstab merged tyacc and p5yacc to develop a PERL TCL YACC rebasing it from 4.8 release of yacc from FreeBSD (a byacc derivative).
1997 жылы Боб Джеймисон byacc 1.8 негізінде BYACC/Java (кейін BYACC/J немесе byaccj деп аталды) құрамын жасады, соның арқасында ол Java тілінде де parser-лер жасай алатын болды. 2000 жылы Брюс Бахнсен BYACC/J Java parser-лерінің мүмкіндіктерін perl yacc-ке біріктірді және Python тілінде parser-лер жасау мүмкіндігін қосты. 2013 жылы Томас Дикерсон оны одан әрі жетілдіріп, PyByacc деп атады. 2003 жылы Дейв Боденстаб tyacc және p5yacc-ті біріктіріп, PERL TCL YACC-ті жасады, оның негізі FreeBSD-ден yacc-тің 4.8 нұсқасы болды (byacc туындысы).
Ray Lischner developed perl byacc (pbyacc) from byacc 1.6, so that it could also generate parsers in Perl. Later Richard "Rick" Ohnemus ported the patches from byacc 1.6 to byacc 1.8. And later in 1996, Jake Donham developed p5yacc from perl yacc 1.8.2 so that its generated Perl parsers would use Perl 5 classes. In 1994, Mike Kleyn developed tyacc from perl yacc 1.8.2 so that it could also generate parsers in Tcl
In 1997, Bob Jamison developed BYACC/Java (later called BYACC/J or byaccj) from byacc 1.8, so that it could also generate parsers in Java. In 2000, Bruce Bahnsen merged in the Java parser capabilities of BYACC/J into perl yacc and added the ability to generate parsers in Python. In 2013, Thomas Dickerson made further improvements on it deeming it PyByacc. In 2003, Dave Bodenstab merged tyacc and p5yacc to develop a PERL TCL YACC rebasing it from 4.8 release of yacc from FreeBSD (a byacc derivative).