Yacc
Рачунарски програм yacc је генератор парсера, који је развио Стивен Ц. Џонсон из компаније АТ&Т за оперативни систем Јуникс. Име представља скраћеницу још један компилатор компилатора (енгл. Yet Another Compiler Compiler). Он генерише парсер (део компилатора који покушава да синтаксно обради изводни код) на основу формалне граматике записане у форми сличној БНФ. Yacc генерише код за парсер у програмском језику Ц.
Yacc је дуго био доступан као подразумевани генератор парсера на већини Јуникс система. Међутим, данас је у великој мери замењен новијим, али у великој мери компатибилним програмима, као што су Berkeley Yacc, GNU bison, MKS yacc и Abraxas pcyacc. Осамревењена верзија оригиналног АТ&Т програма је доступна као део Сановог пројекта ОпенСоларис. Сваки од ових програма пружа ситна побољшања и додатне опције у односу на оригинални yacc, али је концепт остаио исти. Yacc је такође написан и за друге програмске језике, укључујући Ратфор, ЕФЛ, МЛ, Ада, Јава, и Лимбо.
Парсеру који генерише yacc је неопходан лексички анализатор. Генератори лексичких анализатора, као што су Lex или Flex су широко доступни. IEEE POSIX P1003.2 стандард дефинише функционалност и захтеве и за Lex и за Yacc.
Рад yacc-а заснива се на методи LALR(1)-анализе. Улаз у систем yacc представља изворна датотека која садржи опис правила контекстно слободне граматике. Описи правила граматике проширују се семантичким акцијама које представљају програмски код у C-у који се извршава када се препозна одређени део улаза. Резултат рада yacc-а је датотека која се обично назива y.tab.c. Њу је потребно превести неким C преводиоцем и повезати са остатком програма који пишемо да бисмо добили извршну верзију програма.
Структура улазне датотеке
Улазна датотека yacc система обично има екстензију .c и састоји се из три дела међусобно раздвојена сепаратором %%:
Први део је део декларација који садржи декларације свих токена граматике. У њему се наводи и приоритет и асоцијативност оператора уколико је потребно и врши декларисање типа атрибута симбола дате граматике. У овом делу се могу дефинисати и декларисати разни глобални објекти на језику C који се касније могу користити у свим акцијама које врше обраду улаза. Тај C код се наводи између %{ и %}.
Централни део је део правила у коме су наведена граматичка правила проширена акцијама које представљају код који се извршава када се препозна део улаза описан тим правилом.
Трећи део је део функција који садржи функције писане у програмском језику C. Оне се, без икакве обраде, дописују на одговарајућа места у y.tab.c датотеку. У овом делу се обично налазе и дефиниције функције main() и функције yylex() која врши фазу лексичке анализе.
Види још
- GNU bison: GNU верзија yacc-a
- LALR парсер: алгоритам за парсирање који се налази у позадини yacc-a
- Lex и Flex, лексички анализатори који се најчешће користе заједно са yacc-ом (Bison-ом)
Литература
- Stephen C. Johnson. YACC: Yet another compiler-compiler. Unix Programmer's Manual Vol 2b, 1979.
Спољашње везе
- Tutorial lex/yacc/компилатор туторијал
- Berkeley Yacc варијанта yacc-a која је написана да би се избегла зависност од било ког конкретног компајлера за C
- Yaxx варијанта yacc-a која је написана да би се избегла зависност од било ког конкретног програмског језика
- Essence, генератор парсера за Scheme
- CL-Yacc, генератор парсера за Lisp
- Eyapp, проширење yacc-a за Perl
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.