Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2013, 01:05   #1
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию Разработка компилятора.АТ грамматика.

Здравствуйте товарищи, я учусь на 1 курсе магистратуры и разрабатываю компилятор.
Лексический анализ и Синтаксический анализ я сделал (LL(1) грамматика). Теперь подступил, точнее уже 2 недели не могу разобраться, с тем как мою LL(1) грамматику превратить с атрибутную грамматику. Проблема заключается в том, что я не понимаю как мне присобачить семантические правила, и распознать их в правило не терминала(моя сущность Rule). То бишь будет строчка A=+BC { семантическое правило }. Как разобрать что значит это семантическое правило и как его формализовать я не понимаю. Никакими yacc lex пользоваться нельзя, поэтому для лексического анализатора и синтаксического анализатора написаны свои парсеры( в случае синтаксического анализатора написан парсер правил грамматики). Ещё я не понимаю как сделать LL(1) грамматику в атрибутную по той причине, что атрибутная грамматика д/б приведённой - что значит быть без эпсилон правил. Если я сделаю её приведенной (напишу алгоритм для преобразования грамматики LL(1) в приведённую LL(1)) то она станет громоздкой и совершенно не поддерживаемой человеком(правил наплодится куча) и как прописывать потом семантические правила к этой горе "мусора" я не представляю.
Если кто занимался написания компилятора, подскажите пожалуйста.

Возможно я не всё написал, это лишь поток мысли, если будут вопросы поконкретнее я отвечу, заранее благодарствую.
P.S. разрабатываю на java. Компилятор - подмножество языка pascal.
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 05.05.2013, 16:14   #2
skyblade
Новичок
Джуниор
 
Регистрация: 05.05.2013
Сообщений: 1
По умолчанию

Вряд ли вопрос будет решен кем-то, кроме самого топикстартера. Думаю, можно попытаться посмотреть исходники других компиляторов похожего принципа действия.
ПыСы: Специально зарегестрировался, чтобы ответить
skyblade вне форума Ответить с цитированием
Старый 05.05.2013, 17:07   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
это лишь поток мысли
превратившийся в поток непонятно чего.
Ваш вопрос такой же понятный как и сон верблюда в полярную ночь.
Человек_Борща вне форума Ответить с цитированием
Старый 05.05.2013, 17:33   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сколько много новых академических терминов...
Я когда свой компиль делал как-то не задумывался о... короче тех словах что в топе. Неужели обязательно все это знать чтоб сделать хорошее ПО?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.05.2013, 18:37   #5
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Сколько много новых академических терминов...
Я когда свой компиль делал как-то не задумывался о... короче тех словах что в топе. Неужели обязательно все это знать чтоб сделать хорошее ПО?
А что мог делать твой компиль? И как ты его делал?)
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Старый 05.05.2013, 18:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что мог? Компилировать )
Цитата:
как ты его делал?)
Нишутясебе:
http://www.programmersclub.ru/%D0%9A...D%D0%B8%D1%8F/

Вот пара исходников оставшихся на память:
Код:
(main
 (:= pi 3.1415)
 (:= e
   (* (+ 2 2)
    (/ 18
      (+ 32 (sin (/ pi 3.4)))
    )
   )
 )
)
Код:
(func foo
 (+= c 5)
)

(main
 (:= a (array 7 8 9 10))
 (foreach m a (:= m 100) )

 (/call foo)
 (/-= c 1)
 (/write '%d' c)
 (/readkey)
)
Жаль что проект прервать пришлось.
Зато сейчас это вылилось в интерпретатор, который кое-что вращает на работе (хотелось всего и сразу и кроссплатформенно). Так что с компилятором покончил.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.05.2013, 19:53   #7
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

Уууу ну до генерации кода мне ещё далеко, а сдавать уже через неделю.

Дай бог аннотированное дерево разбора успею сделать, чтобы заполнить все нужные таблицы и проверить чтобы типы совпадали и scope не пересекались.
А по ссылке, фигня какая-то, там парень просто вручную забил код программы на asm и залил в файл и скомпилил потом программой fasm. А мне нужно автоматически считать программу, проверить подходит ли она по языку написания, потом проверить семантику языка(типы, области видимости и прочее) потом сформировать код в промежуточный язык и в уже в конце по сформированному файлу с промежуточным языком(триады) перенести в asm код скомпилировать masmом и получить exe файл.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
превратившийся в поток непонятно чего.
Ваш вопрос такой же понятный как и сон верблюда в полярную ночь.
Всё достаточно просто. Я получается, пишу свой мини yacc анализатор. И у меня были проблемы с пониманием реализации. Вроде понял, но пока не могу реализовать, думал мб кто делал тут подобное (свой компилятор от начала до конца) и может подсобить по сабжу. Естественно это учебная разработка, поэтому всякие оптимизации мне нужно. Нужно считать программу, проанализировать на правильность и собрать exe файл который делает, то что описано в программе.
За помощь: Нажмите на весы слева от сообщения!

Последний раз редактировалось Stilet; 05.05.2013 в 20:52.
savva вне форума Ответить с цитированием
Старый 05.05.2013, 20:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
там парень просто вручную забил код программы
Это только первая статья )
Их всего 5 или 6. Ленишься прочитать - твое дело. Я не навязываю.
Цитата:
и скомпилил потом программой fasm.
Сразу видно - статью не читал.

Кстати:
Цитата:
Нужно считать программу, проанализировать на правильность и собрать exe файл который делает, то что описано в программе.
и
Цитата:
до генерации кода мне ещё далеко, а сдавать уже через неделю.
Попадос я смотрю. Может купить преподавателя?
I'm learning to live...

Последний раз редактировалось Stilet; 05.05.2013 в 20:56.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формальная грамматика lawliet93 Помощь студентам 0 18.08.2012 23:39
грамматика haM Microsoft Office Word 4 21.02.2012 10:33
Разработка компилятора Чай_ник Помощь студентам 20 17.01.2011 17:25
vba - грамматика tyrus2 Microsoft Office Word 1 30.06.2010 15:33