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

Пишем свой интерпретатор языка 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
18370 / 6417 / 441
Регистрация: 30.03.2009
Сообщений: 17,803
Записей в блоге: 28
17.08.2009, 20:31
Теперь что касается всякийх циклов и условных исполнений. Нам дополнительно понадобится одна-единственная операция условного перехода (CONDITIONAL_GOTO)

C
1
2
3
4
5
6
7
8
9
10
11
12
struct
{
  // Условие перехода. Здесь будет подвешено дерево, аналогичное тому,
  // что ты видел в моей реализации Expr, только добавятся ещё операции
  // сравнения
  CondExpr *cond_expr;
 
  // Две метки. Переход на одну произойдёт, если условие true, на другую -
  // если условие false
  Statement *label_true;
  Statement *label_false;
} cond_goto;
Итого, имея три операции LABEL, GOTO и COND_GOTO ты в промежуточном представлении можешь соорудить любую операцию передачи управления, начиная от циклов WHILE или FOR и заканчивая всякими операциями типа "ON <expr> GOTO"

Например, для такого кода

PureBasic
1
2
3
4
5
6
LET a = 10
IF a < 3 THEN
  b = 20
ELSE
  с = 30
LET d = 40
Промежуточное представлении будет выглядеть так

Код
STMK_LET, var=a, val=10 (в нормальном варианте в правой части будет Expr)
STMK_COND_GOTO, cond_expr=<дерево "a<3">, label_true=L1, label_false=L2
STMK_LABEL, условно пишу L1, чтобы по тексту можно было понять. Реально из STMK_IF сюда будет торчать ссылка
STMK_LET, var=b, val=20
STMK_GOTO, label=L3
STMK_LABEL, условно пишу L2
STMK_LET, var=c, val=30
STMK_LABEL, условно пишу L3
STMK_LET, var=d, val=40
А для такого кода

PureBasic
1
2
3
WHILE a < 3
  LET c = 1 ; <-- это внутри цикла
LET d = 2
Промежуточное представление такое

Код
STMK_LABEL, L1
STMK_COND_GOTO, cond_expr=<дерево "a<3">, label_true=L2, label_false=L3
STMK_LABEL, L2
STMK_LET, var=c, val=1
STMK_GOTO, label=L1
STMK_LABEL, L3
STMK_LET, var=d, val=2
Если случалось писать на ассемблере, то можешь увидеть, что этот код по своей структуре уже несколько похож на ассемблерный код
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.