powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august
25 сообщений из 281, страница 1 из 12
Анализ исходного кода. Разбор IOCCC 1985 august
    #38718921
Фотография 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.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
Анализ исходного кода. Разбор IOCCC 1985 august
    #38718923
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рисунок просто огромный, прошу прощение. Я загружу новый. Удалите пожалуйста старый.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38718924
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury4. Можно ли посмотреть код, полученный после работы препроцессора VS ?
http://stackoverflow.com/questions/277258/c-c-source-file-after-preprocessing

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

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

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

Следующий шаг - изучить что такое CFG и bison.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38719929
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Анализ исходного кода. Разбор IOCCC 1985 august
    #38720305
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, Саш. Это всё замечательно. А каково назначение этого алгоритма?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38720310
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Который я рисовал выше ? Xочу для начала написать слабую версию препроцессора, и алгоритм выше собирает все макроподстановки в файле. Но он не до конца верный
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38720394
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или алгоритма из конкурса запутанного кода ? Это я не знаю, хочется разобраться. Мне уже пора, до свидание всем. Если у кого-нибудь будут интересные мысли по коду, то пишите :)
PS
Всё-же удивляюсь, почему так мало кому интересен этот конкурс. Он наверное вам кажется слишком детским, и не серьёзным
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38720432
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саш я на правах обычного мембера выскажу своё мнение что часть твоих
постов - бесполезны для форума. И я тебя как мембер прошу фильтровать посты
по степени их полезности.

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

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

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

Код: plaintext
1.
2.
-P
для Microsoft C/C++ compiler
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38780531
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Анализ исходного кода. Разбор IOCCC 1985 august
    #38780558
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭтот код -- пример того, как не надо использовать препроцессор.
Я лично не понимаю, что тут интересного.
представь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бод
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38780563
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпредставь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бодИ почём сейчас машина времени???
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38780568
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovИзопропилпредставь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бодИ почём сейчас машина времени???
ну так и код 1985 года.

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

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

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

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

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

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

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


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