![]() |
Создание собственного скриптого языка.
Решил написать на с++ свой скриптовый язык - переменные, циклы, иф-элс...
И вот сразу первая загвоздка... никак не могу определиться с правильным типом хранения переменных. Была идея хранить переменные в string массиве: Код:
string test[3];Хотелось бы услышать советы знающих людей) Заранее спасибо) |
Хештаблица ?
|
Хеш-таблица, в stl - мапа (map)...
|
Цитата:
Цитата:
|
Подскажите пожалуйста эти библиотеки
Код:
#include <fstream>Тоесть, они будут работать как на виндовсе так и на линуксе? Заранее спасибо) |
Цитата:
|
Цитата:
|
Цитата:
|
Возвращаюсь обратно к своему яп... =]
Пишу всё с нуля, пока что готово: грамматика и парсер. Интересует след., после анализа парсером входящего текста(кода), что лучше, создавать дерево и после пробегать по нему и вычислять всё на лету, или как у "boost::spirit - пример - mini_c" что-то типа оп-кодов, как я понял это уже в сторону java, байт-код итд... |
Смело начинать без теории.
Могу посоветовать Хантера почитать( основные концепции компиляторов ) Залогова (разработка паскаль компилятора ). |
Цитата:
Вот, сижу - не могу определиться что выбрать: байт код как у явы... или-же дерево и последующий прогон по нему. з.ы. я понимаю что байт код не совсем на так уж "на лету" |
так в этих книжках как-раз и рассматривается построение "синтаксического дерева".
И про трансляцию я ничего не говорил. А вот синтаксический анализатор там рассмотрен. |
зачем изобретать велосипед? ))
Flex, Bison (более древняя связка lex, yacc) почитай по теме (сам на курсовик писал интерпретатор на php. Стыдно выкладывать там что-то типа exec($code); хехе ) http://www.gamedev.ru/community/toolcorner/articles/UniScript http://www.gamedev.ru/code/articles/?id=4229 - вот тут по работе с lex и т.д. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Я например пока писал с нуля грамматику и парсер много чего интерестного узнал), а если бы взял уже готовое, то даже и не подозревал-бы как там всё устроено... Цитата:
Вообщем, остановился я на дереве.. немного подкомментирую и почищу код , затем выложу его сюда =] |
Есть маленькая непонятка с грамматикой(или это особенности парсера?), а именно с ebnf грамматикой, вот пример грамматики простых выражений
Цитата:
Если скормить эту грамматику boost::spirit и дать ему выражение Цитата:
Цитата:
Но!, если дать следующее Цитата:
Цитата:
Цитата:
Собственно непонятно, эти повторения это нормально? или нужно искать другой выход из ситуации? спасибо. з.ы. то-что спирит не обращайте внимания, он у меня всего-лишь как эталон, т.е. проверяю на корректность свой парсер сравнивая результаты с спиритом))) |
С предыдущей проблемой так и не смог разобраться, думаю пока чем проще тем лучше, а потом уже все отшлифую т.е. вопрос закрыт.
Как и обещал, вот исходники AIL http://www.sendspace.com/file/id2vsq, готово след.: Лексер и парсер - который парсит используя ebnf грамматику, которая прилагается в архиве-это скорее-всего финальная версия, т.е. синтаксис интерпретатора будет(опять-же скорее-всего) основан на этой грамматике. Конечно, дохрена чего не оптимизировано + не везде комментарии расставлены, но это исправится со временем. Любая критика и поправки приветствуются! :) Например если записать в code.txt след. Цитата:
Цитата:
Осталось доделать: семантический анализатор, модуль исполнения кода. з.ы. Модераторам - можно-ли переименовать тему на "Создание интерпретатора AIL"? |
а смысл? изобретаем велосипеды?
|
Цитата:
|
| Время: 19:52 |