Здравствуйте. Прочитал сегодня статью на rsdn про написание шаблонного парсера, понравилось, решил свой написать. Получился потоковый парсер выражений типа: var_name1 = value1, var_name2 = value2 ... ; Жду вашей критики по оформлению сорцов, самой программе.
Разве, как учебное упражнение. Подобный разбор делается простейшим токенайзером, без всяких темплейтов и STL. Как пример, такого же размера EXE (правда, упакованный парсит в реальном времени HTML-страницу (AJAX), отображает результаты в другом окне, хранит и показывает историю изменений + GUI (настраиваемые шрифты, размеры итд).
Чем плохи шаблоны и STL? Что значит "такого же размера"? Я говорил что пишу парсер минимально возможного размера? Вопрос был именно по оформлению, написанию плюсного кода, а не по функциональности и размеру бинарника. Если будет необходимость - я и этот бинарник до трёх килобайт сожму. Только зачем?
тем, что для решения подобной задачи их использование является избыточным... более того, даже использование C++ избыточно... да тут нечего критиковать... кода мало, много бессмысленных блоков... это даже интересно... 3к - это две секции минимального размера... сделайте... только не надо мучатся с упаковщиками, вряд ли кто-нить из них сожмет данный бинарник до 3к... а вот если переписать код без любых завязок на CRT, то можно собрать и в 3к... да даже в 1к, если "смержить" секции)))
выравнивание можно задать любое. Чистого кода в этом парсере 2к + заголовок. Что значит использование C++ избыточно...?
cupuyc а можно линк на статью? я что-то ее там не нашел. а вообще, писать парсеры на С++, ИМХО, дело неблагодарное. Rel да всем понятно, что для подобной избыточно более чем. это всего лишь self-tutorial, по сути. но в реальной работе нередко бывают случаи, когда нужен свой парсер, причем хэнд-мэйд, без генераторов. и что тогда?..
cupuyc Не ввязывайтесь в очередной холивар. Кода действительно мало, но по тому что есть: В целом - читабельно. Пока читабельно Нехватает комментариев. Я, например, долго пытался понять что же делает expr_parser::expr_parser(variables_list* variables). Не нашёл copy-constructor и operator= для классов. Подразумевается что их можно копировать? Постинкремент итераторов всё же стоит заменить на преинкремент. Коротко.
KeSqueer, спасибо. Именно то русло, в которое я хотел направить обсуждение. Про инкремент я знаю - прочитал недавно, но ещё не могу привыкнуть и на автомате пишу постфиксный. Вот статья http://rsdn.ru/article/alg/FiniteStateMachine.xml#EHB.
чистого? что значит чистого? без CRT и STL? или без статик линковки?) ну в прямом смысле... решение могло быть на чистом си, по сути из вне нужен только токенайзер, хотя в данном случае можно было бы его и реализовать самому... задача не требует высокоуровневых решений... кстати, вроде среди WinAPI нет токенайзера, поправьте если не прав... ну просто придераюсь, что нельзя придраться штоль?) _DEN_ Лол.
Rel, для Вас есть специальная тема. Там и занудствуйте со своим размером. Этот тред я продолжать не намерен.
Rel Код (Text): #include "windows.h" #pragma comment(linker,"/subsystem:windows") #pragma comment(linker,"/entry:my_main") int my_main(int argc, char* argv[]) { MessageBox(0,0,0,0); return 0; } Нате. Собирается в 2.5 к. Только у вас по моему с логикой не всё в порядке. Причём тут студия?
Rel, у тебя что, у самого маленький? И код такой-же пишешь - по образу и подобию (обязательно маленький!)? Тред закрыт!