philosoff's.community.forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » philosoff's.community.forum » Учеба и ВМК. » Вопросы по СП


Вопросы по СП

Сообщений 31 страница 60 из 205

31

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

вопрос номер 9 Соотношения между типами языков.
Дано определение: Язык L(G) является языком типа К, если его можно описать грамматикой типа К и нельзя грамматикой типа К + 1

А дальше говорится, любой регулярный язык - КС-язык.

НО ВЕДЬ ЭТО ПРОТИВОРЕЧИТ! КС-язык - это язык, который НЕЛЬЗЯ описать грамматикой типа 3. А у нас регулярный язык, то есть можно. Так что дабы сохранить крупицу знаний, почерпнутую из Руденко, предлагаю изменить определение на: Язык L(G) является языком типа К, если его можно описать грамматикой типа К.

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

0

32

НО! Подчёркиваю, что до сих пор остаются неотвеченными следующие вопросы:

20. Объектная модель лексического анализатора. Схема его работы.
26. Объектная модель синтаксического анализатора.
34. Использование исключений С++ при обработке ошибок периода выполнения.
36. Принципы реализации виртуальных функций. (Лёхин ответ мне не понравился)

А до экзамена остальсь 1,5 дня. Если есть идеи, выкладывайте! Вместе что-нить наклепаем...

Сегодня на консультации все эти вопросы задавались. Но поскольку я слушал не очень внимательно, скажу только то, что запомнилось, мб Дима или Леха меня дополнят...

20 и 26 - по сути надо своими словами описать свои анализаторы, написанные в семестре, т.е. пишешь, что есть класс "лексема", есть класс "таблица лексем", класс "анализатор" и его основные методы... Вообще я сомневаюсь, что вопросы будут сформулированы таким образом, вроде об этом и лектора сегодня говорили... Каждый вопрос - это довольно широкий кусок знаний, вопросы будут более конкретно поставлены, каждый ответ будет умещаться в небольшой абзац рукописного текста...

Про 36 - по-моему сегодня было сказано практически то, что назвал Леха - про таблицу указателей на ф-ции, но я как-то прослушал конкретно этот вопрос...

Про обрабоку ошибок времени выполнения - ну видимо имеются в виду ошибки, могущие возникнуть при интерпертации ПОЛИЗа, что ли, правда какие это ошибки, хз... Тогда по сути надо сказать, что мы всю интерпертацию заворачиваем в try-блок, и делаем некую иерархию классов-exception'ов, позволяющих передать информацию об ошибке, скажем, ZeroDivideException (внутри него передавать информацию об адресе переменной, в которой был ноль (если это переменная конечно), в адресном пространстве нашей интерпретируемой программы, чтобы catch-блок по этому адресу мог вычислить и имя переменной), или InputException (если нам ввели строчку вместо числа, напрмер; внутри объектов этого класса можно передавать опять же адрес переменной, куда производилось чтение, и введенное значение); если в ПОЛИЗе с каждой лексемой хранить еще и номер строки исходного тескта, в которой она встречалась, то в родительский класс RuntimeException, от которого все эти наследуются, можно добавить поле line...

Замечу, что последний абзац - мое собственное видение процесса (кстати больше относится к теме "объектная модель интерпретатора"), а так вообще там можно до бесконечности распинаться, а вот что именно от нас хотят, я так и не понял

Отредактировано z-off (2007-06-05 17:03:20)

0

33

Дано определение: Язык L(G) является языком типа К, если его можно описать грамматикой типа К и нельзя грамматикой типа К + 1

А дальше говорится, любой регулярный язык - КС-язык.

НО ВЕДЬ ЭТО ПРОТИВОРЕЧИТ!

Вообще, это мелочь, но для чёткости предлагаю говорить не "любой регулярный язык - КС-язык", а "любой регулярный язык можно описать КС-грамматикой".  Тогда не надо менять определения.

0

34

тогда больше менять))) так так тогда меняется весь ответ на вопрос. Ведь он подразумевает соответствия ЯЗЫКОВ, а не какой язык какими грамматиками надо описывать. В общем, я себе сделал как в Руденко... вот...

0

35

тогда меняется весь ответ на вопрос. Ведь он подразумевает соответствия ЯЗЫКОВ, а не какой язык какими грамматиками надо описывать.

Тогда ты прав, признаю.  :)

0

36

объясните мне почему вот это:

Код:
c)	Слияние и развёртывание циклов.
Слияние:
for (i=1; i<=N; i++)  for (j=1; j<=M; j++)  a[i][j]=0;  =>
=>  K=m*N;  //(остаётся 1 цикл)
for (i=1; i<=k; i++)  a[i]=0;

можно делать. Ведь при двумерном массиве a[i] - это ссылки! Так какого *** мы им 0 присваиваем?

0

37

а ещё что такое:
1) технология two-ways-tool
2) Х-курсор

(это в текстовом редакторе ИСР)

0

38

Ведь при двумерном массиве a[i] - это ссылки! Так какого *** мы им 0 присваиваем?

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

class myclass1{
.........
int ar[10];
.........
// определяем для него operator =, заключающийся в присваивании чему-то определённого элемента массива  :)
.........
};

class myclass2{
.........
myclass1 array[10];
.........
// определяем operator[], относящий нас к определённому элементу типа myclass1
};

http://0bb.ru/uploads/philosoff/post-14-1142765790.gif

Отредактировано DiMan (2007-06-05 20:58:39)

0

39

а ещё что такое:
1) технология two-ways-tool
2) Х-курсор

STWF

1)
http://www.aptrio.com/Development/IDEs-Cod...gner-11357.html

Implemented as two-ways tool - generates directly Java code and enables to change it in graphical editor or directly in source. All changes, made directly in source code, will be displayed in the graphical designer.
Смысл примерно такой.
-------------------------------------
2)
http://www.kde.org/info/requirements/3.4.php
The X Cursor extension provides support colored and animated cursor themes.
Короче, анимированный умный мыш.  :)

0

40

Ну, в общем, что я вам хочу сказать. Я ещё не выучил, но проботал внимательно наш труд, исправил все опечатки, которые нашёл, вставил некоторые исправления, которые посчитал нужными. Так что можно печатать и ботать. Жалко, конечно, что нет ответов (конкретных) на те 4 вопроса, но... Обойдёмся и без них.

Up-to-date версию можно взять здесь:
sp_manual_by_204_community

0

41

Я думаю, после сессии можно это дело довести до ума: дописать эти 4 вопроса и переверстать всё с использованием стилей (а мне надо всё-таки научиться ими пользоваться  :) )...

Отредактировано DiMan (2007-06-05 21:02:56)

0

42

Ведь при двумерном массиве a[i] - это ссылки! Так какого *** мы им 0 присваиваем?

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

Гы, а всё можно сделать гораздо проще:

for (i=0; i<N; i++)  for (j=0; j<M; j++)  a[i][j]=0;  =>
=>  K=M*N;  //(остаётся 1 цикл)
for (i=0; i<K; i++)  a[i -(i mod M)*N] [i mod M]=0;
:lol:

Отредактировано DiMan (2007-06-05 21:35:39)

0

43

Про обрабоку ошибок времени выполнения - ну видимо имеются в виду ошибки, могущие возникнуть при интерпертации ПОЛИЗа, что ли, правда какие это ошибки, хз... Тогда по сути надо сказать, что мы всю интерпертацию заворачиваем в try-блок, и делаем некую иерархию классов-exception'ов, позволяющих передать информацию об ошибке, скажем, ZeroDivideException (внутри него передавать информацию об адресе переменной, в которой был ноль (если это переменная конечно), в адресном пространстве нашей интерпретируемой программы, чтобы catch-блок по этому адресу мог вычислить и имя переменной), или InputException (если нам ввели строчку вместо числа, напрмер; внутри объектов этого класса можно передавать опять же адрес переменной, куда производилось чтение, и введенное значение); если в ПОЛИЗе с каждой лексемой хранить еще и номер строки исходного тескта, в которой она встречалась, то в родительский класс RuntimeException, от которого все эти наследуются, можно добавить поле line...

Ну да, в общем-то. То есть механизм, по сути, тот же, только используем мы его для обработки другого класса ошибок.

Отредактировано DiMan (2007-06-05 21:36:16)

0

44

for (i=0; i<N; i++) for (j=0; j<M; j++) a[i][j]=0; =>
=> K=M*N; //(остаётся 1 цикл)
for (i=0; i<K; i++) a[i -(i mod M)*N] [i mod M]=0;

В таких случаях обычно просто используют не массивы, а указатели. У тебя будет тратиться куча времени на деления. Если хочется со скобочками, то так:
a[0][i]
Если без скобочек, то так:
*(*a + i)
При этом мы пользуетмся внутренним представлением массивов в с++. Учитывая, что оно в стандарте есть, это кроссплатформенно. Учитывая что преобразование делает компилятор, зная на какой платформе работает, то стандарт тут уже не важен.

PS Вопрос на засыпку:

Код:
int i = 5;
i = ++i + ++i;

Чему рано i? Почему i равно 14?
Вот вам и оптимизация. Разработчики gcc говорят, что стандарт позволяет такую интерпретацию этого кода.

0

45

Нет, ну здесь всё понятно, вычисление идёт слева направо, интерпретируется вот так:

Код:
int i = 5;
i = ++i++ + i;

Но вот почему

Код:
int i = 5;
i = (++i)+(++i);

всё равно даёт 14, для меня загадка...

0

46

Вопрос на засыпку:


http://bash.org.ru/quote/212679

Отредактировано Philosoff (2007-06-06 12:40:03)

0

47

Что-то я не въезжаю...

int i = 5;
i = (++i)+(++i);

Сначала делаются оба инкремента, и i равно 7 (после двух инкрементов). Потом получаем 7+7=14... Где тут загадка?

0

48

я думаю, потому что С делает i++ и передает ссылку на значение. Потом делает второй i++ и опять передает ссылку. Складывая значения по ссылкам (то есть по одной и той же ссылке) , получается обращаемся к числу, которое уже 2 раза увеличенно. Значит 7+7  14

0

49

Сначала делаются оба инкремента, и i равно 7 (после двух инкрементов). Потом получаем 7+7=14...

А почему там сначала делаются два инкремента? Это какие-то новые правила вычисления выражений?

я думаю, потому что С делает i++ и передает ссылку на значение.

Вот тогда да, это более логично (и фактически равносильно тому, что сначала делаются два инкремента); но лично я воспринимаю i = (++i)+(++i) как i = (5+1)+(6+1)=13 (как если бы мы передавали значение, а не ссылку на него)...

http://bash.org.ru/quote/212679

Супер.  :)

0

50

я думаю, потому что С делает i++ и передает ссылку на значение. Потом делает второй i++ и опять передает ссылку. Складывая значения по ссылкам (то есть по одной и той же ссылке) , получается обращаемся к числу, которое уже 2 раза увеличенно. Значит 7+7  14

Так он и делает, afaik.
То есть "плюс" складывает два текущих значения i (по ссылкам на i).

0

51

Да, по вопросу по stl и итераторам хочу добавить, что итератор произвольного доступа, это, прежде всего, не тот для которого определены [] и +, а тот, для которого перемещение на любой элемент занимает одно и то же количество времени. Т.е. дописывание operator [] дял двунаправленного оператора не сделает его итератором произволного доступа.

0

52

И еще, у меня появилось ощущение, что мы слажали на последнем семинаре. мы reverse iterator'у присваивали begin() и сравнивали с end(). А надо rbegin() и rend() соответсвенно. Или это я, раздолбай, прослушал?

0

53

я так и не понял, а наши итераторы - какие? двунаправленные или произвольного доступа?
по поводу семинара - да, слажали

Отредактировано Philosoff (2007-06-06 16:45:30)

0

54

я так и не понял, а наши итераторы - какие? двунаправленные или произвольного доступа?
по поводу семинара - да, слажали

vector <T>::itertor - произвольного
list <T>::iterator - двунаправленный

0

55

Народ, а у нас точно не будет задания преобразовать грамматику, к которой неприменим МРС, в грамматику, к которой МРС применим? А то мне эта тема совсем не нравится...

0

56

эпс... А я это битых пол дня тренирую. Уже вроде получаться начало, а тут... ВСЁ ЗРЯ?!!!

))) ну уж лучше бы не было... Тяжко идёт. Тяжко...

0

57

Да, и ещё один вопрос. Вот нам надо перевести в ПОЛИЗ выражение типа x = a < b ? c : d
Если делать так, как мы делали на семинаре, то ответ будет таким:

x, a, b, <, 10, !F, c, 12, !, d, =
1, 2, 3, 4,   5,  6, 7,  8, 9, 10, 11, 12

Вопрос такой: почему 12, а не 11? Ведь присваивание нам же надо сделать...

Отредактировано DiMan (2007-06-06 18:36:35)

0

58

а надо 11. Кто тебе сказал, что 12? Пни его от меня. Скажи, что за то, что он нагло вводит людей в заблуждение

0

59

Тогда я пинаю, например, ответ к номеру 1 варианта 5_2003; там то же самое, только должно быть не 30, а 29. Меня смущает то, что такой же глюк был и на семинарах...

Отредактировано DiMan (2007-06-06 18:50:20)

0

60

неее... мы точно передавали управление на =. Иначе это просто теряет смысл. В одном случае не происходит присваивания

0


Вы здесь » philosoff's.community.forum » Учеба и ВМК. » Вопросы по СП