Главная / Программирование /
Разработка компиляторов / Тест 8
Разработка компиляторов - тест 8
Упражнение 1:
Номер 1
Программа, которая строит LALR- анализаторы - это:
Ответ:
 (1) генератор лексических анализаторов YACC 
 (2) генератор синтаксических анализаторов YACC 
 (3) генератор синтаксических анализаторов LACC 
 (4) генератор лексических анализаторов YACC  
Номер 2
Генератор анализаторов YACC был разработан:
Ответ:
 (1) в начале 60-х годов прошлого века 
 (2) в конце 60-х годов прошлого века 
 (3) в начале 70-х годов прошлого века 
 (4) в конце 70-х годов прошлого века 
Номер 3
Генератор анализаторов YACC был создан для следующих операционных систем:
Ответ:
 (1) UNIX 
 (2) Windows 
 (3) OS/2 
Упражнение 2:
Номер 1
YACC - это имя генератора в операционной системе UNIX, в остальных операционных системах программа называется:
Ответ:
 (1) PYACC 
 (2) WINYACC 
 (3) PCYACC 
 (4) AYACC 
Номер 2
Входом программы YACC является:
Ответ:
 (1) грамматика языка 
 (2) некоторая дополнительная информация 
 (3) программа на языке C 
 (4) файл со спецификациями 
Номер 3
На вход YACC получает файл со спецификациями, который должен иметь расширение:
Ответ:
 (1) "c" 
 (2) "cpp" 
 (3) "n" 
 (4) "y" 
 (5) "cc" 
 (6) "a" 
Упражнение 3:
Номер 1
Выходом YACC могут быть файлы:
Ответ:
 (1) name.yy.c
 
 (2) name.c
 
 (3) name.yy.h
 
 (4) y.output
 
Номер 2
Какой из следующих файлов содержит сгенерированную YACC'ом программу анализатора:
Ответ:
 (1) name.yy.c
 
 (2) y.output
 
 (3) yy.lrt
 
 (4) name.c
 
Номер 3
Какой из следующих файлов создается при задании параметра -h
, - описания, которые также генерирует YACC:
Ответ:
 (1) name.yy.h
 
 (2) name.h
 
 (3) y.output
 
 (4) yy.lrt
 
Упражнение 4:
Номер 1
Файл со спецификациями name.y
должен быть устроен следующим образом:
Ответ:
 (1) Секция описаний
%%
Секция грамматических правил
%%
 
 (2) Секция описаний
%%
Секция грамматических правил
%%
Секция определений
%%
Секция процедур
 
 (3) Секция описаний
%%
Секция грамматических правил
%%
Секция процедур
 
Номер 2
В файле name.y
секция описаний содержит:
Ответ:
 (1) описания переменных языка C 
 (2) определения типов 
 (3) объявления терминальных символов грамматики 
 (4) объявления нетерминальных символов грамматики 
 (5) определения ассоциативности и приоритетов операций 
Номер 3
Описания переменных языка C в файле name.y
заключаются в:
Ответ:
 (1) <...>
 
 (2) /{ … }/
 
 (3) %{ … }%
 
 (4) <?...?>
 
 (5) &%...%&
 
 (6) /%...%/
 
Упражнение 5:
Номер 1
Примером определения типов, значения которых возвращаются как значения семантик является:
Ответ:
 (1) %{
int myCount;
}%
 
 (2) %type <id1> conditional_stmt
 
 (3) %union
{
type1 id1;
...
}
 
 (4) %token MINUS_LC PLUS_LC TIMES_LC
 
Номер 2
Объявлением нетерминальных символов грамматики являются:
Ответ:
 (1) %token MINUS_LC PLUS_LC TIMES_LC
 
 (2) %token PLUS_TO_LC TIMES_TO_LC
 
 (3) %{
int myCount;
}% 
 (4) %type <id1> conditional_stmt
 
Номер 3
Секция грамматических правил, состоит из правил, которые записываются следующим образом:
Ответ:
 (1) A: production_body;
 
 (2) .production_body;
 
 (3) production_body :A;
 
 (4) A:= production_body;
 
Упражнение 6:
Номер 1
В следующем правиле (секция грамматических правил файла name.y
):A: production_body;
именем нетерминала является:
Ответ:
 (1) production_body;
 
 (2) A: production_body;
 
 (3) A
 
 (4) production_body
 
Номер 2
В секции правил грамматики литерал может состоять:
Ответ:
 (1) из литер, заключенных в кавычки 
 (2) из литер, заключенных в круглые скобки 
 (3) из литер, заключенных в квадратные скобки 
 (4) из литер, заключенных в апострофы 
Номер 3
Backslash в секции правил грамматики используется:
Ответ:
 (1) для задания управляющей последовательности 
 (2) для описания комментария 
 (3) для задания линейной последовательности 
 (4) для описания директив компилятора 
Упражнение 7:
Номер 1
Какая литера может использоваться для объединения всех правил в одно, если имеется несколько грамматических правил с одинаковой левой частью:
Ответ:
 (1) "|"
 
 (2) "-"
 
 (3) "/"
 
 (4) "\"
 
Номер 2
Аксиому можно определить в секции объявлений так:
Ответ:
 (1) %start
 
 (2) %start axiom
 
 (3) %begin axiom
 
 (4) %begin
 
Номер 3
Фрагменты программ на языке С, заключенные в фигурные скобки - это:
Ответ:
 (1) лексемы 
 (2) анализаторы 
 (3) семантики 
 (4) секции 
Упражнение 8:
Номер 1
Для того, чтобы нетерминал мог иметь значение некоторого типа, который указан в объединении, определенном в секции объявлений, он должен быть объявлен следующим образом:
Ответ:
 (1) %type имя-нетерминала <имя-вида>
 
 (2) %type <myCounter> counter
 
 (3) %type <имя-вида> имя-нетерминала
 
 (4) %type counter <myCounter>
 
Номер 2
Все имена и литералы, содержащиеся в правой части правила нумеруются:
Ответ:
 (1) слева направо, начиная с единицы 
 (2) слева направо, начиная с нуля 
 (3) слева направо, начиная с десяти 
 (4) слева направо, начиная с тысячи 
Номер 3
Данное правило:A: B { $$ = 1; }
C { x = $2; y = $3; }
;эквивалентно следующему:
Ответ:
 (1) $$1: /* пустая правая часть */ { $$ = 1; }
;
A: B $$1 C { x = $2; y = $3; } 
 (2) $1: /* пустая правая часть */ { $$ = 1; }
;
A: B $1 { x = $2; y = $3; }
; 
 (3) $$1: /* пустая правая часть */ { $$ = 1; }
;
A: B $$1 C { x = $2; y = $3; }
; 
Упражнение 9:
Номер 1
Какая из секций является необязательной:
Ответ:
 (1) секция описаний 
 (2) секция грамматических правил 
 (3) секция описаний процедур 
Номер 2
Какая из процедур реализует лексический анализ и возвращает лексический класс лексемы:
Ответ:
 (1) int yyparse (void)
 
 (2) int yyerror (char * s)
 
 (3) int yylex (void)
 
Номер 3
При использовании какого параметра программы YACC будет построен заголовочный файл с именем f:
Ответ:
 (1) -Cf
 
 (2) -Df
 
 (3) -v
 
 (4) -a
 
 (5) -Tf
 
 (6) -Nf
 
Упражнение 10:
Номер 1
Данная функция:int yylex (void)
{
int ch;
while ((ch = getchar ()) == ' ');
if (isdigit (ch))
{
ungetc (ch, stdin);
scanf (%i, &yylval);
return NUMBER_LC;
}
return ch;
}
вычисляет следующую пару значений:
Ответ:
 (1) лексический класс 
 (2) атрибут, связанный с лексическим классом 
 (3) семантический класс 
 (4) атрибут, связанный с семантическим классом 
Номер 2
Для того, чтобы получить управляющую таблицу анализатора достаточно запустить программу YACC с ключом:
Ответ:
 (1) -a
 
 (2) -g
 
 (3) -m
 
 (4) -v
 
Номер 3
Ошибки, которых в программе на самом деле нет, могут возникнуть в результате не совсем корректной работы транслятора после обнаружения какой-нибудь ошибки - это:
Ответ:
 (1) корректные ошибки 
 (2) наведенные ошибки 
 (3) псевдоошибки 
 (4) скрытые ошибки 
Упражнение 11:
Номер 1
Лексический анализатор в следующем контексте:fi (x == y) { ... }
:
Ответ:
 (1) проигнорирует ошибку 
 (2) не сможет обнаружить ошибку 
 (3) сможет обнаружить ошибку 
Номер 2
Обычно, фазы оптимизации и генерации:
Ответ:
 (1) не обнаруживают ошибки 
 (2) обнаруживают ошибки 
 (3) игнорируют ошибки 
 (4) осуществляют поиск ошибок 
Номер 3
Контроль типов осуществляется во время обхода:
Ответ:
 (1) синтаксического дерева 
 (2) лексического дерева 
 (3) семантичесого дерева 
 (4) специального дерева 
Упражнение 12:
Номер 1
60% ошибок в программе - это:
Ответ:
 (1) ошибки в операторах и операндах 
 (2) ошибки в ключевых словах 
 (3) пунктуационные ошибки 
 (4) все прочие ошибки 
Номер 2
Error-правила в YACC'е имеет один из следующих видов:
Ответ:
 (1) A: w error
 
 (2) A: w1 error w2
 
 (3) w1 error w2 :A
 
 (4) w error :A
 
Номер 3
Правила, которые будут использоваться в случае ошибки называются:
Ответ:
 (1) "error productions" 
 (2) "error rules" 
 (3) "error set" 
 (4) "error stop"