ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 01.03.2010, 16:28
Аватар для rudvil
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Цитата:
Сообщение от _antony  
Смело начинать без теории.
Могу посоветовать Хантера почитать( основные концепции компиляторов )
Залогова (разработка паскаль компилятора ).
Основы я более-менее знаю, спасибо за книжки, но меня интересует какраз-таки не компиляция, а интерпретация... т.е. не транслировать в низко-уровневый язык и оптимизировать его... а выполнять все на "лету".
Вот, сижу - не могу определиться что выбрать: байт код как у явы... или-же дерево и последующий прогон по нему.
з.ы. я понимаю что байт код не совсем на так уж "на лету"

Последний раз редактировалось rudvil; 01.03.2010 в 16:31..
 
Ответить с цитированием

  #12  
Старый 01.03.2010, 16:54
Аватар для _antony
_antony
Познающий
Регистрация: 16.07.2008
Сообщений: 82
Провел на форуме:
424387

Репутация: 142
По умолчанию

так в этих книжках как-раз и рассматривается построение "синтаксического дерева".
И про трансляцию я ничего не говорил. А вот синтаксический анализатор там рассмотрен.
 
Ответить с цитированием

  #13  
Старый 01.03.2010, 23:51
Аватар для Gar|k
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

зачем изобретать велосипед? ))

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

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

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

http://www.gamedev.ru/code/articles/?id=4229 - вот тут по работе с lex и т.д.

Последний раз редактировалось Gar|k; 01.03.2010 в 23:54..
 
Ответить с цитированием

  #14  
Старый 04.03.2010, 01:55
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
Смело начинать без теории.
Впизду такое счастье. Без теории в сугубо теоретической области кроме сосания машинного хуя ничего не сделать.

Цитата:
Flex, Bison (более древняя связка lex, yacc)
+1. Спирит бустовский не советую из-за его рантаймовости.
 
Ответить с цитированием

  #15  
Старый 04.03.2010, 02:31
Аватар для desTiny
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

Цитата:
Сообщение от nerezus  
Впизду такое счастье. Без теории в сугубо теоретической области кроме сосания машинного хуя ничего не сделать.
Он имел ввиду, что ТС поступил очень смело
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #16  
Старый 04.03.2010, 13:30
Аватар для rudvil
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Цитата:
Сообщение от _antony  
так в этих книжках как-раз и рассматривается построение "синтаксического дерева".
И про трансляцию я ничего не говорил. А вот синтаксический анализатор там рассмотрен.
Спасибо, почитаемс)
Цитата:
Сообщение от Gar|k  
зачем изобретать велосипед? ))

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

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

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

http://www.gamedev.ru/code/articles/?id=4229 - вот тут по работе с lex и т.д.
Полностью согласен, но! это не какойнибуть коммерческий проект где нужно все качественное и проверенное...
Я например пока писал с нуля грамматику и парсер много чего интерестного узнал), а если бы взял уже готовое, то даже и не подозревал-бы как там всё устроено...
Цитата:
Сообщение от nerezus  
+1. Спирит бустовский не советую из-за его рантаймовости.
от него я сразу отказался, слишком навороченный и дико долго компилит...

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

  #17  
Старый 14.05.2010, 14:02
Аватар для rudvil
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Есть маленькая непонятка с грамматикой(или это особенности парсера?), а именно с ebnf грамматикой, вот пример грамматики простых выражений
Цитата:
Сообщение от grammar  
expression = assignment_expression (',' assignment_expression)*;

assignment_expression = (unary_expression '=')[assign]* additive_expression;

additive_expression = multiplicative_expression (('+' | '-') multiplicative_expression)[additive]*;

multiplicative_expression = unary_expression (('*' | '/' | '%') unary_expression)[multiplicative]*;

unary_expression = (('+' | '-') unary_expression | postfix_expression);

postfix_expression = NAME[identifier] | NUM[number] | '(' expression ')';
Всё что в квадратных скобках, это как в boost::spirit semantic actions.
Если скормить эту грамматику boost::spirit и дать ему выражение
Цитата:
Сообщение от input  
a+b*c
то на выходе получим:
Цитата:
Сообщение от boost::spirit  
identifier a
identifier b
identifier c
multiplication
addition
т.е. постфиксную запись, тут проблем нету, с этим все понятно.
Но!, если дать следующее
Цитата:
Сообщение от input  
d=a+b*c
вывод будет таким:
Цитата:
Сообщение от boost::spirit  
identifier d
assign
identifier a
identifier a
identifier b
identifier c
multiplication
addition
т.е. повторяющийся идентификатор 'a', конечно если записать грамматику присваивания так
Цитата:
Сообщение от grammar  
assignment_expression = additive_expression ('=' additive_expression)[assign]*;
то повторений не будет, но тогда мы теряем правоассоциацивность(как-то так пишется, но это неважно - смысл я понимаю) оператора присваивания '='.
Собственно непонятно, эти повторения это нормально? или нужно искать другой выход из ситуации? спасибо.

з.ы. то-что спирит не обращайте внимания, он у меня всего-лишь как эталон, т.е. проверяю на корректность свой парсер сравнивая результаты с спиритом)))

Последний раз редактировалось rudvil; 14.05.2010 в 14:09..
 
Ответить с цитированием

  #18  
Старый 18.05.2010, 14:22
Аватар для rudvil
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

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

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

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

Например если записать в code.txt след.
Цитата:
Сообщение от code  
def main (argc, argv[]) {
print('Hello World!');
return 0;
}
то на выходе получим
Цитата:
Сообщение от parser_output  
func_def
func_body
return
return_expr
const_number
0
func_call_expr
arg_expr
const_string
Hello World!
name
print
params_expr
param_expr
array_subscript_expr
name
argv
param_expr
name
argc
name
main
затем из всего этого(постфиксная запись) создается(пока ещё не реализовано) абстрактное синтаксическое дерево, которое будет выглядеть вот так

Осталось доделать:
семантический анализатор, модуль исполнения кода.

з.ы. Модераторам - можно-ли переименовать тему на "Создание интерпретатора AIL"?

Последний раз редактировалось rudvil; 19.05.2010 в 13:26..
 
Ответить с цитированием

  #19  
Старый 18.05.2010, 15:22
Аватар для SergSob
SergSob
Новичок
Регистрация: 20.04.2010
Сообщений: 7
Провел на форуме:
16699

Репутация: 0
По умолчанию

а смысл? изобретаем велосипеды?
 
Ответить с цитированием

  #20  
Старый 19.05.2010, 11:20
Аватар для rudvil
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию

Цитата:
Сообщение от SergSob  
а смысл? изобретаем велосипеды?
Для опыта, да и наверняка у многих было желание написать свой яп))
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание языка програмирования Qws Болталка 34 15.06.2009 11:51
8 СПОСОБОВ УДЕРЖАТЬ ПОСЕТИТЕЛЯ ВОКРУГ СОБСТВЕННОГО КОММЕРЧЕСКОГО ПРОЕКТА В ИНТЕРНЕТ! KaZ@NoVa Статьи 7 06.01.2009 18:59
Создание виртуальных файловых систем в Linux _GaLs_ *nix 0 20.11.2006 20:05



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ