Форум программистов, компьютерный форум 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
19.08.2009, 20:17     Пишем свой интерпретатор языка BASIC
Expression нет смысла провязывать в цепочку. Это же по сути дерево. Statement'ы мы в цепочку провязываем для того, чтобы всё это потом обходить последовательно. Т.е. вместо Value у тебя будет указатель на Expression, который, по аналогии с моим примером выглядить что-то типа того

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Тип узла дерева
enum ExprKind
{
  EK_CONST, // элемент дерева представляет собой константу
  EK_VAR, // элемент дерева представляет собой переменную
  EK_UNOP, // элемент дерева представляет собой унарную операцию
  EK_BINOP, // элемент дерева представляет собой бинарную (двухаргументную) операцию
};
 
// Тип операции (сюда включаем и унарные и бинарные)
enum OpKind
{
  OP_PLUS,
  OP_MINUS,
  ...
}
 
struct Expression
{
  ExprKind kind;
 
  union
  {
    struct
    {
      Value *val;
    } const;
    struct
    {
      Variable *var;
    } var;
    struct
    {
      OpKind;
      Expression *operand;
    } unop;
    struct
    {
      OpKind;
      Expression *operand1;
      Expression *operand2;
    } binop;
  } data;
}
Добавлено через 1 минуту 31 секунду
Цитата Сообщение от #pragma Посмотреть сообщение
Правая часть присваивания может быть выражением
Я описывал простой случай (чтобы понятно было). Реально правая часть ОБЯЗАНА (а не "может быть") выражением. Константа - это же тоже выражение. Построение дерева аккуратно укладывается в твой парсер (смотри мой пример про выражения)

Добавлено через 8 минут 59 секунд
Не забудь сделать отладочную печать представления. При этом каждому Statement'у надо присваимвать уникальный номер. Тогда в операциях перехода можно будет его печатать, чтобы визуально понять, куда у тебя реально идёт переход

Добавлено через 4 минуты 11 секунд
И сразу думай о том, как работать с массивами. Ибо, навскидку, это последний невыясненный момент

Ну и надо разобраться, как же реально в Q-Basic'е идёт работа с типом. Потму как надо уже под это дело подстраиваться

Добавлено через 20 часов 44 минуты 14 секунд
Смотрю исходники. По оформлению читать уже гораздо проще чем раньше. Но три пробела в начале строки по прежнему убивают наповал

Внутри syntax_ParseTerm ты в цикле вызываешь syntax_ParseTerm, хотя мне кажется, что надо всё-таки syntax_ParsePrimary. Проверить не могу, т.к. по тем исходникам из #87 ничего не могу запустить. На твой пример из #86 ругается "Wrong definition", а напрямую подавfть выражение в PRINT пока не работает. По идее то, что написано рабочее, но глубины воображения что-то не хватает понять, где это можетнакосячить (если накосячит вообще)

Добавлено через 2 минуты 46 секунд
AND, OR и XOR ты назвал BINARY_OP. Название этого термина переводится как "двухаргументная операция". Правильное названия - "побитовая операция" (BIT_OP или BITWISE_OP)

Добавлено через 2 минуты 19 секунд
Из syntax_parserIdentLValue ты вызываешь syntax_parserBinaryExpr, что не есть верно, т.к. у тебя в этом случае будет по синтаксису разрешена операция типа "A&B = 5"

Добавлено через 3 минуты 32 секунды
Фрагмент процедуры void syntax_parserStmtKwLET:

C++
1
2
        defined_vars.at(i) = syntax_parserBinaryExpr();
        defined_vars.at(i).SetInitialization(true);
По логике вещей как только ты в переменную делаешь присваивание, то внутри класса переменной должен автоматически взводиться признак инициализации, а не втавлять это в каждое место инициализации
 
Текущее время: 21:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru