Форум программистов, компьютерный форум 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
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
21.08.2009, 14:32     Пишем свой интерпретатор языка BASIC
Оформил в отдельную тему http://www.cyberforum.ru/cpp/thread47863.html
Если что непонятно - спрашивай там

Добавлено через 14 часов 20 минут 53 секунды
В общем думал, как работать с массивами, в итоге получилась примерно следующая концепция. У нас есть две независимые вещи: Value (числовое значение, которое может быть целым или плавающим) и String (строка, которую, как и во многих бэйсиках, ограничиваем размером в 255 байт). У переменной есть признак, она хранит Value или String. При этом в Value нельзя записывать String и наоборот.

Технически и в моей и в твоей реализации переменная содержит Value по значению. Думаю, что лучше делать по косвенности. Т.е. Value, хранимая в переменной, выделяется динамически (т.е. имеем поле Value_t *value). При этом выделяем фактически массив Value'ов. Если переменная скалярная (т.е. НЕ массив), то мы выделяем массив из 1 элемента, если же наша переменная массив - то мы выделяем массив из нужного количества элементов. Далее при разборе левой части присваивания мы фактически получаем указатель на нужное нам Value_t* (хоть для скалярной переменной, хоть для произвольного элемента массива).

Всё аналогично делается со String'ами, а переменная внутри себя через union рядышком хранит Valut_t* и String_t*. При этом признак Value или String хранится на всю переменную. Т.е. если мы имеем массив, то нельзя в одном элементе хранить строку, а вдругом число

Что касается синтаксиса, то видимо будет удобнее делать как у людей. Строковые переменные отмечать признаком $ на конце (т.е. этот символ входит в имя переменной, при этом в момент заведения новой переменной по этому символу мы понимаем, что будет храниться в переменной - строка или число)

Что касается регистра букв, то проще всего это локализовать в лексическом анализаторе. При чтении токена из файла для keyword'ов и ident'ов сразу переводить их в заглавные буквы. Тогда будет работать и "int" и "INT" и всё, что пожелаешь

По поводу типа переменной. У себя я предполагаю сделать примерно так: переменную можно использовать без дополнительного объявления. В этом случае тип будет "AUTO" (т.е. тип будет определяться записанным значением). Так же можно будет объявлять переменные через "DIM A AS INTEGER" (или как там правильно в синтаксисе). В этом случае тип переменной будет INT, FLOAT или STRING

Добавлено через 20 минут 32 секунды
Надо ещё при этом в промежуточном представлении как-то левую часть по другому описывать. Теперь там может быть не только переменная, но и элемент массива

Добавлено через 2 часа 12 минут 19 секунд
> Надо ещё при этом в промежуточном представлении как-то левую часть по другому описывать

В общем думать тут особо и нечего. Левая часть так же описывается в виде Expression. Только нужно при разборе понимать, что там допустимо только обращение к переменной или к элементу массива. А так же при обходе в момент интерпретации должно возвращаться не значение, а указатель на Value
 
Текущее время: 06:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru