Що таке lex і yacc у дизайні компілятора?

Лекс і як є інструменти, що використовуються для створення лексичних аналізаторів і парсерів. Я припускаю, що ви можете програмувати на C і розуміти структури даних, такі як зв’язані списки та дерева. У вступі описуються основні будівельні блоки компілятора та пояснюється взаємодія між lex і yacc.

Lex в дизайні компілятора є програма, яка використовується для створення сканерів або лексичних аналізаторів, які також називаються токенізерами. Ці токенізери ідентифікують лексичний шаблон у програмі введення та перетворюють введений текст у послідовність лексем. Він використовується з генератором аналізатора YACC.

Команда yacc перетворює контекстно-вільну граматичну специфікацію в набір таблиць для простого автомата, який виконує алгоритм аналізу LALR(1).. Граматика може бути неоднозначною; задані правила пріоритету використовуються для усунення неоднозначностей. Ви повинні скомпілювати вихідний файл, y. вкладка.

функція yywrap викликається lex, коли вхідні дані вичерпано. Поверніть 1, якщо ви закінчили, або 0, якщо потрібна додаткова обробка. Кожна програма на C потребує функції main. У цьому випадку ми просто викликаємо yylex, який є основною точкою входу для lex.

У зв'язку з широким використанням парсерів існують різні інструменти, спрямовані на автоматизацію їх генерації. Двома найпоширенішими інструментами генерації парсерів є класичні Lex/Yacc і ANTLR. Незважаючи на те, що ANTLR надає розширені функції, Lex/Yacc досі залишається кращим вибором у багатьох університетських курсах.

lex і yacc — це пара програм, які допоможіть написати інші програми. Вхідні дані для lex і yacc описують, як ви хочете, щоб працювала ваша остаточна програма. Вихід – вихідний код на мові програмування C; ви можете скомпілювати цей вихідний код, щоб отримати програму, яка працює так, як ви спочатку описали.