Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как пишется компилятор?

6.7K
19 апреля 2004 года
doctoralexandr
3 / / 14.04.2004
Здравствуйте.
Необходимо написать интерпретатор языка.
Посоветуйте, пожалуйста, с чего начать.

Подскажите какие в этой задаче этапы. И как их можно осуществить.
929
19 апреля 2004 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by doctoralexandr
Здравствуйте.
Необходимо написать интерпретатор языка.
Посоветуйте, пожалуйста, с чего начать.

Подскажите какие в этой задаче этапы. И как их можно осуществить.


Этапы следующие:
лексический анализатор - для разбиения текста программы на лексемы (ключевые слова, идентификаторы, операторы и т.п.);
синтаксический анализатор - он работает в паре с лексическим и проверяет на правильность лексемы;
семантический анализатор - он проверяет уже правильность построения из лексем конструкций языка.

6.7K
20 апреля 2004 года
doctoralexandr
3 / / 14.04.2004
Цитата:
Originally posted by sp999

Этапы следующие:
лексический анализатор - для разбиения текста программы на лексемы (ключевые слова, идентификаторы, операторы и т.п.);
синтаксический анализатор - он работает в паре с лексическим и проверяет на правильность лексемы;
семантический анализатор - он проверяет уже правильность построения из лексем конструкций языка.


Ну это немного понятно. Хотелось бы узнать более подробно.
Лексический анализатор - как я понимаю для выделения лексемы (например ключевого слова), его надо где-нибудь хранить. Например, в массиве. Так?
Дальше, если слово (лексема) не ключевое слово, то, скорее всего, это идентификатор (или имя процедуры). Иначе - синтаксическая ошибка. Правильно?
Если идентификатор - то его надо где-нибудь хранить. Например, в динамическом списке, у которого полями являются название, тип, значение.
Вот у меня какой вопрос тогда появляется одним из первых: Какую структуру данных организовать для хранения идентификатора.
Я предполагаю, что у нас поле name имеет тип string, type - Pointer, которому будем присваивать указатели на различные типы. Например, type := PInteger;
Соответственно значение идентификатора должно храниться по адресу type^
Правильно? Или я ошибаюсь?

Для начала хотелось бы прояснить эти вопросы...



Фу-у-у. Сам еле понял что написал... :-)

929
20 апреля 2004 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by doctoralexandr

Ну это немного понятно. Хотелось бы узнать более подробно.
Лексический анализатор - как я понимаю для выделения лексемы (например ключевого слова), его надо где-нибудь хранить. Например, в массиве. Так?
Дальше, если слово (лексема) не ключевое слово, то, скорее всего, это идентификатор (или имя процедуры). Иначе - синтаксическая ошибка. Правильно?
Если идентификатор - то его надо где-нибудь хранить. Например, в динамическом списке, у которого полями являются название, тип, значение.
Вот у меня какой вопрос тогда появляется одним из первых: Какую структуру данных организовать для хранения идентификатора.
Я предполагаю, что у нас поле name имеет тип string, type - Pointer, которому будем присваивать указатели на различные типы. Например, type := PInteger;
Соответственно значение идентификатора должно храниться по адресу type^
Правильно? Или я ошибаюсь?

Для начала хотелось бы прояснить эти вопросы...



Фу-у-у. Сам еле понял что написал... :-)


Думаю, тема слишком обширная, чтобы все тут пояснить %)
Вот ссылка на неплохую статью
http://www.cast.h1.ru/Articles/compiler_writes_as.shtml
Можешь сам еще в инете поискать.
(Жаль, что по мылу нельзя реальные книги посылать, а то нас в универе препод учила по своей книжке на эту тему - там все было разжевано ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог