Форум программистов, компьютерный форум 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
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,352
Записей в блоге: 26
17.10.2009, 18:19     Пишем свой интерпретатор языка BASIC
Цитата Сообщение от #pragma Посмотреть сообщение
Правда насчёт PRINT я немного не понял,зачем делать для него CALL,в смысле что его реализация может зависеть от платформы?
Смысл этих действий в том, чтобы из промежуточного представления исключить "лишние" операторы и оставить минимально необходимый набор. С минимальным набором ты уже сталкивался - это построение операций управления. При этом получалось так, что добавляя новые конструкции языка ты вообще никак не затрагивал интерпретатор и промежуточное представление. С остальными операторами по большому счёту то же самое: промежуточное представление и интерпретацию не меняем, а меняем лишь "крайние" компоненты. Технически такая схема всегда более оправдана, т.к. при добавлении новой функциональности ограничиваешься минимально необходимыми правками, не меняющими логику работы интерпретации.

Да и в случае print'а. "Внизу" ты делаешь "тупую" реализацию: на входе получаешь набор Value'ов и тупо его распечатываешь. При этом "вылизывание" семантики PRINT'а в соответствии с тем, как оно должно быть в настоящем бэйсике, делается только "наверху" в момент синтаксического разбора. У тебя сейчас PRINT неправильно работает, но предположим, он работает правильно. Тогда для конструкции

PureBasic
1
PRINT "A=" ; A ; " B=", B
будет просто вызвана процедура __print, параметрами которой является следующий список значений:

строка "A="
целое (или плвающее) A
строка " B="
строка "\t" (табуляция) - т.к. там стоИт запятая, а не точка с запятой
целое (или плвающее) B
строка "\n" (перевод строки) - т.к. в конце у нас нет символа ";"

В итоге всю языковую семантику мы обрабатываем "сверху" в синтаксической части (которая напрямую завязана на язык), а выполняем примитивные действия "внизу" - т.к. там нам нужно лишь напечатать, а всякие форматы и что да как задаётся - пусть это решает та часть, которая отвечает за входной язык

То же самое касается всех остальных операторов языка. Например, что касается LINE, то процедура "__line" должна тупо рисовать линию от одной точки до другой с заданным цветом. А вот в случае, если цвет не задан, то пусть "наверху" языковая часть решает, каким цветом надо рисовать в тех случаях, если цвет явно не указан. Это не задача процедуры "__line", это задача языковой части. Или, например, вроде бы возможно написать "LINE - (100, 100)", что означает линию от последней поставленной точки до точки (100,100). Опять-таки, пусть это решается "наверху", и в конечном итоге позовётся "__line" со всеми нужными параметрами

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

Добавлено через 2 минуты
Что-то опции нифига не работают. Да и посмотреть хотелось не трассу исполнения, а просто все операторы промежуточного представления
 
Текущее время: 22:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru