Создание собственного скриптого языка.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rudvil, 21 Feb 2009.

  1. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Решил написать на с++ свой скриптовый язык - переменные, циклы, иф-элс...
    И вот сразу первая загвоздка... никак не могу определиться с правильным типом хранения переменных. Была идея хранить переменные в string массиве:
    Code:
    string test[3];
    test[0] = "varname|varcontent";
    test[1] = "varname|varcontent";
    test[2] = "varname|varcontent";
    типо такого...
    
    пока решил остановиться на нем...
    Хотелось бы услышать советы знающих людей)
    Заранее спасибо)
     
  2. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Хештаблица ?
     
  3. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Хеш-таблица, в stl - мапа (map)...
     
    2 people like this.
  4. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    хмм, интерестно, спасибо за информацию) буду ковырять в этом направлении позже отпишусь что из этого вышло)
     
  5. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Подскажите пожалуйста эти библиотеки
    Code:
    #include <fstream>
    #include <map>
    #include <string>
    #include <sstream>
    
    кроссплатформенные?

    Тоесть, они будут работать как на виндовсе так и на линуксе?
    Заранее спасибо)
     
  6. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    Да.
     
    1 person likes this.
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    +1, только для каждого уровня видимости - своя.
     
  8. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Неа, так долго будет искать. Лучше хештаблица стеков.
     
  9. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Возвращаюсь обратно к своему яп... =]
    Пишу всё с нуля, пока что готово: грамматика и парсер.
    Интересует след., после анализа парсером входящего текста(кода), что лучше, создавать дерево и после пробегать по нему и вычислять всё на лету, или как у "boost::spirit - пример - mini_c" что-то типа оп-кодов, как я понял это уже в сторону java, байт-код итд...
     
    #9 rudvil, 1 Mar 2010
    Last edited: 1 Mar 2010
  10. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    Смело начинать без теории.
    Могу посоветовать Хантера почитать( основные концепции компиляторов )
    Залогова (разработка паскаль компилятора ).
     
  11. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Основы я более-менее знаю, спасибо за книжки, но меня интересует какраз-таки не компиляция, а интерпретация... т.е. не транслировать в низко-уровневый язык и оптимизировать его... а выполнять все на "лету".
    Вот, сижу - не могу определиться что выбрать: байт код как у явы... или-же дерево и последующий прогон по нему.
    з.ы. я понимаю что байт код не совсем на так уж "на лету"
     
    #11 rudvil, 1 Mar 2010
    Last edited: 1 Mar 2010
  12. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    так в этих книжках как-раз и рассматривается построение "синтаксического дерева".
    И про трансляцию я ничего не говорил. А вот синтаксический анализатор там рассмотрен.
     
    1 person likes this.
  13. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    зачем изобретать велосипед? ))

    Flex, Bison (более древняя связка lex, yacc)

    почитай по теме (сам на курсовик писал интерпретатор на php. Стыдно выкладывать там что-то типа exec($code); хехе )

    http://www.gamedev.ru/community/toolcorner/articles/UniScript

    http://www.gamedev.ru/code/articles/?id=4229 - вот тут по работе с lex и т.д.
     
    _________________________
    #13 Gar|k, 1 Mar 2010
    Last edited: 1 Mar 2010
    1 person likes this.
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Впизду такое счастье. Без теории в сугубо теоретической области кроме сосания машинного хуя ничего не сделать.

    +1. Спирит бустовский не советую из-за его рантаймовости.
     
    1 person likes this.
  15. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Он имел ввиду, что ТС поступил очень смело
     
    1 person likes this.
  16. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Спасибо, почитаемс)
    Полностью согласен, но! это не какойнибуть коммерческий проект где нужно все качественное и проверенное...
    Я например пока писал с нуля грамматику и парсер много чего интерестного узнал), а если бы взял уже готовое, то даже и не подозревал-бы как там всё устроено...
    от него я сразу отказался, слишком навороченный и дико долго компилит...

    Вообщем, остановился я на дереве.. немного подкомментирую и почищу код , затем выложу его сюда =]
     
  17. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Есть маленькая непонятка с грамматикой(или это особенности парсера?), а именно с ebnf грамматикой, вот пример грамматики простых выражений
    Всё что в квадратных скобках, это как в boost::spirit semantic actions.
    Если скормить эту грамматику boost::spirit и дать ему выражение
    то на выходе получим:
    т.е. постфиксную запись, тут проблем нету, с этим все понятно.
    Но!, если дать следующее
    вывод будет таким:
    т.е. повторяющийся идентификатор 'a', конечно если записать грамматику присваивания так
    то повторений не будет, но тогда мы теряем правоассоциацивность(как-то так пишется, но это неважно - смысл я понимаю) оператора присваивания '='.
    Собственно непонятно, эти повторения это нормально? или нужно искать другой выход из ситуации? спасибо.

    з.ы. то-что спирит не обращайте внимания, он у меня всего-лишь как эталон, т.е. проверяю на корректность свой парсер сравнивая результаты с спиритом)))
     
    #17 rudvil, 14 May 2010
    Last edited: 14 May 2010
  18. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    С предыдущей проблемой так и не смог разобраться, думаю пока чем проще тем лучше, а потом уже все отшлифую т.е. вопрос закрыт.

    Как и обещал, вот исходники AIL
    http://www.sendspace.com/file/id2vsq, готово след.:
    Лексер и парсер - который парсит используя ebnf грамматику, которая прилагается в архиве-это скорее-всего финальная версия, т.е. синтаксис интерпретатора будет(опять-же скорее-всего) основан на этой грамматике.

    Конечно, дохрена чего не оптимизировано + не везде комментарии расставлены, но это исправится со временем.
    Любая критика и поправки приветствуются! :)

    Например если записать в code.txt след.
    то на выходе получим
    затем из всего этого(постфиксная запись) создается(пока ещё не реализовано) абстрактное синтаксическое дерево, которое будет выглядеть вот так[​IMG]

    Осталось доделать:
    семантический анализатор, модуль исполнения кода.
     
    #18 rudvil, 18 May 2010
    Last edited: 28 Jun 2010
  19. SergSob

    SergSob New Member

    Joined:
    20 Apr 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    а смысл? изобретаем велосипеды?
     
  20. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Для опыта, да и наверняка у многих было желание написать свой яп))