![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 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.
За помощь: Нажмите на весы слева от сообщения!
|
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 05.05.2013
Сообщений: 1
|
![]()
Вряд ли вопрос будет решен кем-то, кроме самого топикстартера. Думаю, можно попытаться посмотреть исходники других компиляторов похожего принципа действия.
ПыСы: Специально зарегестрировался, чтобы ответить ![]() |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Ваш вопрос такой же понятный как и сон верблюда в полярную ночь. |
|
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Сколько много новых академических терминов...
Я когда свой компиль делал как-то не задумывался о... короче тех словах что в топе. Неужели обязательно все это знать чтоб сделать хорошее ПО?
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 225
|
![]()
А что мог делать твой компиль? И как ты его делал?)
За помощь: Нажмите на весы слева от сообщения!
|
![]() |
![]() |
![]() |
#6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Что мог? Компилировать )
Цитата:
http://www.programmersclub.ru/%D0%9A...D%D0%B8%D1%8F/ Вот пара исходников оставшихся на память: Код:
Код:
Зато сейчас это вылилось в интерпретатор, который кое-что вращает на работе (хотелось всего и сразу и кроссплатформенно). Так что с компилятором покончил.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 225
|
![]()
Уууу ну до генерации кода мне ещё далеко, а сдавать уже через неделю.
Дай бог аннотированное дерево разбора успею сделать, чтобы заполнить все нужные таблицы и проверить чтобы типы совпадали и scope не пересекались. А по ссылке, фигня какая-то, там парень просто вручную забил код программы на asm и залил в файл и скомпилил потом программой fasm. А мне нужно автоматически считать программу, проверить подходит ли она по языку написания, потом проверить семантику языка(типы, области видимости и прочее) потом сформировать код в промежуточный язык и в уже в конце по сформированному файлу с промежуточным языком(триады) перенести в asm код скомпилировать masmом и получить exe файл. Всё достаточно просто. Я получается, пишу свой мини yacc анализатор. И у меня были проблемы с пониманием реализации. Вроде понял, но пока не могу реализовать, думал мб кто делал тут подобное (свой компилятор от начала до конца) и может подсобить по сабжу. Естественно это учебная разработка, поэтому всякие оптимизации мне нужно. Нужно считать программу, проанализировать на правильность и собрать exe файл который делает, то что описано в программе.
За помощь: Нажмите на весы слева от сообщения!
Последний раз редактировалось Stilet; 05.05.2013 в 20:52. |
![]() |
![]() |
![]() |
#8 | ||||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Их всего 5 или 6. Ленишься прочитать - твое дело. Я не навязываю. Цитата:
Кстати: Цитата:
Цитата:
I'm learning to live...
Последний раз редактировалось Stilet; 05.05.2013 в 20:56. |
||||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Формальная грамматика | 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 |