Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Парсер inline-ассемблера на С++ |

14.06.2010, 21:55
|
|
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме: 10298
Репутация:
0
|
|
Парсер inline-ассемблера на С++
 Вот такая задача передо мной встала: в короткий срок разработать его.... Разрабатываю второй месяц - написал кучу кода
Просьба античаовцам: посмотреть его (желательно на MS Visual Studio 6) и общее мнение высказать, ну и помочь справиться с:
а) лики детектед) Их бы убрать)
б) оптимизировать наконец этого монстра)))
Собственно код в ZIP архиве Исправил ссыль тута)
Последний раз редактировалось EniOk; 14.06.2010 в 23:09..
|
|
|

14.06.2010, 21:58
|
|
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме: 10298
Репутация:
0
|
|
Да кстати) будет дорабатываться и выкладываться сюда довольно активно))))
И... я понимаю конечно что просматривать все это - думалка сломается, но пожалуйста, просмотрите это, что не понятно зачем - спрашивайте))))
|
|
|

14.06.2010, 22:38
|
|
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме: 1229135
Репутация:
425
|
|
Сообщение от EniOk
Да кстати) будет дорабатываться и выкладываться сюда довольно активно))))
И... я понимаю конечно что просматривать все это - думалка сломается, но пожалуйста, просмотрите это, что не понятно зачем - спрашивайте))))
сразу бы написал для не понимающий зачем, и что это такое
|
|
|

14.06.2010, 22:39
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
сразу бы написал для не понимающий зачем, и что это такое
Ну и залил архив на обменник, где регистрация не требуется.
|
|
|

14.06.2010, 23:09
|
|
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме: 10298
Репутация:
0
|
|
|
|
|

15.06.2010, 00:10
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Код брутален. Сильно не смотрел, хватило моментов вроде
AFX_INLINE void CLexeme::Init()
{
memset(this, 0, sizeof(LEXEME));
Не сразу понял, что класс наследует структуру, которая таким образом обнуляется.
А еще кучка goto. По-моему, с объектно-ориентированным подходом goto как-то слишком.
Если была задача разработать в короткий срок - можно было бы использовать регулярные выражения, было бы гораздо быстрее и меньше кода.
|
|
|

15.06.2010, 00:52
|
|
Новичок
Регистрация: 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: Шпаргалка с исходником в архиве улыбнула 
|
|
|

15.06.2010, 00:56
|
|
Постоянный
Регистрация: 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..
|
|
|

15.06.2010, 13:07
|
|
Новичок
Регистрация: 06.06.2009
Сообщений: 8
Провел на форуме: 10298
Репутация:
0
|
|
Спасибо) Собственно отвечу
1 Класс CLexem вводили на паре и я, как видно его нигде не использую... Зачем его ввели я не понял и сам, а удалять пока не хочется)
2 Выделение и освобождение памяти - тоже писали на паре и препод попросил именно через эти функции работать. Этот блок работает верон - 100% отлаживался дофига на разных примерах
3 Goto - ну предложите как без него. И потом - оно всего одно по сути в одном месте - думаю понятен его смысл)
4) хорошо удалю комментарии *лишние* и выложу)
Новое - читабельное =)
Замечу, что рассматривайте пожалуйста именно parser.h и parser.cpp =)
|
|
|

15.06.2010, 17:06
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
3) switch?
по остальному хз. бнф не видно. но код не сказать что кривой, вполне нормальный.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|