Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Плутон
13 / 13 / 4
Регистрация: 29.06.2011
Сообщений: 85
#1

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

05.10.2012, 22:43. Просмотров 3473. Ответов 9
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане!

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

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

Завтра выложу примеры программ на моём языке.
0
Вложения
Тип файла: pdf Описание.pdf (347.1 Кб, 147 просмотров)
Тип файла: 7z MatLang.7z (668.3 Кб, 122 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2012, 22:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интерпретатор небольшого языка программирования на С++ (C++):

По русскому названию языка программирования определить английское название этого языка - C++
Задача на перечисляемый тип P=(ада, бейсик, модула2, лисп, паскаль, пл2, фортран); A=(ada, basic, modula2, lisp, paskal, pl1. fortran);

Не удается откомпилировать интерпретатор М-языка - C++
Задача: взять интерпретатор М-языка на сайте http://cmcmsu.no-ip.info/2course/model.lang.parser.sample.htm и переработать его, добавив в...

Написать интерпретатор программного языка -помощь - C++
Здраствуйте! Ребят, кто хорошо разбирается в C++ помогите пожалуйста с реализацией данного задания или хотя бы подтолкните к решению,...

Пишем свой интерпретатор языка BASIC - C++
***************** Благодаря форуму и Evg в частности интерпретатор развивается, потихоньку превращаясь в простенький интерпретатор...

Интерпретатор/компилятор ассемблер-подобного языка - C++
Привет! Чую, что изобрёл велисипед, даже скорее велопарк, но всё же, поделюсь: Некоторое время назад начал изучать кресты, в целом...

Написать Интерпретатор Программного Языка(собственного) - C++
Здраствуйте! Кто знает C++ помогите пожалуйста с реализацией данного задания!!! Пожалуйста, очень надо. сроки поджимают. Есть...

9
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
05.10.2012, 23:53 #2
Для обработки ошибок, используй регулярные выражения. Буст в помощь.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
06.10.2012, 00:13 #3
Регулярные выражения никак не помогут в обработке ошибок, в данной задаче они применимы лишь для формирования токенов.
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
06.10.2012, 01:03 #4
Герц, мы парсим исходник, и ищем ошибки. или вы по другому хотите искать ошибки в текстовом файле(коим исходник и является)?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.10.2012, 01:12 #5
Регэкспами по большей части пользуется лексер. Для синтаксического анализа они подходят, скажем, не всегда. Конечные автоматы не умеют рекурсию/стек, а не все грамматики являются регулярными.
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
06.10.2012, 01:23 #6
~OhMyGodSoLong~, Jedem das seine
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.10.2012, 03:31 #7
Плутон, зависит от желаемого поведения при нахождении первой ошибки. Варианта два - либо идти по коду дальше, либо останавливаться сразу.
По первому варианту - можно кидать исключение, можно возвращать код ошибки.
По второму варианту - можно сохранять в некий массив ошибок (можно оформить как класс) код очередной найденной ошибки. Затем после парсинга этот массив проверяется на пустоту (или дергается соответствующий метод у класса). Если он не пуст, то юзеру по кодам ошибок выводятся соответствующие сообщения.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.10.2012, 03:51 #8
Цитата Сообщение от Invader_Zim Посмотреть сообщение
Герц, мы парсим исходник, и ищем ошибки. или вы по другому хотите искать ошибки в текстовом файле(коим исходник и является)?
пфф
проблемы скорее на этапе синтаксического, а не лексического разбора
по ходу разбора грамматики не удается свернуть цепочку, и нужно пользователю отдать какую-то адекватную ошибку
но вообще это выглядит не очень тривиальным
0
ProNoooob
75 / 75 / 6
Регистрация: 14.10.2009
Сообщений: 121
06.10.2012, 05:04 #9
https://github.com/PokimonZerg/6y6yka-Lisp
Мой простенький интерпретатор лиспа.
Есть и более новая версия, где генерируется байткод. Но та что по ссылке проверена и работает ^_^

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

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

Добавлено через 1 час 10 минут
Решил всё-таки строить синт. дерево. Понадобится для циклов и главное функций.
0
06.10.2012, 10:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2012, 10:22
Привет! Вот еще темы с ответами:

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

Выбор языка программирования - C++
Здравствуйте! Вопрос не в тему. Просто не знал в какой раздел написать. Необходимо создать программу для создания и расчета смет....

Напутствие с выбором языка программирования - C++
Здравствуйте нужна помощь от опытных участников в нескольких вопросах 1) Нормально ли пойдет C++ как первый язык программирование или...

Выбор языка программирования ООП - C++
Программирую на php&mysql. Знаю Си. (Си изучал чтобы написать модулей для php). Хотелось бы изучить ООП вот только в качестве...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru