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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Меню и список http://www.cyberforum.ru/cpp-beginners/thread41194.html
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились: Введите элемент и номер. вот сам код: #ifndef __list_h #define __list_h #include <iostream>
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!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо исправить код, чтоб фигуры не исчезали за экран (т.е. 640х460) и были компактным набором, т.е. двигались неменяя своего положения относительно друг друга и стукаясь об стенку экрана меняли свое...
C++ Округление дробного числа до целого в большую сторону. http://www.cyberforum.ru/cpp-beginners/thread41139.html
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) программа не округляет это число (в большую сторону) до 4. Перелопатил тонны литературы, но пропустил или не нашёл этого, большая просьба написать функцию которая могла бы это делать, или способ какой.
C++ Код из Delphi в C++ Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; var d:array of longint; procedure c; var a,b,i:longint; подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
17.08.2009, 19:52     Пишем свой интерпретатор языка BASIC
Цитата Сообщение от #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;
Тут вроде бы с одной стороны просто, с другой стороны может показаться чемто нетривиальным и непонятным. Этот момент дальше нужно пояснять?
 
Текущее время: 05:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru