Ano ang Pagkakaiba sa Pagitan ng Lex at Yacc

Talaan ng mga Nilalaman:

Anonim

Ang pangunahing pagkakaiba sa pagitan ni Lex at Yacc ay iyan Si Lex ay isang lexical analyzer na nagko-convert sa source program sa mga makahulugang token habang ang Yacc ay isang parser na bumubuo ng isang parse tree mula sa mga token na nabuo ni Lex.

Pangkalahatan, ang isang tagatala ay isang programa ng software na nagko-convert sa source code sa machine code. Dumaan ito sa maraming mga phase upang maisagawa ang conversion na ito. Una, mayroong isang lexical analysis phase. Nagsasangkot ito ng pagbabasa ng mapagkukunang programa ng isang character nang paisa-isa at pag-convert nito sa mga makahulugang lexemes (token). Susunod, ang output ng yugto na iyon ay papunta sa pagtatasa ng syntax. Kinukuha ang mga token ng lexical analysis at gumagawa ng isang parse tree bilang output. Sa pangkalahatan, ang lexical analyzer ay gumaganap ng lexical analysis habang ang syntax analyzer ay nagsasagawa ng syntax analysis. Si Lex ay isang lexical analyzer samantalang si Yacc ay isang parser. Parehas na nagtutulungan. Halimbawa, kinukuha ni Lex ang string input upang lumikha ng mga token, at ginagamit ng Yacc ang mga tokenized input.

Lex, Lexical Analyzer, Parse Tree, Syntax Analysis, Yacc

Ano si Lex

Ang Lex ay isang programa sa computer na bumubuo ng mga lexical analyser. Sina Mike Lex at Eric Schmidt ay ang orihinal na developer ng Lex. Ito ay isang pamantayang leksikal na analyzer generator sa iba't ibang mga system ng UNIX. Ang Lex ay tinukoy bilang isang bahagi ng pamantayan ng POSIX. Pangkalahatan, ang Lex ay ginagamit sa Yacc parse generator. Bukod dito, binabasa ni Lex ang isang input stream na tumutukoy sa lexical analyzer. Pagkatapos, naglalabas ito ng source code na nagpapatupad ng lexer sa wikang C.

Ang isang Lex file ay binubuo ng mga sumusunod na tatlong seksyon:

Kahulugan: Tumutukoy sa macros at pag-import ng mga file ng header na nakasulat sa C.

Panuntunan: Naglalaman ito ng regular na mga pattern ng pagpapahayag na may mga pahayag na C. Kapag kinilala ng lexer na ang teksto sa input ay tumutugma sa isang naibigay na pattern, isasagawa nito ang nauugnay na C code.

C code: Ang seksyon na ito ay binubuo ng mga pahayag at pag-andar ng C.

Bukod dito, ang bersyon ng bukas na mapagkukunan ng Lex ay ipinamamahagi ngayon bilang isang bahagi ng OpenSolaris at Plan 9 mula sa Bell Labs. Ang pinakatanyag na bersyon ng bukas na mapagkukunan ng Lex ay tinatawag na flex, na nangangahulugang Mabilis na Lexical Analyzer.

Ano ang Yacc

Kinakatawan ni Yacc Ngunit Isa pang Compiler-Compiler. Stephan C. Johnson binuo ito, at ito ay ginagamit sa UNIX system. Ito ay isang karaniwang utility sa BSD at AT&T UNIX. Bilang karagdagan, ang pamamahagi ng Linux na nakabatay sa GNU ay may kasamang Bison, kapalit na pasulong na Yacc.

Pagkakaiba sa Pagitan ng Lex at Yacc

Kahulugan

Ang Lex ay isang programa sa computer na nagpapatakbo bilang isang lexical analyzer habang ang Yacc ay isang parser na ginagamit sa Unix Operating System.

Developer

Sina Mike Lex at Eric Schmidt ay nag-develop ng Lex samantalang si Stephan C. Johnson ay nag-develop ng Yacc.

Pag-andar

Habang binabasa ni Lex ang pinagmulang programa ng isang character nang paisa-isa at ginawang ito ng mga makabuluhang token, kinukuha ng Yacc ang mga token bilang input at bumubuo ng isang parse tree bilang output.

Konklusyon

Sa madaling sabi, sinusuportahan ng lexical analyzer at parser ang unang dalawang yugto ng proseso ng pagtitipon. Sa madaling salita, ang Lex ay isang lexical analyzer, at si Yacc ay isang parser. Kaya, ang pangunahing pagkakaiba sa pagitan ng Lex at Yacc ay ang Lex ay isang lexical analyzer na nagko-convert sa source program sa mga makahulugang token habang ang Yacc ay isang parser na bumubuo ng isang parse tree mula sa mga token na nabuo ni Lex.

Mga Sanggunian:

1. "Lex (Software)." Wikipedia, Wikimedia Foundation, Hunyo 29, 2019, Magagamit dito. 2. "Yacc." Wikipedia, Wikimedia Foundation, 23 Hunyo 2019, Magagamit dito.

Kagandahang-loob ng Larawan:

1. ”85017 ″ sa pamamagitan ng (CC0) Pxhere

Ano ang Pagkakaiba sa Pagitan ng Lex at Yacc