Разработка компиляторов - ответы

Количество вопросов - 537

Альтернативой построению новой грамматики может служить "соглашение", что в случае конфликта перенос-свертка:

Когда большинство исследователей было уверено, что неявное управление памятью окончательно вытеснило все остальные методы:

После вывода нового нетерминала в разметке строится ее замыкание относительно цепных правил с помощью функции:

Lex-программа состоит из следующих частей:

Одна из первых задач, возникающих в процессе компиляции - это:

Для настройки хэш-таблицы на необходимый тип данных нужно реализовать методы:

Методиками разработки компиляторов являются следующие:

Какие фазы иногда объединяют вместе под названием front-end?

В задачу анализа потока управления входит определение свойств:

Следующая процедура:
int Factor (){   char ch = getChar();   if (isDigit (ch)) return getValue(ch);   if (ch == '(')    {      int result = Formula ();      if (getChar() == ')') return result;      error ("Неожиданный символ");      return 0;   }   return error ("Неожиданный символ"); }
вычисляет значение:

Низкоуровневые формализмы записи промежуточного представления программы, приближающие программу к объектному коду - это:

В .NET все сервисы, предоставляемые программисту платформой, оформлены в виде:

MSIL, является:

Задача, решение которой необходимо для проверки правильности использования типов:

LL-грамматики обладают следующими свойствами:

Выходом YACC могут быть файлы:

Для построения более сложных типов из примитивных обычно используются следующие конструкторы:

Эквивалентность типов бывает:

Трансляторы бывают следующих типов:

LR(1)-ситуация состоит из:

В большинстве языков программирования имеются следующие лексические классы:

Использование какой связки позволяет заметно повысить скорость выполнения исходной программы:

Какие противоположные полюсы существует у проблемы утилизации мусора:

Для деревянной грамматики, у которой в правой части правил находятся образцы произвольного вида, существует:

В каком году Шорром и Уэйтом был предложен алгоритм с обращением указателей?

Необходимо различать:

Входной файл lburg поделен на следующие секции:

Полезность применения оптимизации обусловлена следующими причинами:

Разметку Us назовем неподвижной точкой отображения функции перехода F тогда и только тогда, когда:

Живые переменные - это:

Когда появилась платформа .NET?

При создании .NET основной упор был сделан на следующие языки:

Извлечение из MSIL исходных текстов путем дизассемблированя вряд ли имеет смысл, так как имена локальных переменных, констант и параметров сохраняются только:

В единой объектно-ориентированная модель классов .NET которой все классы унаследованы от:

Для того чтобы сборки действительно были независимыми от системы и от других сборок, необходимо, чтобы они сопровождались явным описанием:

Манифест: описание сборки позволяет:

Моделями обеспечения безопасности в .NET являются:

В Common Type System все типы делятся на следующие категории:

Типы данных, напрямую поддержанные компилятором и допускающие определенные сокращения записи - это:

Для типа-значения верно:

В ходе распаковки проверяется, что исходная ссылочная переменная:

Языки программирования C# или Visual Basic.NET, поддерживают операции упаковки и распаковки:

Для языка C# верны следующие утверждения:

C# поддерживает структурную обработку исключений с помощью конструкций:

В C# имеются следующие модификаторы:

Корректными примерами конструкторов являются следующие:

Данный пример:
private int m_stateOfVeryCriticalResource;public int stateOfVeryCriticalResource {  get { if (IsAllowedUser())            return m_stateOfVeryCriticalResource; }  set { if (IsAdmin())            m_stateOfVeryCriticalResource = value; }}...stateOfVeryCriticalResource = vcrCompletelyScrewedUp;
позволяет проверить достаточность полномочий запрашивающего приложения:

Для реализации модели "публикация/подписка" в C# используются:

Для params верно:

В C# механизм условной компиляции, основан на директивах:

С помощью какого атрибута в данном примере:
using System.Runtime.InteropServices;public class AppMain {  [DllImport("user32.dll")]  public static extern int MessageBoxA(int handle, string message,    string caption,int flags);  public static void Main(){    MessageBoxA(0,"Hello World","Native Message Box",0);  }  [conditional("DEBUG")]   public static void SayHello() {     Console.WriteLine("Hello, World!"); return;   }}
обеспечивается взаимодействие с функцией MessageBoxA из Win32 API:

Для того, чтобы определить собственные, пользовательские атрибуты достаточно создать класс, унаследованный от:

Какие механизмы реализованы в C#:

Язык Cи-бемоль был разработан:

Какая часть компилятора разбивает исходную программу на составляющие ее элементы и создает промежуточное представление исходной программы:

Можно сказать, что результатом работы интерпретатора является:

Создание единого перемещаемого объектного сегмента из набора различных сегментов осуществляется программой, которая называется:

Для представления компилятора мы можем использовать так называемые:

Под переносимой (portable) программой понимается программа, которая:

Компиляторы языка Java генерируют:

Процесс создания компилятора можно свести к решению нескольких задач, которые принято называть:

В разборе входной цепочки и выделении некоторых более "крупных" единиц, которые удобнее для последующего разбора заключается задача:

В дереве разбора программы внутренние узлы соответствуют:

Наиболее распространенными оптимизациями являются:

Backpatching - это:

Идея создания некоторого обобщенного алгоритма, проверяющего за конечное число шагов принадлежность данной цепочки языку является альтернативой:

В формальном определении грамматики нетерминалы обозначаются:

Различные грамматики могут порождать:

Иерархия Хомского - это классификация грамматик согласно:

В качестве примеров распознавателей можно назвать:

Основная часть конечного автомата - это:

Два детерминированных автомата называются эквивалентными, если они:

Следующий алгоритм: удаление всех недостижимые состояния, разбивка множества всех достижимых состояний на классы эквивалентности неразличимых состояний, из каждого класса эквивалентности берется только по одному представителю - это:

Класс языков, задаваемых праволинейными грамматиками, очень удобен в задачах:

На каждом шаге работы МП-автомат может либо:

Форма Бэкуса-Наура был разработана для описания:

При определении синтаксиса языков Pascal и Modula-2 Вирт использовал расширенную форму Бэкуса-Наура (EBNF):

Во время лексического анализа программа разбивается на:

В следующем операторе языка Pascalconst pi = 3.1416;"pi" представляет лексический класс:

Основной тенденцией современных языков программирования является:

Если определен тип, соответствующий указателю в эту таблицу - ReprInd, и тип, служащий для представления позиции в исходном файле - FilePos, то можно полностью определить лексему следующим образом:

Какой специальный класс содержит система классов .NET, с помощью которого легко реализовать функциональность хэш-таблиц:

На практике чаще используется эквивалентный праволинейным грамматикам механизм:

По имеющемуся регулярному выражению легко написать:

В Lex действия, связанные с реакцией на встреченные регулярные выражения, пишутся непосредственно на:

В Lex-программе секция описаний включает:

В регулярных выражениях в Lex-программе специальные символы записываются после префикса:

В Lex'е вернуть последние n символов цепочки обратно во входной поток можно с помощью:

При лексическом анализе программ на C# после прочтения символа > необходимо прочитать:

Компиляторы, разработанные на базе грамматик:

Анализаторы реально используемых языков обычно имеют:

Дерево разбора и таблицы - это:

В узлах синтаксического дерева корнем являются:

От корня к листьям узлы синтаксического дерева строятся:

С восходящими анализаторами связаны:

К простейшим формулам можно отнести:

Обрабатывать формулы, содержащие операции типа умножения будет процедура:

Обрабатывать формулы, содержащие операции типа сложения будет процедура:

Метод getChar:

Для данной грамматики:
S -> B AA -> +B A A -> eB -> D CC -> * D C C -> eD -> (S) D -> a
множества FIRST определяются следующим образом:

Данная грамматика:
E -> T | TE'E' -> +T | +TE'T  -> F | FT'T'-> *F | *FT'F -> (E) | num
обладает свойством:

Процесс построения дерева разбора, начиная с листьев и двигаясь вверх к корню дерева разбора может быть представлен как:

При LR(k)-анализе применяется метод:

Управляющая программа:

Функция goto получает:

Данная ситуация:
[S'->.S][S-gt;.x][S-gt;.(L)]
определяет состояние:

Данная ситуация:[S->x.]определяет состояние:

В данном примере:
goto (I, X) {   J={};         for (каждой ситуации [A->w.Xv] из I) {      J+=[A->wX.v];   }   return closure (J);}
происходит:

Алгоритм построения управляющей таблицы автомата состоит из следующих шагов:

При пополнении какой грамматики правилом S' -> Sможно получить следующие состояния:
0: {[S'-gt;.S, $], [S-gt;.AA, $], [A-gt;.aA, a], [A-gt;.aA, b], [A-gt;.b, a], [A-gt;.b, b]}1: {[S'-gt;S., $]}2: {[S'-gt;A.A, $], A-gt;.aA, $], [A-gt;.b, $]}3: {[A-gt;a.A, a], [A-gt;a.A, b], [A-gt;.a.A, a], [A-gt;.a.A, b], [A-gt;.b, a], [A-gt;.b, b]}4: {[A-gt;b., a], [A-gt;b., b]}5: {[S-gt;AA. $]}6: {[A-gt;a.A, $], [A-gt;.aA, $], [A-gt;.b, $]}7:  {[A-gt;b., $]}8:  {[A-gt;aA.,a], [A-gt;aA.,b]}9:  {[A-gt;aA.,$]}
:

Неоднозначность грамматики приводит:

Конфликт перенос-свертка может быть решен следующими методами:

В процессе разбора входной цепочки id (id, id), при содержимом стека - $ id (id, необработанная часть представляет собой:

Генератор анализаторов YACC был создан для следующих операционных систем:

Входом программы YACC является:

Какой из следующих файлов создается при задании параметра -h, - описания, которые также генерирует YACC:

Описания переменных языка C в файле name.y заключаются в:

Объявлением нетерминальных символов грамматики являются:

В секции правил грамматики литерал может состоять:

Какая литера может использоваться для объединения всех правил в одно, если имеется несколько грамматических правил с одинаковой левой частью:

Данное правило:
A: B { $$ = 1; }     C { x = $2; y = $3; }    ;
эквивалентно следующему:

Какая из процедур реализует лексический анализ и возвращает лексический класс лексемы:

Данная функция:
int yylex (void){int ch;while ((ch = getchar ()) == ' ');if (isdigit (ch)){ungetc (ch, stdin); scanf (%i, &yylval);return NUMBER_LC;}return ch;}
вычисляет следующую пару значений:

Лексический анализатор в следующем контексте:fi (x == y) { ... }:

60% ошибок в программе - это:

Каждое вхождение идентификатора в программу является либо:

Если все определяющие вхождения идентификаторов должны быть расположены текстуально перед использующими вхождениями, то:

Элемент таблицы идентификаторов можно организовать так:

При занесении информации об идентификаторе в таблицу идентификаторов синтаксическим анализатором, происходят следующие действия:

Примитивными типами являются:

Конструктор struct применяется к кортежу пар:

Использование dag'ов более предпочтительно, чем деревьев, поскольку в этом случае происходит:

Можно выделить следующие виды контроля типов:

Если контроль типов производится во время исполнения объектной программы, то - это:

Подход, в котором один входной язык проецируется сразу на множество целевых платформ с помощью единого промежуточного языка называется:

На компилятор языка программирования возлагается ответственность:

Основными фазами работы с памятью являются:

Данный пример:
void* p = malloc (32000);  p = q;
иллюстрирует:

В языке C используется следующая методика управления памятью:

Что помогло неявному управлению памятью возвратить себе позиции среди практических языков программирования:

Перемещение указателя стека - это:

В Фортране вся память может быть выделена статически и во время выполнения программы будут меняться только значения простых переменных и элементы массива, а для этого каждая функция транслируется:

Для стекового управления память верны следующие утверждения:

Невозможно гарантировать последовательность выходов из процедур и потому чисто стековый механизм управления памятью недостаточен:

Самый простой способ отслеживания свободной памяти заключается в приписывании:

Основными механизмом работы с памятью в .NET являются:

Эффективность оптимизации зависит от:

В зависимости от уровня представления программы различают следующие виды оптимизации:

Преобразования T1 и T2 называются независимыми, если применение одного из них к программе:

Стадиями оптимизации являются:

Одним из самых простых видов оптимизаций является:

Пара конечных множеств (V, E), называемых соответственно множествами вершин и дуг, при этом множество дуг представляет собой совокупность пар вершин - это:

В качестве алфавита операторов данной программы:
int F (int a, int b){  int g = a, m = b;  if (a < b) {g = b; m = a;}  while (m)   {    int s = g;    g = m;    m = s % m;  }  return g;}
выступает следующее множество:

Для формализации удаления пустого оператора требуется представление программы в виде:

В данном примере:
	jne	.L1	movl	buffer, %eax	jmp	.L3.L1:	jmp	.L2	jne	.L2	movl	buffer, %eax	jmp	.L3
происходит:

При чистке циклов вниз, выходной вершиной является такая вершина, среди непосредственных преемников которой есть вершина:

Границы, переменная и инкремент циклов должны быть одинаковыми, что является контекстным условием корректности:

Если среди всех вычисляемых на участке экономии выражений выделяются эквивалентные, и затем их вхождения заменяются на вхождение новой переменной, хранящей заранее вычисленное значение этого общего выражения, то это:

Анализ потока управления производится над:

Последовательность вершин, такая, что между каждой последующей и предыдущей вершиной в графе существует ребро - это:

Отношение обязательного предшествования:

Взаимно однозначное отображение множества вершин графа на отрезок натурального ряда [1..|V|] называется:

Дуги, чье начало достижимо из конца в остовном дереве называются:

Состояние вершины, когда вершина еще рассматривается алгоритмом обозначается:

Произвольный подграф графа управления называется:

Свойства альтов дают возможность использовать их для определения:

Сильно связный подграф - это:

Для выделения сильно связных подграфов, достаточно научиться:

Иерархия вложенных зон - это один из способов:

В случае, когда выражение в правой части не имеет побочных эффектов, а переменная в левой части более нигде не используется, данный оператор становится:

Идея анализа потока управления заключается в следующем:

С помощью какого способа можно решать задачи анализа потоков данных?

Для каждого вхождения переменной требуется определить множество присваиваний, такое, что для каждого из них существует путь, в котором между ним и данным вхождением отсутствуют другие присваивания той же переменной - так формулируется задача:

Анализ потоков данных состоит из следующих стадий:

Набор потоковых утверждений - это:

Основной проблемой разметки и потоковых функции является:

Если L - ограниченная полурешетка конечной высоты, f - монотонная функция, то тогда можно показать что:

Если фактически разметка before ассоциируется с входящими ребрами вершины, а разметка after - с исходящими, то такая задача называется:

В качестве полурешетки потоковых фактов фиксируется:

Итеративный подход дает:

В MSIL существуют следующие варианты хранения переменных:

Локальная память выделяется:

Машина MSIL ориентирована на безопасность работы:

В безопасном режиме указатели на локальные переменные могут быть только:

Какая команда MSIL осуществляет загрузку адреса поля объекта:

Команды stloc, stfld, stsfld эквивалентны следующим парам команд:

К командам целочисленной арифметики относятся:

Если команда вызова снабжена префиксом tail, то это означает, что значение, возвращаемое вызываемой процедурой, является также:

Классы с каким суффиксом предназначены для генерации описываемых сущностей?

Данная программа:
class LowLevelSample {    public static void Run() {	int i;	i = 0;	try {	   Start:             if (i == 10) throw new Exception();             Console.WriteLine (i);             i = i + 1;             goto Start;	}	catch (Exception) {           Console.WriteLine ("Finished");	}    }}
может использоваться в качестве примера:

Какой метод по массиву, содержащему типы параметров конструктора, находит в типе соответствующий конструктор:

Выбор инструкций - это:

Через root(t) обозначается:

Одним из способов задания деревянных языков являются:

Тривиальное дерево, состоящее из одной вершины, является:

Образцом в данной последовательности троек:(p1,v1,R1),(p2,v2,R2),…,(pk,vk,Rk)будет:

Две грамматики назовем эквивалентными, если совпадают:

Дерево t выводится в грамматике G=(A,N,S,R) тогда и только тогда, когда:

Деревянные грамматики представляются естественным выбором как механизм описания выбора команд, поскольку являются:

Поскольку системы команд предоставляют большое разнообразие способов вычислений, ожидается, что:

Стоимость вывода аддитивна относительно:

Действия на каком шаге позволяют от исходного размеченного дерева перейти к дереву, в котором вершины уже соответствуют машинным инструкциям, но их операнды еще известны не полностью:

Для того, чтобы увеличить скорость работы приложений, была разработана технология:

LR(k) означает, что:

Файл со спецификациями name.y должен быть устроен следующим образом:

Метод рекурсивного спуска без возвратов можно использовать только для:

Фрагменты программ на языке С, заключенные в фигурные скобки - это:

Следующий набросок программы:
q = q0;c = GetChar();while (c != eof) {  q = move (q, c);  c = GetChar();}if (q is in F) return "yes";else return "no"; 
демонстрирует (предполагается, что входная лента заканчивается символом end_of_file):

Атрибутное дерево разбора является, самой распространенной формой организации:

В последнее время в развитии языков программирования наблюдается полный или частичный отказ от предоставления программисту:

Процесс обработки всего, возможно, уже преобразованного, текста исходной программы называется:

Компиляторы генерирующие объектную программу на языке более высокого уровня, чем язык ассемблера называют:

Фазами управления памятью являются:

В следующем операторе языка Pascalconst pi = 3.1416;";" представляет лексический класс:

Задачи проверки сводимости и построения статической формы единственного присваивания могут быть решены с помощью:

Отношение обязательного предшествования обозначается символом:

Глубинное остовное дерево - это:

В данном примере:
public static void Main() {  Int32 v = 5;  Object o = v;  v = 123;  Console.WriteLine (v + ", " + (Int32) o);}
операция упаковки производится:

Управление памятью с точки зрения компилятора существенно ограничено возможностями:

В случае наличия вложенных блоков их рекомендуется ограничивать вызовами:

Куча предназначена для хранения:

Определяющим вхождением идентификатора является:

Если оператор языка ассемблера отображается при трансляции чаще всего в одну машинную инструкцию, предложения языков более высокого уровня отображаются

Символы входной цепочки переносятся в магазин до тех пор, пока на вершине магазина не накопится цепочка, совпадающая с правой частью какого-нибудь из правил:

В .NET единая модель объектов распространяется сразу на:

Общие сборки сопровождаются номером версии в следующем формате:

Какие команды MSIL реализуют функциональность упаковки и распаковки значений:

Дуги, чей конец достижим из начала в остовном дереве называются:

В регулярных выражениях в Lex-программе допустимы следующие способы кодирования символа а:

В данном примере:
void DumpHrefs(String inputString) {   Regex r;   Match m;   r = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",        RegexOptions.IgnoreCase|RegexOptions.Compiled);   for (m = r.Match(inputString); m.Success; m = m.NextMatch())   {     Console.WriteLine("Found href " + m.Groups[1] + " at "     + m.Groups[1].Index);   } } 
класс Regex:

Большинство методов анализа принадлежит к следующим классам:

Для изучения сгенерированного MSIL-кода можно использовать утилиту:

Крайне важной частью процесса трансляции является:

Сколько атрибутов обычно имеет лексема:

Во время трансляции в .NET промежуточное представление не интерпретируется, а вместо этого используется механизм::

Существуют следующие версии MSIL:

Основные сервисы .NET сосредоточены в пространстве имен:

Полный набор примитивных типов .NET поддерживает:

При создании ссылочные типы инициализируются значением:

Процесс преобразования типа-значения в ссылочный тип называется:

При недостаточном понимании происходящих "за кадром" процессов операции упаковки и распаковки, прозрачных для программиста, может потерять:

Fall-through в C# - это:

В C# значениям переменных булевского типа:

Модификаторами класса в C# являются:

При таком описании класса:
public class Matrix {	public const int n = 10;	public int[,] elements = new int[n,n];	public int this[int i, int j]	{		get { return elements[i,j]; }		set { elements[i,j] = value; }	}}
допустимо следующее использование:

Какая операция используется для того, чтобы сократить и привести к привычному виду запись операций над объектами, определенными программистом?

В данном случае:int v2 = v1; происходит:

Из привычного набора макросов в препроцесоре C# оставлены следующие:

Для написания опасного кода необходимо пометить метод или блок ключевым словом:

Отключить контроль переполнения можно с помощью ключевого слова:

Подход при котором применяется трансляция программы в ассемблер:

В каком году Вирт написал с использованием раскрутки транслятор языка Pascal:

Одна из первых широко известных виртуальных машин была разработана в 70-х годах Н. Виртом:

После синтаксического анализа можно считать, что исходная программа преобразована:

Грамматики представляют собой:

В конечных автоматах цепочка считается принадлежащей языку, если хотя бы одна из последовательностей шагов:

Удобная форма записи конечных автоматов – это:

МП-автоматы обладают одним существенным недостатком:

Синтаксические диаграммы или синтаксические схемы имеют форму:

Множество лексем разбивается:

Спецификации лексического анализатора на языке Lex подготавливаются в виде программы:

Общая схема работы Lex заключается в преобразовании Lex-программы:

В .NET использовать механизм регулярных выражений можно с помощью следующих клссов:

Синтаксический анализатор обращается к лексическому анализатору каждый раз, когда у него появляется потребность:

В узлах синтаксического дерева листьями являются:

Одним из наиболее популярных методов нисходящего синтаксического анализа является:

К формулам, содержащим операции типа умножения можно отнести:

Метод returnChar:

Грамматика называется леворекурсивной, если среди ее нетерминалов имеется по крайней мере один:

Синтаксический разбор в демонстрационном компиляторе Си-бимоль реализован с помощью:

Предназначен для построения дерева разбора, начиная с листьев и двигаясь вверх к корню дерева разбора:

Комбинация символа состояния на вершине магазина и текущего входного символа используется:

Входная цепочка может начинаться с любого:

Данная ситуация:[S'->S.$]определяет состояние:

Поскольку для символа $ операция goto (I, $) не определена, можно выполнить:

Сколько символов входной цепочки использует для принятия решения LR(1)-анализатор:

LALR анализатор имеет значительное преимущество в размере таблиц по сравнению с:

При анализе строки 1+2+3 (содержимое стека - $E+) необработанная часть входной цепочки будет представлять собой:

На вход YACC получает файл со спецификациями, который должен иметь расширение:

Какой из следующих файлов содержит сгенерированную YACC'ом программу анализатора:

В файле name.y секция описаний содержит:

Для того, чтобы нетерминал мог иметь значение некоторого типа, который указан в объединении, определенном в секции объявлений, он должен быть объявлен следующим образом:

Какая из секций является необязательной:

Для того, чтобы получить управляющую таблицу анализатора достаточно запустить программу YACC с ключом:

Обычно, фазы оптимизации и генерации:

Error-правила в YACC'е имеет один из следующих видов:

Таблица идентификаторов содержит:

В программе следующей структуры:{int n; …; n++; .. {float n; … n = 3.14; … } …n--; … }после входа во внутренний блок будет добавлен еще один элемент:

Функция, определенная как:function f (a, b: char) : ^integer;имеет тип:

Если два типа структурно эквивалентны тогда и только тогда, когда они идентичны, то - это:

Преобразование, при котором программист должен написать что-нибудь для того, чтобы это преобразование было выполнено называется:

Освобождение ресурсов, ассоциированных с какими-либо внешними сущностями, обычно требует:

Примерами различных путей доступа к структуре являются:

Информация, известная во время компиляции - это:

Недостатком неявного управления памятью является:

Можно выделить следующие основные методы управления памятью:

Для статического управления памятью верны следующие утверждения:

Блок памяти, части которого выделяются и освобождаются способом, не подчиняющимся какой-либо структуре - это:

Самая сложная часть управления кучей - это:

Применение оптимизаций способствует:

Выделение некоторого участка программы, к которому может быть применено преобразование - это:

Задачу фрагментации решает:

Программу для оптимизации удобно представлять в виде:

При формализации удаления пустого оператора вершина графа, помеченная пустым оператором:

Для проведения чистки циклов вверх необходима фрагментация программы на уровне:

Раскрутка циклов заключается в дублировании:

Любая вершина обязательно предшествует:

Дерево, содержащее все вершины графа и некоторые его дуги:

Для определения типа дуги используется:

Каждая обратная дуга определяет в графе потока управления:

Множество максимальных лучей образует:

Набор областей всех вершин при нумерации Post является:

Стягивание линейных компонент переводит граф:

Задачей анализа потоков данных является:

В данном примере:
struct S {int a; int b};int F (int n, struct S * v){int i, s = 0;for (i=0; i<n; i++){	int q = (v+i)->a - (v+i)->b; --- 1	if (q < 0) s += (v+i)->a + (v+i)->>b;  --- 2else (v+i)->b = q;(v+i)->a = (v+i)->b;   --- 3}return s;}
эквивалентны следующие вхождения выражения (v+i)->b:

В учете влияния отдельного оператора в предположении, что уже имеется решение задачи анализа потоков данных перед этим оператором заключается:

На какой стадии анализа потоков данных, происходит решение задачи анализа для каждого пути, ведущего в данную вершину и затем выделение общей части всех таких решений:

Разметка представляет собой некоторый:

Дистрибутивная функция всегда:

Трансляторы, ориентированные на платформу .NET, должны генерировать код:

Статическая область памяти предназначена:

В .NET SDK входит программа PEVerify, которая осуществляет:

Какая команда MSIL осуществляет загрузку адреса статического поля:

Команды целочисленной арифметики существуют в:

Структура MSIL задает определенную последовательность генерации кода, в которой код генерируется в во время следующих проходов:

Для решения задачи построения генератора кода применяется теория:

Деревянные языки позволяют описать:

Деревянная грамматика в нормальной форме - это четверка, содержащая:

В деревянном образце нетерминалами могут быть помечены:

Правила грамматики в нормальной форме содержат в правой части:

Любая деревянная грамматика может быть приведена к эквивалентной:

Для представления множества выводов можно построить разметку C, которая вершине дерева v и нетерминалу K сопоставляет:

BURS позволяет построить алгоритм выбора инструкций, который:

В грамматиках восходящего переписывания каждое правило описывает либо:

Построение замыкания по цепным правилам аналогично:

Извлечение оптимального вывода из разметки - это:

При описании программ с использованием потока управления, два слова в алфавите операторов объявляются эквивалентными в том и только том случае, когда:

Компонента сильной связности, являющееся областью своей вершины, имеющей минимальный номер в нумерации Post среди всех остальных вершин этой компоненты называется:

Все имена и литералы, содержащиеся в правой части правила нумеруются:

Команда stind берет со стека адрес значения вместе с самим значением:

Общая семантика присваивания заключается в вычислении выражения, стоящего:

К способам представления типов можно отнести:

В C# есть специальное ключевое слово params, которое позволяет:

Имеется следующая входная цепочка: if E1 then if E2 then S1 else S2, при содержимом стека - $ if E1 then if E2 then S1 необработанной частью входной цепочки является:

При использовании def-use chains отображение DU описывает, как:

Какие особенности некоторых языков могут существенно затруднять лексический анализ:

Основное употребление анализа потока управления в оптимизации - это:

В нормальной форме Грейбах все правые части правил начинаются:

Следующие шаги, необходимы для решения задачи анализа потока данных с помощью итеративного подхода:

Чтобы проверить применимость правила для текущей вершины, проверяется соответствие этой вершины образцу в правой части правила - для этого используется функция:

С точки зрения эффективности наиболее предпочтительной является:

В данном примере:
using System; public delegate void EventHandler (string strText);class EventSource {  public event EventHandler TextOut;  public void TriggerEvent() {     if (TextOut != null) TextOut("Event triggered..."); }}class TestApp {  public static void Main() {    EventSource evsrc = new EventSource();    evsrc.TextOut += new EventHandler(CatchEvent);  evsrc.TriggerEvent();    evsrc.TextOut -= new EventHandler(CatchEvent);  evsrc.TriggerEvent();    TestApp theApp = new TestApp();    evsrc.TextOut += new EventHandler(theApp.InstanceCatch);     evsrc.TriggerEvent();  }public static void CatchEvent(string strText) { WriteLine(strText); }public void InstanceCatch(string strText) { WriteLine("Instance "+strText); }
происходят:

Программы на MSIL переводятся в исполняемый код реального процессора c помощью:

MSIL содержит следующие команды для обработки исключений:

Пустое множество и множество, состоящее только из пустой строки, являются:

С помощью какого механизма в .NET происходит обработка ошибок?

Причиной появления понятия сборки можно считать:

Типами проверок безопасности в .NET являются:

Какие типы данных являются основными в системе типов данных .NET:

Все ссылочные типы произведены от базового типа object, являющегося точным эквивалентом класса:

Ссылочными типами в C# являются:

Все активные действия программ на C# выполняются:

Проверку допустимости присваиваемого значения можно провести с помощью следующего кода:

Информация, записанная в пользовательских атрибутах, может быть использована во время исполнения программы с помощью:

Из управляющих конструкций в языке Cи-бемоль допускаются:

Написание компилятора может потребоваться в следующих условиях:

Для того, чтобы справиться с проблемой большой потери времени при написании и отладке компилятора на языке ассемблера был разработан:

На этапе лексического анализа обычно выполняются такие действия, как:

Обязательность описания переменных может служить примером:

Определение грамматик не накладывает никаких ограничений на количество:

Обобщенный алгоритм, позволяющий определить некоторое множество и использующий в своей работе следующие компоненты: входную ленту, управляющее устройство с конечной памятью и дополнительную рабочую память - это:

Язык распознается конечным автоматом, если:

Классы языков, определяемых праволинейной грамматикой являются:

Следующее правило:
REF to MODE NEST assignation: REF to MODE NEST destination, becomes token, MODE NEST source.
определяет:

Простейший вид таблицы представлений – это:

Для любых регулярных выражений P и Q следующие множества также являются регулярными выражениями:

Lex, состоит из:

В Lex-программе функция yywrap() определяет:

В Lex'е указателем на отождествленную цепочку символов, оканчивающуюся нулем является:

Если программа выводима в грамматике, это еще не означает, что она полностью:

С помощью каких грамматик можно определить большинство использующихся в настоящее время языков программирования?

YACC - это имя генератора в операционной системе UNIX, в остальных операционных системах программа называется:

Секция грамматических правил, состоит из правил, которые записываются следующим образом:

Backslash в секции правил грамматики используется:

Нельзя убедиться в правильности использования типов в какой-нибудь конструкции до тех пор, пока не определены:

Чтобы выяснить, каков тип идентификатора, являющегося, получателем присваивания, надо понять:

Таблица внешних представлений содержит:

Если контроль типов осуществляется во время трансляции программы, то - это:

Управление памятью при разработке компилятора является вопросом одновременно:

Необходимо различать:

Какие языки разрешают описание массивов с границей, неизвестной во время компиляции:

В сложных языках программирования для распределения памяти приходится отталкиваться от значений, которые:

При использовании def-use chains необходимо, чтобы множества входов и выходов для разных операторов:

При глобалной оптимизации данного фрагмента исходной программы:
y = f(x);a = y*2;if (y == f(x)) z = y*2+a;else z = f(x)*2+a;t = f(x)*2+a+z;
возможной остаточной программой будет:

Множества входных и начальных вершин для компонент сильной связности:

Признаком чего является то, что вершина со следующим номером - во-первых, является бивершиной, а во-вторых, ее номер - максимальный среди номеров всех потомков вершин текущей линейной компоненты:

Процесс решения задачи анализа потоков данных может быть описан как:

Если функция сохраняет отношение порядка, то она называется:

Если функция является гомоморфизмом относительно полурешеточной операции, то она называется:

Полурешетка конечной высоты L, представляет собой:

В MSIL существуют следующие команды вызова:

Следующая программа:
using System;class Fib{   public static void Main (String[] args)   {      int a = 1, b = 1;      for (int i = 1; i != 10; ++i)      {         Console.WriteLine (a);         int c = a + b;         a = b; b = c;      }   }}
вычисляет:

Атрибут RunAndSave означает, что:

Пусть задана грамматика G=(A,N,S,R) и дерево t. Индукцией по числу шагов можно доказать, что приведенный алгоритм действительно:

BURS на сегодняшний день являются одним из наиболее распространенных способов описания:

В системе восходящего переписывания деревьев язык интерпретируется как:

Большинство средств для создания лексических анализаторов основывается:

При реализации языков со вложенными процедурами и процедурными значениями, необходимо обеспечить доступ:

К упрощениям выражений можно отнести:

Какой метод завершает генерацию try-catch блока:

Атрибуты в C# представляют собой:

Возможны следующие зависимости между оптимизирующими преобразованиями:

Если язык допускает использование вложенных процедур в качестве переменных процедурного типа, то единственным способом для реализации такого механизма в безопасном режиме является:

Детерминированные МП-автоматы описывают только подмножество всего класса КС-языков - это подмножество называется:

К проблемам управления пмятью можно отнести:

Основным способом представления потока управления программы является:

Основными чертами архитекутры виртуальной машины MSIL являются:

Объектная программа может быть:

Каждая сборка имеет уникальное имя, которое состоит из следующих частей:

Для интерпретатора верны следующие утверждения:

Несмотря на эквивалентность определяемых языков, одна грамматика может быть значительно удобнее другой с точки зрения ее использования:

Согласно иерархии Хомского, если любое правило из P имеет вид A->xB или A->x, где A, B - нетерминалы, а x - терминал, то грамматика G называется:

Если мы предположим, что начальные состояния конечных автоматов эквивалентны, то мы можем получить:

Процесс, который определяет, принадлежит ли некоторая последовательность лексем языку, порождаемому грамматикой называется:

Параметром процедуры Expression является:

Леворекурсивные грамматики не обладают свойством:

Конфликт перенос-перенос возникает, когда на вершине стека анализатора возникает строка терминалов, к которой:

Генератор анализаторов YACC был разработан:

Примером определения типов, значения которых возвращаются как значения семантик является:

Какой способ кодирования типов был использован в компиляторе C, разработанном Ричи (D.M.Ritchie)?

Промежуточный язык можно воспринимать как интерфейс между:

Исследования показали, что для большинства программ верны следующие предположения:

Последовательность эквивалентных преобразований исходной программы, уменьшающих ее стоимость - это:

При описании программ с использованием потока управления необходимо, чтобы разметка графа потока управления сопоставляла пустой оператор только тем вершинам, для которых число исходящих дуг:

В данном примере:
	jmp	.L1.L1:	movl	buffer, %eax	addl	%edx, %eax		movl	buffer, %eax	addl	%edx, %eax
происходит:

Для правильного учета контекста необходимо учесть влияние всех путей до данной вершины, сначала определив влияние каждого пути, а затем:

При наличии контуров множество всех путей в графе управления становится:

К классическим задачам анализа потоков данных можно отнести:

Cледующим свойством: существует путь через данную вершину, начинающийся присваиванием данной переменной и кончающийся ее использованием, не содержащий иных присваиваний той же переменной - обладают:

Для определения завершаемости алгоритма используется принцип:

Достижимые определения являются:

Какая команда MSIL осуществляет загрузку константы:

В задачу выбора инструкций входит:

Выписыванием пометок вершин при простом обходе дерева слева-направо и сверху-вниз можно получить:

Для определения операции подстановки, в одном из двух деревьев выбирается лист, который затем:

В отличие от обычных контекстно-свободных грамматик, в деревянной грамматике в правой части правила находится:

Данная грамматика:
G=(A, N, Expr, R)A={‘+’, ‘-’, const, var}N={Expr, Opnd}R={Opnd: const,				Opnd: var,				Expr: Opnd				Expr: ‘+’ (Expr, Expr),			Expr: ‘-’ (Expr)				}
порождает деревья выражений из:

Упрощение языка C# выразилось в:

Отношение непосредственного предшествования - это:

При итеративном перевычислении разметок с использованием рабочего списока вершин - опустошение списка свидетельствует о том, что:

Из типов данных язык Cи-бемоль поддерживает следующие:

Цепочка символов, составляющая исходную программу на языке программирования является:

Сегодня идея виртуальных машин приобрела широкую известность благодаря языку:

Видозависимый анализ иногда называют:

Путем задания некоторого множества допустимых заключительных состояний распознавателя определяется:

Процесс замены идентификаторов на ссылку в таблицу представлений называется:

Следующая грамматика регулярного выражения:<p><p> в Lex-программе обозначает:

Данная ситуация:
[S->(.L)][L->.L, S][L->.S][S->.(L)][S->.x]
определяет состояние:

Для данной грамматики:
(1)	E->T(2)	E->T(3)	T->T*F(4)	T->F(5)	F-> (E)(6)	F->id
si - это:

В данной грамматике:E –> id | num | E* E | E + E операции сложения и умножения выполняются:

В следующем правиле (секция грамматических правил файла name.y):A: production_body;именем нетерминала является:

Чтобы выяснить правильность оператора присваивания надо знать:

Использующим вхождением идентификатора является:

В программе следующей структуры:{int n; …; n++; .. {float n; … n = 3.14; … } …n--; … }при входе во внешний блок:

Данная программа:
var in : integer;function Digits (integer n) : integer;var m : integer;begin  if n < 10 then return n  else begin    m := n div 10;    return n - m*10 + Digits (m);  end;end; begin  read (in);  writeln(Digits(in));end.
используется:

Для реализации покадровой оптимизации используют понятие:

Удаление мертвого кода заключается в удалении такого оператора, у которого:

На смысл каждой конструкции может оказывать влияние любая конструкция, из которой:

В выяснении, где именно устанавливаются значения того или иного вхождения данной переменной заключается:

Программы на MSIL переводятся в исполняемый код реального процессора:

Для загрузки значений на стек предназначены следующие команды MSIL:

Набор монотонных функций f1,f2,...,fk соответственно на полурешетках L1,L2,...,Lk индуцирует:

Присваивание указателей на локальные переменные в другие переменные:

Существует следующие типы дуг графа по отношению к данному глубинному остовному дереву:

Любая КС-грамматика может быть приведена к нормальному виду Хомского, в котором все правила имеют один из следующих видов:

Метод "перенос-свертка" использует:

Граф потока управления удовлетворяет следующим требованиям:

В C# объявить value type можно так:

В первом приближении сборка - это:

Преимуществами трансляции в ассамблер являются:

Обычно компилятор состоит из следующих фаз:

На этапе генерации кода необходимо решить множество следующих сопутствующих проблем:

Если существует, по крайней мере, одна выводимая в грамматике цепочка, для которой существует более одного вывода, то такая грамматика является:

Магазинные автоматы, известны также как:

Во время синтаксического анализа все идентификаторы можно считать:

Грамматики представляют собой мощный формализм:

Можно разделить все формулы на следующие классы:

Общий вид формулы, содержащей операции типа сложения:

В LL(k)-грамматике для любых двух левых выводов:
S =>* wAv => wuv =>* wxS =>* wAv => wu1v =>* wy
для которых FIRSTk (x) = FIRSTk (y)вытекает, что:

Какая операция добавляет ситуации к множеству ситуаций, у которых точка стоит слева от нетерминала:

Аксиому можно определить в секции объявлений так:

При использовании какого параметра программы YACC будет построен заголовочный файл с именем f:

Ошибки, которых в программе на самом деле нет, могут возникнуть в результате не совсем корректной работы транслятора после обнаружения какой-нибудь ошибки - это:

Правила, которые будут использоваться в случае ошибки называются:

Обработка определяющего вхождения идентификатора происходит:

Тип row строится из примитивных типов следующим образом:

Выражение (a+b)*(c-d) в польской записи может быть представлено как:

Где используется сборка мусора, как методика управления памятью:

Простые переменные, структуры и массивы фиксированного размера, составляют набор данных следующих языков:

В зависимости от размера фрагмента оптимизации различают следующие виды оптимизации:

Замена (в частных случаях) использования более дорогих операций более дешевыми - это:

Альтом называется:

Луч - это:

Поточечное распространение отношений равенства и порядка вводит:

В .NET предусмотрен специальный механизм доступа к метаданным приложения, который называется:

Деревянные грамматики лежат в основе:

В .NET исходные тексты программ компилируются в специальное промежуточное представление, которое называется:

В отличие от счетчиков ссылок, механизм разметки памяти не приводит:

Программа, которая строит LALR- анализаторы - это:

Согласно иерархии Хомского, если любое правило из P имеет вид A->a, где A - нетерминал, a - нетерминал или терминал то грамматика G называется:

В С# возможно определение:
string s = "Hello C#";
под которым подразумевается следующее присваивание:

В следующем примере:
ArrayList a = new ArrayList();for (int i=0; i < 10; i++) {  Point p;  p.x = p.y = i;  a.Add(p);}
мы добавляем тип-значение:

Классы в C# предоставляют следующие возможности:

Получение любого предложения языка в грамматике начинается с этого:

В Алголе 68 и Фортране, пробелы являются значащими только:

В Lex-программе регулярному выражению< соответствует следующий лексический класс:

Наиболее удобным формализмом для описания синтаксических конструкций языка программирования являются:

LR(0)-анализатор принимает решение о своих действиях только на основании содержимого магазина:

LR(0)-ситуации не должны содержать:

При кодировании типов с использованием битовых шкал <boolean> имеет значение:

Дуги, которые входят в состав остовного дерева - это:

Состояние вершины, когда вершина еще не рассматривалась алгоритмом обозначается:

Поскольку BURS-грамматика однозначна, каждый нетерминал может быть выведен:

В C# ссылочные типы можно создать так:

Как мы можем понять, что имеем дело с формулой, содержащей операции типа умножения?

LR(k)-анализатор состоит из:

Контроль типов осуществляется во время обхода:

Языками, пригодными для стекового управления памятью, являются:

Если преобразование T1 открывает дополнительные возможности для проведения преобразования T2, то - это:

В C# информация, записанная в атрибутах, во время компиляции:

В данном примере:
R = empty set;for (each state I in T){   for (each item [A->w.] in I)   {      R+={(I, A->w)};   }}
вычисляется:

Для препроцессор C# верны следующие утверждения:

Цель идентификации идентификаторов - это:

Поддерживает ли .NET удаленный вызов объектов?

Алгоритм выделения максимального альта, для которого данная вершина p является начальной, включает следующие шаги:

От листьев к корню узлы синтаксического дерева строятся:

В следующей грамматике:
S->aABeA->AbcA->bB->d
цепочка abbcde может быть свернута в аксиому следующим образом: