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

Поиск:

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


Новичок



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

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



Это еще когда писал компилятор Паскаля на Делфи, чего-то там со вложенными процедурами не разобрался.
Ну, сейчас-то я примерно понимаю, как это должно выглядеть.
PM   Вверх
DEADHUNT
Дата 18.9.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



можно стэк списков.

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


Шустрый
*


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

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



TheVoid, так для С++ есть стандартизированная грамматика (то о чем я спрашивал раньше), не надо ничего выдумывать.

DEADHUNT, как это вручную сделать компилятор? не понимаю. какими методами. через LR синтаксис вручную сделать нереально. а семантику можно и вручную.
PM MAIL   Вверх
TheVoid
Дата 19.9.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Killerman, в учебных целях я занят реализацией ANSI C (см. первый пост). Логично, что 
Цитата

стандартизированная грамматика С++
 
сюда не катит.

(Ну если быть откровенным вначале хочу осилить только подмножество Си, поэтому есть смысл грамматику выдумывать самостоятельно).
PM   Вверх
DEADHUNT
Дата 19.9.2009, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Killerman @  19.9.2009,  00:07 Найти цитируемый пост)
через LR синтаксис вручную сделать нереально

реально, только вначале на листке надо будет составлять автоматные таблицы, а вообще я не говорил про LL/LR, я говорил про http://en.wikipedia.org/wiki/Recursive_descent_parser, не верится посмотри исходникики g++.
PM MAIL   Вверх
Killerman
Дата 19.9.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



DEADHUNT, не знаю, там токо 2-ве строчки про этот метод:
A recursive descent parser is a top-down parser built from a set of mutually-recursive procedures (or a non-recursive equivalent) where each such procedure usually implements one of the production rules of the grammar. Thus the structure of the resulting program closely mirrors that of the grammar it recognizes.

и все.

LR для С++ вручную не получится, так как там таблица будет дето 3000 X 100. если не больше

Добавлено через 9 минут и 38 секунд
Хотя в принципеесли оптимизировать, может быть и 3000Х20. но это всеравно не для ручной работы

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


Шустрый
*


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

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



Цитата(Killerman @  19.9.2009,  08:23 Найти цитируемый пост)
там токо 2-ве строчки про этот метод

зато пример парсера есть.
Цитата(Killerman @  19.9.2009,  08:23 Найти цитируемый пост)
Хотя в принципеесли оптимизировать, может быть и 3000Х20. но это всеравно не для ручной работы

ты хоть понимаешь что такое управляющая LR(1) таблица? строки состояния, столбцы входные аванцепочки. как ты собрался оптимизировать аванцепочки с 100 до 20? smile 
PM MAIL   Вверх
Killerman
Дата 19.9.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



DEADHUNT, я понимаю.  имею некоторый опыт. там идет оптимизация терминалов.

TheVoid, все же С++, это не просто цыклы или там списки присвоений.
там гемора хватает. хотябы с шаблонами. а ты делаешь не С++ и даже не С.

написал бы - хочу создать свой функциональный язык. и все

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


Шустрый
*


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

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



Цитата(Killerman @  19.9.2009,  20:39 Найти цитируемый пост)
там идет оптимизация терминалов.

терминалы нельзя оптимизировать. например терминалы a-z, A-Z как ты оптимизируешь, A-Z выкинешь? оптимизировать можно путём удаления эквивалентных состояний(у которых одинаковые "ядра" в LALR) и получить столько же состояний сколько в SLR анализаторе.
PM MAIL   Вверх
Killerman
Дата 19.9.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А что такое a-z, A-Z ? это не терминал никакой.

Добавлено через 32 секунды
вот почитай. полезная статья http://www.arbinada.com/main/node/54

Добавлено через 4 минуты и 13 секунд
кстати по этой ссылке http://en.wikipedia.org/wiki/Recursive_descent_parser написано:

Recursive descent parsers are particularly easy to implement in functional languages such as Haskell, Lisp or ML.

чето не вижу что оно такое же хорошее для сложный языков
PM MAIL   Вверх
DEADHUNT
Дата 19.9.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



A-Z - имелись ввиду как терминальные символы(из них идентификаторы состоят, просто для примера)
S -> aBcd
B -> Sa | e
в этой грамматике нетерминальные символы {S, B}, терминальные {a, c, d}
PM MAIL   Вверх
Killerman
Дата 19.9.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



и вообще в том примере по этой же ссылке грамматика не леворекурсионная. в EBNF форме.
там такие приколы как:

S:= S+M не прокатят

Добавлено через 1 минуту и 50 секунд
Цитата(DEADHUNT @ 19.9.2009,  22:19)
A-Z - имелись ввиду как терминальные символы(из них идентификаторы состоят, просто для примера)
S -> aBcd
B -> Sa | e
в этой грамматике нетерминальные символы {S, B}, терминальные {a, c, d}

ну здесь конечно никак.

PM MAIL   Вверх
DEADHUNT
Дата 19.9.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Killerman @  19.9.2009,  22:22 Найти цитируемый пост)
и вообще в том примере по этой же ссылке грамматика не леворекурсионная

это просто контекстно-свободная грамматика, только чтобы показать где терминалы, а где нетерминалы.
PM MAIL   Вверх
TheVoid
Дата 19.9.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ух, блин, что за дебаты.

Цитата(Killerman @  19.9.2009,  20:39 Найти цитируемый пост)
а ты делаешь не С++ и даже не С.написал бы - хочу создать свой функциональный язык. и все


Я написал вполне четко: вначале - подмножество Си, затем полный ANSI C.

PM   Вверх
DEADHUNT
Дата 19.9.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(TheVoid @  19.9.2009,  23:30 Найти цитируемый пост)
Я написал вполне четко: вначале - подмножество Си, затем полный ANSI C.

где-то валялась эта старая книга ANSI C, с не слишким подробным описанием C. лучше C99 к тому же уже разрабатывают C99-1X
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

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

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

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

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

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

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


     




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


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

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