Модераторы: Snowy, Poseidon

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Разработка компилятора языка C 
V
    Опции темы
DEADHUNT
Дата 10.9.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(Killerman @  9.9.2009,  23:05 Найти цитируемый пост)
ну для С++ нужны 2-ва последних. 

это кто тебе сказал? я например первый использую(g++ кстати тоже первый способ)
PM MAIL   Вверх
Killerman
Дата 11.9.2009, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



рекурсивный спуск (LL)? так оно токо для простеньких грамматик.

Добавлено через 1 минуту и 20 секунд
и возьни много. убирать левую рекурсию. Убирать е-правила.
А LR очень наглядно работает.
PM MAIL   Вверх
DEADHUNT
Дата 11.9.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(Killerman @  11.9.2009,  00:52 Найти цитируемый пост)
рекурсивный спуск (LL)? так оно токо для простеньких грамматик.

рекурсивный спуск(если не знаешь что такое посмотри в книжке) != LL(k)
по твоему кроме LL/LR анализаторов больше никак нельзя провести синтаксический анализ(и без всяких Эрли и Коко-Янгера-Косами(CYK))?
PM MAIL   Вверх
Killerman
Дата 11.9.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Я пользуюсь тем чем умею. LL мне не подходит.
О Эрли и Коко-Янгера-Косами(CYK) не слышал или не сшышал под таким названием. Это что, методы рекурсивного спуска? и без левой рекурсии??
PM MAIL   Вверх
Killerman
Дата 11.9.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



А вот, нашел метод (CYK). Ну так тут грамматику нужно преобразоввывать к нормальной форме Хомского. Толку мне с нее потом.

Короче вопрос ушел от темы похоже.  smile 


Это сообщение отредактировал(а) Killerman - 11.9.2009, 15:22
PM MAIL   Вверх
DEADHUNT
Дата 11.9.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(Killerman @  11.9.2009,  15:15 Найти цитируемый пост)
А вот, нашел метод (CYK). Ну так тут грамматику нужно преобразоввывать к нормальной форме Хомского. Толку мне с нее потом.

Короче вопрос ушел от темы похоже.  smile 

поэтому в gcc ничего этого не используется. рекурсивный спуск: http://en.wikipedia.org/wiki/Recursive_descent_parser

Это сообщение отредактировал(а) DEADHUNT - 11.9.2009, 15:59
PM MAIL   Вверх
Killerman
Дата 16.9.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



и какой там метод?
PM MAIL   Вверх
wester
Дата 16.9.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: нет
Всего: 13



а работы начались хотя бы ? или все разговоры затихли на теме рекурсии ?
PM MAIL   Вверх
TheVoid
Дата 16.9.2009, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Цитата(wester @  16.9.2009,  17:36 Найти цитируемый пост)
затихли на теме рекурсии

Начались. Можно даже сказать, идут полным ходом. 
Блог не обновлялся длительное время, позже займусь этим. За одно опубликую исходники.

Это сообщение отредактировал(а) TheVoid - 18.9.2009, 11:27
PM   Вверх
Killerman
Дата 17.9.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Для создания компилятора нужно выбрать тип синтаксического анализатора. а также на чем он будет создаваться. не вручную же.
PM MAIL   Вверх
DEADHUNT
Дата 18.9.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(Killerman @  17.9.2009,  22:34 Найти цитируемый пост)
Для создания компилятора нужно выбрать тип синтаксического анализатора. а также на чем он будет создаваться. не вручную же. 

вручную smile , да и вообше front-end не самая сложная часть компилятора, намного сложнее сделать хорошо оптимизирующий back-end(basic-blocks, control flow graph, DJ graph, data-flow analysis, SSA, register interference graph,...).

Это сообщение отредактировал(а) DEADHUNT - 18.9.2009, 13:42
PM MAIL   Вверх
TheVoid
Дата 18.9.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Так, сейчас читаю труды Свердлова - "Языки программирования и методы трансляции", интересно изложено, впитывается организмом лучше, чем Дракон smile
Но у меня возникли трудности с грамматикой моего языка (не в смысле моего собственного, а того подмножества Си, что я выбрал) : не знаю, правильно ли набросал. Вот:

Код

translation_unit        :       external_decl translation_unit
                        |       external_decl
                        ;
external_decl           :       function_definition
                        |       decl
                        ;
function_definition     :       decl_specs declarator compound_stat
                        ;
decl                    :       decl_specs ';'
                        ;
decl_list               :       decl decl_list
                        |       decl
                        ;
decl_specs              :       type_spec decl_specs
                        |       type_spec
                        ;
type_spec               :       'void' | 'char' | 'short' | 'int'
                        |       'signed' | 'unsigned'
                        ;
declarator              :       direct_declarator
                        ;
direct_declarator       :       id '(' param_type_list ')'
                        |       id
                        ;
param_type_list         :       param_list
                        ;
param_list              :       param_decl ',' param_list
                        |       param_decl
                        ;
param_decl              :       decl_specs declarator
                        |       decl_specs
                        ;
stat                    :       exp_stat
                        |       compound_stat
                        |       if_stat
                        |       return_stat
                        ;
exp_stat                :       exp ';'
                        |       ';'
                        ;
compound_stat           :       '{' decl_list stat_list '}'
                        |       '{' stat_list '}'
                        |       '{' decl_list '}'
                        |       '{' '}'
                        ;
stat_list               :       stat stat_list
                        |       stat
                        ;
if_stat                 :       'if' '(' exp ')' stat 'else' stat
                        |       'if' '(' exp ')' stat 
                        ;
return_stat             :       'return' exp ';'
                        |       'return' ';'
                        ;
exp                     :       assignment_exp ',' exp
                        |       assignment_exp
                        ;
assignment_exp          :       unary_exp assignment_operator assignment_exp
                        |       conditional_exp
                        ;
assignment_operator     :       '='
                        ;
conditional_exp         :       equality_exp
                        ;
equality_exp            :       relational_exp '==' equality_exp
                        |       relational_exp '!=' equality_exp
                        |       relational_exp
                        ;
relational_exp          :       additive_exp '<' relational_exp
                        |       additive_exp '>' relational_exp
                        |       additive_exp '<=' relational_exp
                        |       additive_exp '>=' relational_exp
                        |       additive_exp
                        ;
additive_exp            :       mult_exp '+' additive_exp
                        |       mult_exp '-' additive_exp
                        |       mult_exp
                        ;
mult_exp                :       unary_exp '*' mult_exp
                        |       unary_exp '/' mult_exp
                        |       unary_exp
                        ;
unary_exp               :       postfix_exp
                        |       unary_operator unary_exp
                        ;
unary_operator          :       '+' | '-' | '!'
                        ;
postfix_exp             :       primary_exp '(' argument_exp_list ')'
                        |       primary_exp '(' ')'
                        |       primary_exp
                        ;
primary_exp             :       id
                        ;
argument_exp_list       :       assignment_exp ',' argument_exp_list
                        |       assignment_exp
                        ;


По идее, на текущем этапе заполняется таблица имен и создается ситаксическое дерево, которое я заменю четверками. Буду признателен за комментарии (а то я что-то ничего не спрашиваю, как-то молча все стряпаю и обижаюсь, что никому нет дела smile )


Это сообщение отредактировал(а) TheVoid - 18.9.2009, 20:45
PM   Вверх
DEADHUNT
Дата 18.9.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



а семантических правил ещё нету?
PM MAIL   Вверх
TheVoid
Дата 18.9.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 18.6.2009

Репутация: нет
Всего: нет



Нет, к контекстному анализу еще не дошел. Вообще, раньше всегда обламывался с Таблицей имен - не знал, как правильно организовать.

К счастью, нашел отличную тулзу VisualBNF - она поможет решить вопросы с грамматикой. 
PM   Вверх
DEADHUNT
Дата 18.9.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Цитата(TheVoid @  18.9.2009,  22:11 Найти цитируемый пост)
раньше всегда обламывался с Таблицей имен - не знал, как правильно организовать.

а в чём проблема, список не мог организовать(лучше hash таблицу)?
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

Внимание:
В этом форуме обсуждаются вопросы только по совместным проектам, когда Вы хотите найти партнёров или стать участником проекта.
Запрещается размещение заказов на написание программ, поиск работников (для этого есть раздел "Работа") и реклама своих сетевых ресурсов.

Этот раздел только для проектов в которых Вы будете выступать в качестве исполнителя!

Темы и сообщения, не удовлетворяющие данным правилам, будут удаляться на основании пункта 3 Правил форума!

  • Человек, создающий тему, становится руководителем проекта. Все вопросы о разработке решаются с его согласия.
  • Публикация предложения к сотрудничеству считается защищённым авторскими правами и не может разрабатываться без согласия с руководителем проекта.
  • Конечный продукт должен содержать указание на всех участников и Vingrad.

  • Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, Poseidon

     
    1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
    0 Пользователей:
    « Предыдущая тема | Совместные проекты/поиск партнёров | Следующая тема »


     




    [ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


    Реклама на сайте     Информационное спонсорство

     
    По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
    Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.