Page 35 - 4761
P. 35

Таблиця 3.2 – Таблиця символьних імен

                   №    Символ              Адреса            Тип      Інша
                        ім’я                                           інформація
                   1    I                                     int
                   2    Y                                     int
                   3    X                                     real
                          1
                   4    …                   …                 ...      …

                         Таблиця 3.3 - Таблиця літералів

                   №    Літерал             Адреса            Тип      Інша
                                                                       інформація
                   1    1                                     int
                   2    8                                     int
                   3    100                                   int
                   4    ...                 ...               ...      ...


                         Результатом роботи сканера є послідовність кодів лексем, які представляють собою
                  послідовність  коду таблиці (номер таблиці) і специфікатора. Специфікатор задає номер
                  рядка в таблиці,  куди занесена лексема, що дозволяє уникнути додаткового пошуку по
                  таблицях на наступних етапах трансляції.  Наприклад в результаті обробки рядка виду:
                                                       FOR I:=1  то 100 до Y:=X1
                  сканер формує наступну послідовність
                         <1,06><2,1><1,14><3,1><1,07><3,3> <1,08><2,2><1,14><2,3>
                         В  кутових  дужках  пара  чисел  задає  код  таблиці  і  специфікатор.  Додатково  до
                  основної  функції  розпізнавання  лексем  сканер  може  виконувати  читання  рядків  і  друк
                  лістинга вихідної програми.
                         Функціонально в сканері можуть бути виділені наступні моделі:
                         1)    виділення із вхідного рядка чергового слова;
                         2)    пошук в таблицях лексем і визначення коду лексем;
                         3)    формування і вивід вихідного рядка.
                         Для модуля, що виділяє слова важливою є інформація про те, які символи можуть
                  бути  признаками  початку  і  кінця  символу.  В  мовах  С,  Pascal,  Basic  ключові  слова
                  виділяються  пробілами.  По  відношенню  до  ідентифікаторів  задача  їх  виділення  стає
                  складнішою оскільки символом розділювачем для них може бути будь-який символ, що
                  не  підходить  по  визначенню  в  ідентифікатор  або  число  при  заповненні  таблиць
                  здійснюється перевірка на наявність в ній елементу, що співпадає з виділеною константою
                  або  ідентифікатором  (при  наявності  такого  елементу  повторне  занесення  в  таблицю  не
                  відбувається).  Завданням  останнього  модуля  є  занесення  у  вихідний  рядок  кодів
                  виявлених лексем.
                         Алгоритм  роботи.  Першою  задачею  реалізації  алгоритму  є  розбивка  вхідного
                  рядка на лексеми.
                         Другою – заповнення відповідних таблиць. Традиційно речення вхідної програми,
                  що  складається  з  лексичних  одиниць  розділені  символами  розділювачами:  ,  ;  знаки
                  операцій ( [ ) ].
                         Розпізнавання ідентифікаторів і літералів виконується на основі правил мови. Після
                  виділення  лексеми  здійснюється  перевірка  на  наявність  її  в  таблиці.  При  її  наявності  у
                  вихідний  рядок  записується  пара  чисел:  номер  рядка  в  таблиці  і  „0”  якщо  лексема  не
                  виявлена  в  таблиці,  то  вона  класифікується,  як  можливий  ідентифікатор.  Після  того  як
                  вона  класифікована  як  можливий  ідентифікатор  здійснюється  пошук  в  таблиці

                                                                33
   30   31   32   33   34   35   36   37   38   39   40