• Технологии компиляции
• Контрольные мероприятия
• Итоговый тест
Сколько строк длины меньше 3 содержит язык, описываемый регулярным выражением (x+y)*y(a+ab)*?
1
4
3
2
Лексический анализатор распознает токены Т1, Т2, Т3, алфавит задан символами { a, b, c } . Т1 = a?(blc)*a, Т2 = b?(alc)*b, Т3 = c?(bla)*c, заметим знак «x?» обозначает 0 или 1 появление символа x, анализатор ищет совпадение по наиболее длинному префиксу. Какие из токенов появятся на выходе лексического анализатора для выражения «bbababcaab»:
Т2, Т3
Т1, Т1, Т3
Т2, Т1, Т3
Т1, Т2, Т3
Процесс поиска совпадающих токенов обычно описывается с помощью?
Контекстно-зависимой грамматики
Конечные автоматы
Регулярные выражения
Лексический анализ
Общий синтаксический анализ
Интерпретационный анализ
Синтаксический анализ
Генерация промежуточного кода на основе абстрактной модели машины полезна в компиляторах, потому что:
Проще реализовать синтаксически управляемый перевод для генерации промежуточного кода
Трудно преобразовать код из программы на языке высокого уровня в целевой код.
Повышает переносимость системной программы компилятора.
Упрощает выполнение лексического и синтаксического анализа.
Левая факторизация — это грамматическое преобразование, полезное для создания грамматики, пригодной для
LL(1) синтаксического анализатора.
LR(1) синтаксического анализатора.
SLR синтаксического анализатора.
LALR синтаксического анализатора
Какое число токенов в следующей команде языка Си:
while(1){
Ответ:
__________ — это обработка каждого оператора исходной программы или его эквивалентного представления для выполнения функции обработки языка (набор функций обработки языка)
Этап анализа
Этап синтеза
Этап языкового процессора
Не верного ответа
Машинно-независимая оптимизация кода может быть применена к ______.
исходному коду
промежуточному представлению
объектному коду
к машинному коду
В компиляторах генерация промежуточного кода на основе абстрактной модели машины полезна, потому что
Переводы, ориентированные на синтаксис, могут быть написаны для промежуточной генерации кода.
Невозможно генерировать код для реальных машин непосредственно из языковых программ высокого уровня.
Улучшена переносимость клиентской части компилятора.
Проще реализовать лексический и синтаксический анализ.
Лексический анализ
Строки символов
Синтаксическое дерево
Набор регулярных выражений
В компиляторе _______________ проверяет каждый символ исходного текста.
Лексический анализатор
Синтаксический анализатор
Генератор кода
Оптимизатор кода
Сколько строк длиной менее 4х символов можно описать регулярным выражением (x|y)*y
7
6
8
ничего из указанного
Учитывая грамматику
S -> T * S | T
T -> U + T | U
U -> a | b
Какое из следующих утверждений НЕверно?
Грамматика не двусмысленна
приоритет оператора + выше приоритета оператора *
Грамматика праворекурсивна
приоритет оператора + равен приоритету оператора *
Когда выражение sum=3+7 токенизировано, то какова категория токена 3?
Целочисленный литерал
Оператор сложения
Оператор присваивания
Идентификатор
Когда выражение sum=3+7 токенизировано, то какова категория токена sum ?
Целочисленный литерал
Оператор сложения
Оператор присваивания
Идентификатор
Лексический анализатор выполняет:
Удаление комментариев
Удаление пробелов
Разбиение входного потока символов на токены
Все ответы верны
Заданы следующие правила грамматики:
X -> xXYZ
Y -> y|z|?
Z -> x
Выберите, что из перечисленного входит в множество FOLLOW(X):
{Y}
{z}
{y,z}
{x,y,z}
Даны правила грамматики
E -> E+T | T,
T -> T#F | F,
F -> id, является
неоднозначна
частично неоднозначна
однозначна
Какие инструкции используются для вызова подпрограммы?
MOV
GOTO
MOV and GOTO
HALT
Как называется дерево синтаксического анализа, показывающее значение атрибутов в каждом узле.
аннотированное дерево синтаксического анализа
семантическое дерево
синтаксическое дерево
Какая часть компилятора активно использовала концепцию грамматики?
Оптимизация кода
Генерация кода
Лексический анализ
Синтаксический анализ
Какое множество символов соответствует регулярному выражению
«(a|b)»?
{a}
{a, b}
{a, b, ε}
{b}
Имеется грамматические правила и семантические правила перевода:
E->E1 # T {E.value = E1.value * T.value}
E->T {E.value = T.value}
T->T1 & F {T.value = T1.value + F.value}
T->F {T.value = F.value}
F->num {F.value = num.value},
в приведенной грамматике E стартовый символ. Что будет на выходе при разборе выражения
«2 # 3 & 3 # 6 & 4»?
50
100
180
120
На вход лексического анализатора поступает:
Исходный код
Объектный код
Лексемы
Дерево синтаксического анализа
Суть лексического анализа заключается в разбиении последовательности символов на
Группы
Токены
Пункты
Кластеры
Как будет представлено выражение T1 = a + b в трех-адресном коде, тройки
+, a, b, T1
индекс, указатель на тройку
+, a, b
Не верного ответа
Термин «трех-адресный код», представляет форму X:=Y op Z и обычно содержит три адреса (два для операндов, один для результата). Каковы представления трех адресного кода?
Четверки
Тройки
Косвенные тройки.
Двойки
Какие из указанных утверждений верны:
i. Выход лексического анализатора это группы символов
ii. Число токенов в команде printf(«i = %d, &i = %x», i, &i); равно 11
iii. Таблица символов может быть реализована в виде массива и хеш-таблицы.
верно только i
верно только ii и iii
верны все утверждения
все утверждения не верны
Что из перечисленного неверно?
программа выполняемая интерпретатором работает медленнее, чем скомпилированная
скомпилированный вариант программы легче отлаживать
код ассемблера легче воспринимать чем машинный код
программа машинного кода имеют привязку к аппаратному обеспечению и непереносимы на другую платформу
Область действия, переменной в исходной программе называется?
scope, область видимости
life time, продолжительность жизни
Домен
Все ответы верны
Синтаксический анализатор сдвига и свертки использует следующие правила грамматики и семантические действия для трансляции, указанные в фигурных скобках.
S->xxW {print”1”}
S->y {print”2”}
W->Sz {print”3”}
Используя схему перевода, какая из приведенных строк выполнит перевод строки xxxxyzz?
11231
11233
23131
33211
Какой из перечисленных синтаксических анализаторов имеет наибольшее число состояний при создании прграммного автомата
LL(1)
LR(1)
SLR
LALR
Контекстно-свободная грамматика неоднозначна, если...
Грамматика содержит нетерминалы
Производит более одного дерева синтаксического анализа
Одно из правил имеет два нетерминала рядом
Ничего из перечисленного
Какое число токенов в следующей команде языка Си:
printf ( «i = %d, &i = %x», i, &i );
10
3
26
21
Чему из перечисленного эквивалентно регулярное выражение «а?» ?
а
а|Y
а|ε
неправильное выражение
Какое из приведенных регулярных выражений соответствует этим правилам грамматики:
S->AB,
A->a | aA,
B->b
aa*b+
a*b
(ab)*
a(ab)*
Функция хеширования используется при работе с таблицей символов для операций
поиска
вставки
обновления
удаления
Какая фаза компилятора также известна как сканер?
Генерация кода
Синтаксический анализ
Семантический анализ
Лексический анализ
Рассмотрим следующую грамматику вместе с правилами перевода:
S -> S1 / T { S.val = S1.val / T.val }
S -> T { S1.val = T.val }
T -> T1 * R { T.val = T1.val * R.val }
T -> R { T.val = R.val }
R -> id { R.val = id.val }
Здесь div и mul — операторы, а id — токен, представляющий целое число, а id.val
— значение. Используя эту грамматику, вычислите значение S.val для выражения
80 / 2 * 5 / 8
Ответ:
Выход лексического анализатора это:
Дерево разбора исходной программы
Промежуточный код
Машинный код
Поток токенов
Определите количество токенов, сгенерированных лексическим анализатором для следующей строки кода:
for ( int i = 0 ; i < 3; i ++ )
Ответ:
Отзывы
Отзывов пока нет.