Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august / 25 сообщений из 281, страница 1 из 12
13.08.2014, 03:46
    #38718921
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Здравствуйте.

Вчера я решил заняться чем-нибудь интересным. Решил разобрать код автора august, созданный в 1985 году для IOCCC. Ниже привожу код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#define p struct c
#define q struct b
#define h a->a
#define i a->b
#define e i->c
#define o a=(*b->a)(b->b,b->c)
#define s return a;}q*
#define n (d,b)p*b;{q*a;p*c;
#define z(t)(t*)malloc(sizeof(t))
q{int a;p{q*(*a)();int b;p*c;}*b;};q*u n a=z(q);h=d;i=z(p);i->a=u;i->b=d+1;s
v n c=b;do o,b=i;while(!(h%d));i=c;i->a=v;i->b=d;e=b;s
w n o;c=i;i=b;i->a=w;e=z(p);e->a=v;e->b=h;e->c=c;s
t n for(;;)o,main(-h),b=i;}main(b){p*a;if(b>0)a=z(p),h=w,a->c=z(p),a->c->a=u,
a->c->b=2,t(0,a);putchar(b?main(b/2),-b%2+'0':10);} 



0.1 Когда я стал его разбирать (на листочке конечно-же), мне стало понять почему мне говорили про кучу define, когда я спрашивал про то, как можно написать работу с длинными числами за 200 символов. Вероятно, написать и правда можно(если обладать фантазией с немалым коэффициентом извращённости).
0.2 Разобрал 2 строки после списка макрозамен, и решил что не серьёзно изучать Си, и не написать для этого программу (тем более, в дальнейшем её можно будет использовать для парсера языка).


1. Я решил, что сначала мне нужно получить список всех замен (как бы это слово правильно назвать, макроподстановок? ) в тексте. Написал для этого алгоритм. Подскажите пожалуйста, верен ли он ? Или я что-то/много что упустил.
2. Вероятно, лучше всего хранить список макрозамен в массиве структур. И ещё должна быть переменная, в которой хранится количество записей. Глобальная переменная.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
struct mr
{
	unsigned i;//номер по порядку, хотя я не уверен в его необходимости
	char* identifier = NULL;
	char* replacement_list = NULL;
};
...

struct mr* mrl = NULL;



Хотя в этом я не уверен. Правильно ли я думаю ?

3. Согласно стандарту может быть максимум 4095 разных макроидентификаторов?

ISO/IEC 9899:201x4095 macro identifiers simultaneously defined in one preprocessing translation unit


4. Можно ли посмотреть код, полученный после работы препроцессора VS ?

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
13.08.2014, 03:49
    #38718923
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Рисунок просто огромный, прошу прощение. Я загружу новый. Удалите пожалуйста старый.
...
Рейтинг: 0 / 0
13.08.2014, 03:54
    #38718924
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercury4. Можно ли посмотреть код, полученный после работы препроцессора VS ?
http://stackoverflow.com/questions/277258/c-c-source-file-after-preprocessing

Вам пора научиться гуглить

ЗЫ. Остальное мне не интересно, поэтому не комментирую.
...
Рейтинг: 0 / 0
13.08.2014, 11:27
    #38719132
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Anatoly MoskovskyВам пора научиться гуглить
Да хотя бы открыть для себя ключи /?, -h, --help (в зависимости от компилятора)...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.08.2014, 13:06
    #38719270
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Алгоритм не совсем верный, он не распознает функции
...
Рейтинг: 0 / 0
13.08.2014, 16:26
    #38719574
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercury, Сашок. У некоторых компилляторов есть опции
которые показывают результат макро-процессинга.

Воспользуйся им. Потом отформатируй нормально исходник
и мы с удовольствием на него посмотрим.
...
Рейтинг: 0 / 0
13.08.2014, 18:07
    #38719721
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercury,

Следующий шаг - изучить что такое CFG и bison.
...
Рейтинг: 0 / 0
14.08.2014, 07:24
    #38719929
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
mayton, спасибо :)

воспользовался ещё вчера, но у меня есть чувство, что навряд-ли вы посмотрите на этот код с удовольствием. Хотя мне он кажется интересным.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
#include <stdio.h>
#include <stdlib.h>

struct b
{ 
	int a; 
	struct c
	{ 
		struct b*(*a)(); 
		int b; 
		struct c*c; 
	}*b; 
}; 

struct b* u(int d, struct c* b)
{
	struct b* a; 
	struct c* c; 
	a = (struct b*)malloc(sizeof(struct b)); 
	a->a = d; 
	a->b = (struct c*)malloc(sizeof(struct c)); 
	a->b->a = u; 
	a->b->b = d + 1;
	return a; 
}

struct b* v(int d, struct c* b)
{
	struct b* a; 
	struct c*c; 
	c = b; 
	do a = (*b->a)(b->b, b->c), b = a->b; 
	while (!(a->a%d)); 
	
	a->b = c; 
	a->b->a = v; 
	a->b->b = d; 
	a->b->c = b; 
	return a; 
} 

struct b* w(int d, struct c* b)
{
	struct b* a; 
	struct c* c; 
	a = (*b->a)(b->b, b->c); 
	c = a->b; 
	a->b = b; 
	a->b->a = w; 
	a->b->c = (struct c*)malloc(sizeof(struct c)); 
	a->b->c->a = v; 
	a->b->c->b = a->a; 
	a->b->c->c = c; 
	return a; 
}

struct b* t(int d, struct c* b) 
{ 
	struct b*a; 
	struct c*c; 
	for (;;)
		a = (*b->a)(b->b, b->c), main(-a->a), b = a->b; 
}

main(int b)
{
	struct c*a; 
	if (b>0)a = (struct c*)malloc(sizeof(struct c)), a->a = w, a->c = (struct c*)malloc(sizeof(struct c)), a->c->a = u,
		a->c->b = 2, t(0, a); 
	putchar(b ? main(b / 2), -b % 2 + '0' : 10);
}



Anatoly Moskovsky, я не догадался сделать запрос на английском. Спасибо
...
Рейтинг: 0 / 0
14.08.2014, 14:30
    #38720305
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercury, Саш. Это всё замечательно. А каково назначение этого алгоритма?
...
Рейтинг: 0 / 0
14.08.2014, 14:34
    #38720310
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Который я рисовал выше ? Xочу для начала написать слабую версию препроцессора, и алгоритм выше собирает все макроподстановки в файле. Но он не до конца верный
...
Рейтинг: 0 / 0
14.08.2014, 15:32
    #38720394
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Или алгоритма из конкурса запутанного кода ? Это я не знаю, хочется разобраться. Мне уже пора, до свидание всем. Если у кого-нибудь будут интересные мысли по коду, то пишите :)
PS
Всё-же удивляюсь, почему так мало кому интересен этот конкурс. Он наверное вам кажется слишком детским, и не серьёзным
...
Рейтинг: 0 / 0
14.08.2014, 15:53
    #38720432
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Саш я на правах обычного мембера выскажу своё мнение что часть твоих
постов - бесполезны для форума. И я тебя как мембер прошу фильтровать посты
по степени их полезности.

Желаю успехов.
...
Рейтинг: 0 / 0
14.08.2014, 15:53
    #38720437
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercuryXочу для начала написать слабую версию препроцессора, и алгоритм выше собирает все макроподстановки в файле. Но он не до конца верный
Нужно еще учесть что макроподстановки рекурсивные.
SashaMercuryВсё-же удивляюсь, почему так мало кому интересен этот конкурс. Он наверное вам кажется слишком детским, и не серьёзным
Разбираться в чужом коде - это работа за которую платят деньги :)
...
Рейтинг: 0 / 0
17.10.2014, 17:42
    #38780423
боевые
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
maytonСаш я на правах обычного мембера выскажу своё мнение что часть твоих
постов - бесполезны для форума. И я тебя как мембер прошу фильтровать посты
по степени их полезности.

Желаю успехов.
Не согласен. Не нужно решать за остальных читателей, что им полезно, а что нет. Афтору спасибо за работу, остальные сами решат полезен код или нет, кнопку закрытия вкладки никто не отменял.
...
Рейтинг: 0 / 0
17.10.2014, 19:55
    #38780527
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
maytonSashaMercury, Сашок. У некоторых компилляторов есть опции
которые показывают результат макро-процессинга.

Воспользуйся им. Потом отформатируй нормально исходник
и мы с удовольствием на него посмотрим.

Код: plaintext
1.
2.
-P
для Microsoft C/C++ compiler
...
Рейтинг: 0 / 0
17.10.2014, 20:02
    #38780531
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercuryЗдравствуйте.

Вчера я решил заняться чем-нибудь интересным. Решил разобрать код автора august, созданный в 1985 году для IOCCC. Ниже привожу код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#define p struct c
#define q struct b
#define h a->a
#define i a->b
#define e i->c
#define o a=(*b->a)(b->b,b->c)
#define s return a;}q*
#define n (d,b)p*b;{q*a;p*c;
#define z(t)(t*)malloc(sizeof(t))
q{int a;p{q*(*a)();int b;p*c;}*b;};q*u n a=z(q);h=d;i=z(p);i->a=u;i->b=d+1;s
v n c=b;do o,b=i;while(!(h%d));i=c;i->a=v;i->b=d;e=b;s
w n o;c=i;i=b;i->a=w;e=z(p);e->a=v;e->b=h;e->c=c;s
t n for(;;)o,main(-h),b=i;}main(b){p*a;if(b>0)a=z(p),h=w,a->c=z(p),a->c->a=u,
a->c->b=2,t(0,a);putchar(b?main(b/2),-b%2+'0':10);} 





Этот код -- пример того, как не надо использовать препроцессор.
Я лично не понимаю, что тут интересного.
...
Рейтинг: 0 / 0
17.10.2014, 21:20
    #38780558
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
MasterZivЭтот код -- пример того, как не надо использовать препроцессор.
Я лично не понимаю, что тут интересного.
представь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бод
...
Рейтинг: 0 / 0
17.10.2014, 21:32
    #38780563
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Изопропилпредставь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бодИ почём сейчас машина времени???
...
Рейтинг: 0 / 0
17.10.2014, 21:40
    #38780568
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Basil A. SidorovИзопропилпредставь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бодИ почём сейчас машина времени???
ну так и код 1985 года.

а вот на javascript пожатый это сильно издали смахивает
...
Рейтинг: 0 / 0
18.10.2014, 02:35
    #38780621
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Меня другой вопрос волнует.

SashaMercury, где обещанный декодер? :)
...
Рейтинг: 0 / 0
18.10.2014, 09:39
    #38780643
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Изопропилну так и код 1985 годаЕсли сейчас обсуждается код 1985 года в контексте 110 бод, то у кого-то появилась (завалялась) машина времени.
Возникает закономерный вопрос: почём сейчас машина времени.
...
Рейтинг: 0 / 0
18.10.2014, 15:27
    #38780715
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
Anatoly MoskovskyМеня другой вопрос волнует.

SashaMercury, где обещанный декодер? :)

Здравствуйте. Прекрасно помню, и скоро (до конца года точно) реализую. С понедельника начну уже точно. Я делаю это долго, но поверьте мне я выполняю много посильной работы . Регулярно читаю стандарт, каждый день решаю более простые задачи. И ещё очень большой блок по математике,дифференциальные уравнения(параллельно изучению мной прекрасного языка Си). Также, постоянно читаю Кнута.

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

Резюмируя:
Я делаю это медленно, спасибо что подсказали, с понедельника начну более плотную работу именно над этим.
...
Рейтинг: 0 / 0
18.10.2014, 15:29
    #38780716
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
И улетал на полторы недели практически (
...
Рейтинг: 0 / 0
18.10.2014, 15:35
    #38780717
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
надеюсь, что кому-то, разбор этого кода в итоге окажется интересным и полезным. Например разбор кода из 1 чемпионата мира по запутанному программному коду был интересен
...
Рейтинг: 0 / 0
18.10.2014, 15:42
    #38780718
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ исходного кода. Разбор IOCCC 1985 august
SashaMercuryAnatoly MoskovskyМеня другой вопрос волнует.

SashaMercury, где обещанный декодер? :)
Перед собой поставил более глобальную задачу, написать синтаксический анализатор языка Си
Чето мне нехорошо стало... пойду накапаю себе капель.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august / 25 сообщений из 281, страница 1 из 12
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]