Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Потому что я процент добавил в конце первой маски, и не заметил этого :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 04:52 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Как вы считаете, такая функция имеет право быть ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Подскажите пожалуйста, как бы вы её вызывали ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 06:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКак вы считаете, такая функция имеет право быть ? право конечно имеет, но зачем ей игнорируемый параметр и фиксированное возвращаемое значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 08:02 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Я хотел делать так: Код: plaintext 1. 2. но не получилось. Интуитивно догадываюсь почему, но чёткого обоснования для себя я не дал. пришлось возвращать char* и делать так Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 08:39 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИнтуитивно догадываюсь почему, но чёткого обоснования для себя я не дал. char** p; SashaMercury Код: plaintext 1. 2. а зачем параметр p нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:28 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропила зачем параметр p нужен? в принципе, он видимо избыточен. Сейчас исправлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Функция поиска макросов создана, и протестирована в первом приближении. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. , где Код: 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. и Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. и ещё две функции, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Хотя я не пришёл к выводу, как лучше(быстрее и безопаснее), считать по строкам, и потом делать их разбор, либо делать так как сейчас сделано. а вот и точка входа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:44 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Поиск директив "#define" это лексический анализ, а дальнейший разбор строки макроопределения, это синтаксический анализ. Я так понял. Это правильно ? В целом функции не слишком поганые ? Или вы бы делали совершенно по-другому ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:05 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПоиск директив "#define" это лексический анализ, а дальнейший разбор строки макроопределения, это синтаксический анализ. Я так понял. Это правильно ? нет, кажется, если я правильно понял твою мысль. В целом, лексер -- это выделение лексем, парсер (синтаксический анализ) -- грамматик. Лексемы выделяются безусловно, грамматики -- с вариациями. Напр. в С это -- Код: plaintext 1. 2. 3. лексемы, потому что это не может быть ничем другим. Код: plaintext 1. уже элемент грамматики, это может быть Код: plaintext 1. 2. 3. 4. Что же касается препроцессора, кажется, он не включается в обычную архитектуру компилятора и выполняется отдельно, до него. Он конечно имеет свой собственный лексер и парсер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. Это я считаю форменное безобразие. надо писать Код: plaintext 1. Это С, это не паскаль какой-нибудь тебе... Ну и конечно, тут должен быть IF, ты не вычисляешь выражение, ты ветвишь поток управления. В С к тому же нет false/true. Традиционно. Что-то там добавляли в последних стандартах -- но настоящий с-шник написал бы Код: plaintext 1. И в итоге код должен быть Код: plaintext 1. 2. К тому же между '#' и директивой препроцессора (define в данном случае) могут быть (разрешены) пробелы. strcmp не покатит, по крайней мере в таком виде. Думаю, лучше всего всё же использовать регвыражения типа libPCRE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. А если strcmp(w1, "#define") , как думаешь, куда девается выделенная память ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Существует #undef, поэтому Код: plaintext 1. должен быть стеком, а не просто списком. Точнее, структура макроопределений должна быть стеком твоих вот этих массивов MacroSpace. И в каждой точке компиляции кода должен применяться один из элементов этого стека (top, head). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо. По поводу памяти, я неправ. Забыл освободить. По другим замечаниям, мне нужно подумать, прежде чем ответить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 12:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, скорее всего malloc частный случай realloc, и такое в Си встречается, пока не решил как к этому отношусь, хорошо или плохо. С одной стороны нужно помнить больше функций, происходит дублирование, увеличение общего объёма кода (при подключении библиотек), а с другой стороны скорее всего плюсы какие-то есть, просто я их не вижу в силу своей малой грамотности в теории языков программирования В сях как-раз мало дублирования функционала. Потому как язык создавался в помощь разработке ядра Unix. И по сути большинство API просто отражают kernel-API. А вот если-бы ты полез в библиотеки и фремворки C#/Java - там просто оторопь берёт от обилия одних и тех-же яиц в анфас и профиль. Одних XML-ных API существует дюжина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 18:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercury, Код: plaintext 1. Это я считаю форменное безобразие. надо писать Код: plaintext 1. Это С, это не паскаль какой-нибудь тебе... Ну и конечно, тут должен быть IF, ты не вычисляешь выражение, ты ветвишь поток управления. В С к тому же нет false/true. Традиционно. Что-то там добавляли в последних стандартах -- но настоящий с-шник написал бы Код: plaintext 1. И в итоге код должен быть Код: plaintext 1. 2. К тому же между '#' и директивой препроцессора (define в данном случае) могут быть (разрешены) пробелы. strcmp не покатит, по крайней мере в таком виде. Думаю, лучше всего всё же использовать регвыражения типа libPCRE. код исправил, в целом я согласен. Использование тернарного оператора не есть самое удачное решение в данном конкретном случае. Поиск исправлю в дальнейшем, сейчас не хочу отрывать от несколько другой задачи, нужно сделать все замены в файле. По поводу организации данных, вы правы. Сейчас исправлять не буду, в дальнейшем, возможно, я это учту. Опять таки, пока не хочу отвлекаться от основной задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 02:14 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
А вот если бы я для считывания данных использовал посимвольный анализ, а не fscanf (хотя fscanf тоже веротяно читает по символам), было бы быстрее/медленнее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 02:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, fscanf медленнее, чем посимвольное чтение, т.к. ему приходится еще разбирать строку формата при каждом вызове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 03:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, это значит, что если бы у вас были знания на уровне моих в области Си(дело в том, что возможно есть другие функции, наиболее оптимальные, или есть библиотека о которой я не знаю, и использование этих функций/библиотек должно быть тут, а не посимвольное fscanf и getc(in)), то вы бы реализовали аналогичный алгоритм формирующий пространство макроимён через посимвольный анализ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 04:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Я бы использовал готовый генератор лексических анализаторов вместо самописного лексера. Например flex. А алгоритм бы уже работал с лексемами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 04:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky, это значит, что если бы у вас были знания на уровне моих в области Си(дело в том, что возможно есть другие функции, наиболее оптимальные, или есть библиотека о которой я не знаю, и использование этих функций/библиотек должно быть тут, а не посимвольное fscanf и getc(in)), то вы бы реализовали аналогичный алгоритм формирующий пространство макроимён через посимвольный анализ ? как правило делают посимвольный ввод, потому что так гибче. если бы ты знал в деталях, как работает fscanf, ты бы тоже его не использовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 07:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryэто значит, что если бы у вас были знания на уровне моих в области Си(дело в том, что возможно есть другие функции, наиболее оптимальные, или есть библиотека о которой я не знаю, и использование этих функций/библиотек должно быть тут, а не посимвольное fscanf и getc(in)), то вы бы реализовали аналогичный алгоритм формирующий пространство макроимён через посимвольный анализ ? Вопрос-то как звучит? Наиболее оптимальные! По объёму кода - для данной задачи наверное fscanf хватит. Лаконично. По скорости.. надо попрофилировать. Дать тыщу исходников. Тогда наверное fgets, или getc будет быстрее. Но для него надо хорошенький Finite-State-Machine для разбора написать. И еще критерий можно придумать. Дуракоустойчивость. Возможность exploit-a. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 19:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton Наиболее оптимальные! режет глаз словосочетание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 23:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропилmayton Наиболее оптимальные! режет глаз словосочетание не издевайтесь :) Когда пишу, то порой не успеваю за своими мыслями, потому подгоняю себя, тем самым минимизирую время поиска подходящего слова, потому порой пишу неграмотно, или с опечатками. И я не Фёдор Михайлович Достоевский, чтобы изощряться, и не Бальмонт с его "Я изысканность русской медлительной речи ...". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 02:40 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Особенно когда много думаешь прежде чем написать, в голове совсем другие мысли, а не о том как не ошибиться в грамматике/орфографии. Главное передать суть, и ничего не забыть, увеличение риска появления ошибки не играет слишком большой роли на фоне основной задачи. Тем не менее, я считаю, что писать нужно грамотно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 02:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38788837&tid=2019118]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 192ms |

| 0 / 0 |
