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

Пишем свой интерпретатор языка 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
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,643
Записей в блоге: 28
19.08.2009, 20:17
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);
По логике вещей как только ты в переменную делаешь присваивание, то внутри класса переменной должен автоматически взводиться признак инициализации, а не втавлять это в каждое место инициализации
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru