Простенький парсер

Тема в разделе "LANGS.C", создана пользователем cupuyc, 17 ноя 2010.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Здравствуйте. Прочитал сегодня статью на rsdn про написание шаблонного парсера, понравилось, решил свой написать. Получился потоковый парсер выражений типа:

    var_name1 = value1, var_name2 = value2 ... ;

    Жду вашей критики по оформлению сорцов, самой программе.
     
  2. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Разве, как учебное упражнение. Подобный разбор делается простейшим токенайзером, без всяких темплейтов и STL.
    Как пример, такого же размера EXE (правда, упакованный :) парсит в реальном времени HTML-страницу (AJAX), отображает результаты в другом окне, хранит и показывает историю изменений + GUI (настраиваемые шрифты, размеры итд).
     
  3. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Чем плохи шаблоны и STL?
    Что значит "такого же размера"? Я говорил что пишу парсер минимально возможного размера?

    Вопрос был именно по оформлению, написанию плюсного кода, а не по функциональности и размеру бинарника. Если будет необходимость - я и этот бинарник до трёх килобайт сожму. Только зачем?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    тем, что для решения подобной задачи их использование является избыточным... более того, даже использование C++ избыточно...

    да тут нечего критиковать... кода мало, много бессмысленных блоков...

    это даже интересно... 3к - это две секции минимального размера... сделайте... только не надо мучатся с упаковщиками, вряд ли кто-нить из них сожмет данный бинарник до 3к... а вот если переписать код без любых завязок на CRT, то можно собрать и в 3к... да даже в 1к, если "смержить" секции)))
     
  5. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    выравнивание можно задать любое. Чистого кода в этом парсере 2к + заголовок.

    Что значит использование C++ избыточно...?
     
  6. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    cupuyc
    а можно линк на статью? я что-то ее там не нашел.
    а вообще, писать парсеры на С++, ИМХО, дело неблагодарное.

    Rel
    да всем понятно, что для подобной избыточно более чем. это всего лишь self-tutorial, по сути.
    но в реальной работе нередко бывают случаи, когда нужен свой парсер, причем хэнд-мэйд, без генераторов. и что тогда?..
     
  7. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    cupuyc
    Не ввязывайтесь в очередной холивар.

    Кода действительно мало, но по тому что есть:
    В целом - читабельно. Пока читабельно :)
    Нехватает комментариев. Я, например, долго пытался понять что же делает expr_parser::expr_parser(variables_list* variables).
    Не нашёл copy-constructor и operator= для классов. Подразумевается что их можно копировать?
    Постинкремент итераторов всё же стоит заменить на преинкремент. Коротко.
     
  8. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    KeSqueer, спасибо. Именно то русло, в которое я хотел направить обсуждение. Про инкремент я знаю - прочитал недавно, но ещё не могу привыкнуть и на автомате пишу постфиксный.

    Вот статья http://rsdn.ru/article/alg/FiniteStateMachine.xml#EHB.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    gazlan
    Лол.

    Rel
    Лол.

    Voodoo
    Лол.
     
  10. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    _DEN_
    Лол.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    чистого? что значит чистого? без CRT и STL? или без статик линковки?)

    ну в прямом смысле... решение могло быть на чистом си, по сути из вне нужен только токенайзер, хотя в данном случае можно было бы его и реализовать самому... задача не требует высокоуровневых решений... кстати, вроде среди WinAPI нет токенайзера, поправьте если не прав...

    ну просто придераюсь, что нельзя придраться штоль?)

    _DEN_
    Лол.
     
  12. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Rel, для Вас есть специальная тема. Там и занудствуйте со своим размером. Этот тред я продолжать не намерен.
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    cupuyc
    Все правильно сделал.

    остальные
    Продолжайте, я уже сходил за вторым ведром попкорна.
     
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    почему же не намерны? соберите мне хелоууорлд студией размером в 3к или меньше...
     
  15. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Rel
    Код (Text):
    1. #include "windows.h"
    2. #pragma comment(linker,"/subsystem:windows")
    3. #pragma comment(linker,"/entry:my_main")
    4.  
    5. int my_main(int argc, char* argv[])
    6. {
    7.     MessageBox(0,0,0,0);
    8.     return 0;
    9. }
    Нате. Собирается в 2.5 к. Только у вас по моему с логикой не всё в порядке. Причём тут студия?
     
  16. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Rel
    лол
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    cupuyc
    код - гуан*
     
  18. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    и да, в этом коде из STL используется только пара контейнеров.
     
  19. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Rel, у тебя что, у самого маленький? И код такой-же пишешь - по образу и подобию (обязательно маленький!)?

    Тред закрыт!
     
  20. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    GoldFinch, что вы считаете написано плохо?