ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Парсер inline-ассемблера на С++
  #1  
Старый 14.06.2010, 21:55
Аватар для EniOk
EniOk
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме:
10298

Репутация: 0
Wink Парсер inline-ассемблера на С++

Вот такая задача передо мной встала: в короткий срок разработать его.... Разрабатываю второй месяц - написал кучу кода
Просьба античаовцам: посмотреть его (желательно на MS Visual Studio 6) и общее мнение высказать, ну и помочь справиться с:
а) лики детектед) Их бы убрать)
б) оптимизировать наконец этого монстра)))

Собственно код в ZIP архиве Исправил ссыль тута)

Последний раз редактировалось EniOk; 14.06.2010 в 23:09..
 
Ответить с цитированием

  #2  
Старый 14.06.2010, 21:58
Аватар для EniOk
EniOk
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме:
10298

Репутация: 0
По умолчанию

Да кстати) будет дорабатываться и выкладываться сюда довольно активно))))
И... я понимаю конечно что просматривать все это - думалка сломается, но пожалуйста, просмотрите это, что не понятно зачем - спрашивайте))))
 
Ответить с цитированием

  #3  
Старый 14.06.2010, 22:38
Аватар для AlexTheC0d3r
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме:
1229135

Репутация: 425
Отправить сообщение для AlexTheC0d3r с помощью ICQ
По умолчанию

Цитата:
Сообщение от EniOk  
Да кстати) будет дорабатываться и выкладываться сюда довольно активно))))
И... я понимаю конечно что просматривать все это - думалка сломается, но пожалуйста, просмотрите это, что не понятно зачем - спрашивайте))))
сразу бы написал для не понимающий зачем, и что это такое
 
Ответить с цитированием

  #4  
Старый 14.06.2010, 22:39
Аватар для d_x
d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме:
4137635

Репутация: 2407


По умолчанию

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

  #5  
Старый 14.06.2010, 23:09
Аватар для EniOk
EniOk
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме:
10298

Репутация: 0
Smile

Виноват - исправлюсь)))
Сцыль на Яндексовском народе)
 
Ответить с цитированием

  #6  
Старый 15.06.2010, 00:10
Аватар для d_x
d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме:
4137635

Репутация: 2407


По умолчанию

Код брутален. Сильно не смотрел, хватило моментов вроде
Цитата:
AFX_INLINE void CLexeme::Init()
{
memset(this, 0, sizeof(LEXEME));
Не сразу понял, что класс наследует структуру, которая таким образом обнуляется.
А еще кучка goto. По-моему, с объектно-ориентированным подходом goto как-то слишком.
Если была задача разработать в короткий срок - можно было бы использовать регулярные выражения, было бы гораздо быстрее и меньше кода.
 
Ответить с цитированием

  #7  
Старый 15.06.2010, 00:52
Аватар для Bers
Bers
Новичок
Регистрация: 17.05.2010
Сообщений: 5
Провел на форуме:
13971

Репутация: 10
По умолчанию

Пару слов про этот класс, CLexeme
1. Зачем у него публичный метод Init()? Сюдя по названию (рискну предположить, что Init здесь означает инициализацию, а не сброс состояния, к примеру, т.к. тогда его было бы логично назвать Reset()), так вот, сюдя по названию, он нужен для инициализации экземпляра этого класса, так какой смысл выносить его в отдельный метод? Перенеси его код в конструктор - меньше вероятность, что при каких-либо переделках случайно словишь баг.

2. Собственно тело метода Init(). Вот это:
Код:
memset(this, 0, sizeof(LEXEME));
тихий ужас. Ладно бы так было:
Код:
memset(this, 0, sizeof(CLexeme));
Понятно, что в твоем коде работают оба варианта, но они работают ровно до тех пор, пока ты не добавишь еще одно поле, но в класс CLexeme. Хотя, вообще говоря, 5 полей класса очистить проще вручную.

3. Вообще мне не ясен смысл класса CLexeme - он же просто расширяет LEXEME парой методов. Не проще ли их объединить в один класс?

Остальное даже смотреть не стал - обилие закомменченых строк кода, куча адский enum'ов без единой строчки описания, короче, хрен разберешься.
Мой скромный совет - отрефакторить код до читабельного состояния, потом - найти и исправить утечки, и только потом - заниматься оптимизацией.

PS: Шпаргалка с исходником в архиве улыбнула
 
Ответить с цитированием

  #8  
Старый 15.06.2010, 00:56
Аватар для Ra$cal
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

((*pPos == ' ') || (*pPos == '\t') || (*pPos == 13) || (*pPos == 10) ) ) -> http://www.cplusplus.com/reference/clibrary/cctype/isspace/
куча апишек для работы с файлом. -> http://www.cplusplus.com/reference/iostream/fstream/
выделение памяти и освобождение повергло в глубокий шок. Это что там вообще такое? -> http://www.cplusplus.com/reference/std/new/

Куча дефайнов тоже умиляет. -> http://programmersclub.ru/15/

про гото уже сказали.
Куски кода типа
if (*pPos == '<')
{
Token.Buffer = pPos;.....

в огромном количестве заменяются на вызовы методов, дабы уменьшить длину простыни одного метода.
if (*pPos == '<')
{
lexemLess();
Можешь даже сделать через switch, тогда получишь оптимизацию в виде поиска за один шаг, вместо прохода всего списка лексем.

Комменты со старым кодом лучше удалять, отвлекают. Если ссыкатно повредить код - используй svn. Очень легко и удобно.

Ах да, еще велосипедный лист =) -> http://www.cplusplus.com/reference/stl/list/

Последний раз редактировалось Ra$cal; 15.06.2010 в 01:06..
 
Ответить с цитированием

  #9  
Старый 15.06.2010, 13:07
Аватар для EniOk
EniOk
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме:
10298

Репутация: 0
По умолчанию

Спасибо) Собственно отвечу
1 Класс CLexem вводили на паре и я, как видно его нигде не использую... Зачем его ввели я не понял и сам, а удалять пока не хочется)
2 Выделение и освобождение памяти - тоже писали на паре и препод попросил именно через эти функции работать. Этот блок работает верон - 100% отлаживался дофига на разных примерах
3 Goto - ну предложите как без него. И потом - оно всего одно по сути в одном месте - думаю понятен его смысл)
4) хорошо удалю комментарии *лишние* и выложу)
Новое - читабельное =)

Замечу, что рассматривайте пожалуйста именно parser.h и parser.cpp =)
 
Ответить с цитированием

  #10  
Старый 15.06.2010, 17:06
Аватар для Ra$cal
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

3) switch?

по остальному хз. бнф не видно. но код не сказать что кривой, вполне нормальный.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер мобильных телефонов [vkontakte.ru] taxpayer Покупка, продажа, услуги в Соц. Сетях 10 14.06.2010 14:47
Парсер для Adult сайтов. Для DLE sander59 Разное - Покупка, продажа, обмен 3 08.05.2010 16:42
Парсер market.yandex для импорта в любые cms Timuren Услуги, Покупка и Продажа в SEO 0 07.01.2010 14:08
Десктопный парсер контента nexXx Покупка, продажа, услуги в Соц. Сетях 0 19.12.2009 02:01
Продам парсер граббер MaTrIks Разное - Покупка, продажа, обмен 3 08.12.2009 22:15



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ