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

Пишем свой интерпретатор языка BASIC - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Меню и список http://www.cyberforum.ru/cpp-beginners/thread41194.html
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились:...
C++ Здравствуйте! Не могу поместить class в один файл с программой. file.hpp #include "Cat.hpp" // здесь классы "2)" Cat::Cat(int initialAge) { itsAge = initialAge; } Cat::~Cat() { http://www.cyberforum.ru/cpp-beginners/thread41186.html
Массивы строк C++
Привет всем! Задан массив строк. Как узнать который символ встечаетса найбольшое количество раз в етом массиве?
C++ вывод на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер
Please, help me!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо...
C++ Округление дробного числа до целого в большую сторону. http://www.cyberforum.ru/cpp-beginners/thread41139.html
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) ...
C++ Код из Delphi в C++ Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; ... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17826 / 6036 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 26
17.08.2009, 19:52
Цитата Сообщение от #pragma Посмотреть сообщение
Пыгает вроде.. у меня сами метки создаются в глобальной таблице,так что неважно,куда прыгать..
Я почему спросил. Если идёт GOTO вперёд, то в момент, когда ты его парсишь, метка ещё не создана, а потому куда переходить пока непонятно. Это тоже непростой момент

Цитата Сообщение от #pragma Посмотреть сообщение
Да,теперь мне понятна идея реализации,по крайней мере,направление.Незнаю почему,но когда кто-то целенаправленно объясняет,мозг воспринимает лучше,хотя в исходниках было то же самое.))
Интерпретатор - это всё-таки не программа школьного уровня по сортировке массива. Тут всё-таки нужны специфические навыки. Ну а в качестве первой серьёзной программы не каждый потянет. Собственно, никто не обещал, что будет легко

Цитата Сообщение от #pragma Посмотреть сообщение
Что мне не понятно: как будет организован while ,а также goto при такой реализации?
Если идея более-меняя ясна, сейчас попробую про операции передачи управления пояснить (чуть позже)

Цитата Сообщение от #pragma Посмотреть сообщение
А так вроде доходит потихоньку,что у нас будут данные,но присваивания и вообще опрерации над ними ещё не произведены,и будут сделаны после.
Промежуточное представление, это некий набор данных, который больше не будет меняться. Если бы мы писали компилятор, то с этого предстваления мы бы строили непосредственно код. Но поскольку у нас интерпретатор, то небольшая часть промежуточного представления будет меняться, а именно - значения переменных. Больше меняться ничего не должно. В своих примерах я Value делал в виде указателя (на некий динамический объект), но технически скорее всего будет удобнее внутри Variable хранить Value по значению (а не по ссылке)

Что касается компилятора - теоретически ничего не мешает нам его в будущем написать. Пусть код будет медленным и гавёным, но это будет рабочий код. В крайнем случае можно написать конвертор Бэйсик->Си. Но это так, к сведению. Пока мы пишем интерпретатор

Цитата Сообщение от #pragma Посмотреть сообщение
Как всегда,перекраивать надо с ног до головы
Я ж говорю, по большому счёту структура парсера особо и не менялась. Поменяется начинка. Один раз сделав ты на своей шкуре немного лучше начнёшь понимать, как изначально писать программу, пригодную для дальнейшей безболезненной перестановки с ног на голову

Добавлено через 6 минут 35 секунд
Вот так выглядят метка и операция GOTO. Всё это так же является частью поля Statement.data

C
1
2
3
4
5
6
7
8
9
10
11
struct
{
  // Тут по большому счёту для интерпретации ничего не надо, т.к. метка по своей
  // сути это пустой оператор, выполняющий точку привязки. Тут всякая отладочная
  // информация и больше ничего
} label;
struct
{
  // Указатель на statement, на который мы переходим
  Satament *label;
} goto;
Тут вроде бы с одной стороны просто, с другой стороны может показаться чемто нетривиальным и непонятным. Этот момент дальше нужно пояснять?
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru