Page 40 - 4761
P. 40

case "9": return(2);
                   case "x": return(3);
                   default:
                   if (isdigin(c));return(1);
                   if (isalpha(c))>="A")&&(toupper(c)<="F")
                   return(4);
                   else
                   return(5);
                   else
                   return(9);}}

                         Специфіка  програмування  кінцевого  автомата  для  лексичного  аналізу  полягає
                  тільки    в  діях  (операціях)  що  виконує  кінцевий  автомат.  Метою  лексичного  аналізу  є
                  розпізнавання  і  виділення  лексеми(слова)-  послідовності  символів,  тому  в  кінцевий
                  автомат вводиться множина визначених станів в яких  розпізнавання закінчується.

                         3.5 Синтаксичні аналізатори. Основні принципи роботи (СА)

                         Синтаксичний  аналізатор  –  це  частина  компілятора,  яка  відповідає  за  виявлення
                  основних синтаксичних конструкцій вхідної мови. В задачу СА входить: знайти і виділити
                  основні  синтаксичні  конструкції  вхідної  програми,  встановити  тип  і  перевірити
                  правильність  кожної  синтаксичної  конструкції;  представити  синтаксичні  конструкції  в
                  вигляді, зручному для подальшої генерації тексту результуючої програми.
                         Іншими  словами,  на  етапі  СА  потрібно  встановити,  чи  має  ланцюг  лексем
                  структуру,  задану  синтаксисом  мови,  а  також  зафіксувати  цю  структуру.  Отже,  знову
                  треба рішати задачу розбору: дано ланцюг лексем, і треба визначити, чи виводиться він з
                  граматикою вхідної мови. Проте структура синтаксису мови, представлена в вигляді таких
                  конструкцій як: вирази, описи, оператори і т.д. більш складна, ніж структура лексем. Тому
                  для  опису  синтаксису  мови  програмування  потрібні  більш  потужні  граматики  ніж
                  регулярні.  Як  правило  для  цього  використовують  КВ-граматики,  що  скорочуються.
                  Граматики цього класу, з однієї сторони дозволяють достатньо повно описати структуру
                  реальних мов програмування; з другої для різних підкласів СКВ-граматик існують досить
                  ефективні алгоритми розбору.

                         Типи синтаксичних аналізаторів
                         Побудова  синтаксичного  аналізатора  (СА)  –  це  більш  творчий  процес,  ніж
                  побудова лексичного аналізатора. Його не завжди можна повністю формалізувати.
                         Маючи граматику вхідної мови, розробник повинен в першу чергу виконати ряд
                  формальних перетворень над нею, які полегшують побудову розпізнання.
                         Після цього він повинен перетворити, чи попадає отримана граматика під один з
                  відомих  класів  КВ-мов,  для  яких  існують  лінійні  розпізнавачі.  Якщо  такий  клас  не
                  знайдено,  то  розробник  повинен  попробувати  виконати  над  граматикою  деякі
                  перетворення,  щоб  привести  її  до  одного  з  відомих  класів,  інакше  треба  розробляти
                  універсальний розпізнавач.
                         Всі розпізнавачі для КВ-мов функціонують на МП-автоматах. Їх розділяють на 2
                  групи: низхідні та висхідні.
                         Низхідні  розпізнавачі  переглядають  вхідний  ланцюг  символів  зліва  направо  і
                  породжують  лівосторонній  вивід.  При  цьому  получається,  що  дерево  виводу  будується
                  таким розпізнавачем від кореня до листя (зверху вниз).
                         Висхідні  розпізнавачі  теж  переглядають  вхідний  ланцюг  символів  зліва  направо,
                  але породжують при цьому правосторонній вивід. Дерево виводу будується знизу вверх.




                                                                38
   35   36   37   38   39   40   41   42   43   44   45