Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 10 стр.

UptoLike

10
Для достижения высокой скорости компиляции применяется
компилятор с однопроходной структурой (рис.1.2). На рисунке связи по
управлению показаны сплошными линиями, передача данныхпунктиром.
Исходная
программа
Лексический анализатор
Синтаксический анализатор
Лексема
Фрагмент
постфиксной
записи
Генератор кода
Фрагмент
объектного
кода
Рис.1.2. Однопроходный транслятор.
В этом случае синтаксический анализатор выступает в роли основной
управляющей программы, вызывая блок сканирования и генератор кода,
организованные в виде подпрограмм. Синтаксический анализатор постоянно
обращается к блоку сканирования, получая от него лексему за лексемой из
просматриваемой программы, до тех пор, пока не построит новый элемент
постфиксной записи,
после чего он обращается к генератору кода, который
создает объектный код для этого фрагмента программы.
Преимущество:
Максимальная эффективность и скорость выполнения, так как
программа просматривается лишь однажды, количество операций обращения
к файлам минимально (только чтение из исходного и запись в объектный
файлы).
Недостатки:
1. Проблемы при организации переходов вперед. Например, во время
обработки предложения
GOTO метка;
могут встретиться трудности, так как "метка" еще не встречалась в тексте
программы.
                                                                                10

    Для      достижения     высокой     скорости     компиляции        применяется
компилятор с однопроходной структурой (рис.1.2). На рисунке связи по
управлению показаны сплошными линиями, передача данных – пунктиром.


              Исходная           Синтаксический анализатор
              программа                                           Фрагмент
                                                                  постфиксной
                                   Лексема                        записи

               Лексический анализатор                 Генератор кода

                                                         Фрагмент
                                                         объектного
                                                         кода

                     Рис.1.2. Однопроходный транслятор.


    В этом случае синтаксический анализатор выступает в роли основной
управляющей программы, вызывая блок сканирования и генератор кода,
организованные в виде подпрограмм. Синтаксический анализатор постоянно
обращается к блоку сканирования, получая от него лексему за лексемой из
просматриваемой программы, до тех пор, пока не построит новый элемент
постфиксной записи, после чего он обращается к генератору кода, который
создает объектный код для этого фрагмента программы.
    Преимущество:
    Максимальная эффективность и скорость выполнения, так как
программа просматривается лишь однажды, количество операций обращения
к файлам минимально (только чтение из исходного и запись в объектный
файлы).
    Недостатки:
    1. Проблемы при организации переходов вперед. Например, во время
обработки предложения
    GOTO метка;
могут встретиться трудности, так как "метка" еще не встречалась в тексте
программы.