Форум программистов, компьютерный форум CyberForum.ru

Интерпретатор небольшого языка программирования на С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Плутон
13 / 13 / 4
Регистрация: 29.06.2011
Сообщений: 85
05.10.2012, 22:43     Интерпретатор небольшого языка программирования на С++ #1
Здравствуйте, уважаемые форумчане!

Я тут где-то год назад прочитал тему Evg и #pragma о создании интерпретатора, меня эта тема очень заинтересовала.
Я изучаю книги, читаю статьи по разработке компиляторов и интерпретаторов. В этой теме хочу описать свой небольшой математический язык программирования(назв. - MatLang) и интерпретатор для него, написанный на C++.
Язык MatLang - интерпретируемый язык программирования с переменными, встроенными функциями и математическими действиями
Описание языка во вложении.
Скоро напишу примеры программ.

Интерпретатор состоит из двух частей: лексического и синтаксического анализатора. Лексический анализатор считывает операторы программы из стандартного потока ввода(stdin). Синтаксический анализатор работает методом нисходящего рекурсивного спуска. Он не строит синтаксического дерева, а вместо этого "на ходу" производит исполнение программы.
Главный недостаток компилятора: отсутствие адекватной системы сигнализации об ошибках. Насчёт неё хотел бы посоветоваться с Вами.

Завтра выложу примеры программ на моём языке.
Вложения
Тип файла: pdf Описание.pdf (347.1 Кб, 136 просмотров)
Тип файла: 7z MatLang.7z (668.3 Кб, 111 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
05.10.2012, 23:53     Интерпретатор небольшого языка программирования на С++ #2
Для обработки ошибок, используй регулярные выражения. Буст в помощь.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.10.2012, 00:13     Интерпретатор небольшого языка программирования на С++ #3
Регулярные выражения никак не помогут в обработке ошибок, в данной задаче они применимы лишь для формирования токенов.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
06.10.2012, 01:03     Интерпретатор небольшого языка программирования на С++ #4
Герц, мы парсим исходник, и ищем ошибки. или вы по другому хотите искать ошибки в текстовом файле(коим исходник и является)?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.10.2012, 01:12     Интерпретатор небольшого языка программирования на С++ #5
Регэкспами по большей части пользуется лексер. Для синтаксического анализа они подходят, скажем, не всегда. Конечные автоматы не умеют рекурсию/стек, а не все грамматики являются регулярными.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
06.10.2012, 01:23     Интерпретатор небольшого языка программирования на С++ #6
~OhMyGodSoLong~, Jedem das seine
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.10.2012, 03:31     Интерпретатор небольшого языка программирования на С++ #7
Плутон, зависит от желаемого поведения при нахождении первой ошибки. Варианта два - либо идти по коду дальше, либо останавливаться сразу.
По первому варианту - можно кидать исключение, можно возвращать код ошибки.
По второму варианту - можно сохранять в некий массив ошибок (можно оформить как класс) код очередной найденной ошибки. Затем после парсинга этот массив проверяется на пустоту (или дергается соответствующий метод у класса). Если он не пуст, то юзеру по кодам ошибок выводятся соответствующие сообщения.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.10.2012, 03:51     Интерпретатор небольшого языка программирования на С++ #8
Цитата Сообщение от Invader_Zim Посмотреть сообщение
Герц, мы парсим исходник, и ищем ошибки. или вы по другому хотите искать ошибки в текстовом файле(коим исходник и является)?
пфф
проблемы скорее на этапе синтаксического, а не лексического разбора
по ходу разбора грамматики не удается свернуть цепочку, и нужно пользователю отдать какую-то адекватную ошибку
но вообще это выглядит не очень тривиальным
ProNoooob
71 / 71 / 6
Регистрация: 14.10.2009
Сообщений: 121
06.10.2012, 05:04     Интерпретатор небольшого языка программирования на С++ #9
https://github.com/PokimonZerg/6y6yka-Lisp
Мой простенький интерпретатор лиспа.
Есть и более новая версия, где генерируется байткод. Но та что по ссылке проверена и работает ^_^

Судя по описанию у вас совсем простенький язык. Даже без возможности определения процедур.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2012, 10:22     Интерпретатор небольшого языка программирования на С++
Еще ссылки по теме:

Задание: разработать "Интерпретатор языка". С чего начать? C++
По русскому названию языка программирования определить английское название этого языка C++
Не удается откомпилировать интерпретатор М-языка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Плутон
13 / 13 / 4
Регистрация: 29.06.2011
Сообщений: 85
06.10.2012, 10:22  [ТС]     Интерпретатор небольшого языка программирования на С++ #10
Цитата Сообщение от I.M. Посмотреть сообщение
Плутон, зависит от желаемого поведения при нахождении первой ошибки. Варианта два - либо идти по коду дальше, либо останавливаться сразу.
По первому варианту - можно кидать исключение, можно возвращать код ошибки.
По второму варианту - можно сохранять в некий массив ошибок (можно оформить как класс) код очередной найденной ошибки. Затем после парсинга этот массив проверяется на пустоту (или дергается соответствующий метод у класса). Если он не пуст, то юзеру по кодам ошибок выводятся соответствующие сообщения.
Моя тактика - остановка сразу. Спасибо за идею с исключениями!

Добавлено через 57 секунд
Цитата Сообщение от ProNoooob Посмотреть сообщение
Судя по описанию у вас совсем простенький язык. Даже без возможности определения процедур.
Процедуры будут позже.

Добавлено через 1 час 10 минут
Решил всё-таки строить синт. дерево. Понадобится для циклов и главное функций.
Yandex
Объявления
06.10.2012, 10:22     Интерпретатор небольшого языка программирования на С++
Ответ Создать тему
Опции темы

Текущее время: 16:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru