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

Пишем свой интерпретатор языка 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
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,254
Записей в блоге: 28
09.10.2009, 17:07
Всё равно проблему не понял

PureBasic
1
2
3
4
5
6
7
IF A=1 THEN
  LET B=100
ELSEIF A=2 THEN
  LET B=200
ELSE
  LET B=300
END IF
На уровне представления эквивалентно коду

PureBasic
1
2
3
4
5
6
7
8
9
IF A=1 THEN
  LET B=100
ELSE
  IF A=2 THEN
    LET B=200
  ELSE
    LET B=300
  END IF
END IF
Добавлено через 2 минуты
Мой нынешний вариант
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
static void
syntax_StatementIF (void)
{
  expr_Expr_t *cond_expr;
  stmt_Statement_t *label_then, *label_else, *label_finish;
 
  /* На текущий момент IF уже прочитано. Читаем следующий символ */
  lex_GetToken ();
 
  /* Метка окончания конструкции (на неё будет сделан переход в конце каждой
   * из альтернатив) */
  label_finish = stmt_NewStatementLabelEmpty ("#finish");
 
  /* Условие перехода и условный переход. Переход будет "вперёд", так что
   * сразу же создаим висячие метки для альтернатив */
  cond_expr = syntax_CondExpr ();
  label_then = stmt_NewStatementLabelEmpty ("#then");
  label_else = stmt_NewStatementLabelEmpty ("#else");
  stmt_NewStatementCBranch (cond_expr, label_then, label_else);
 
  /* THEN */
  syntax_Expect (LEX_TOKEN_KW_THEN);
 
  if (lex_CurToken != LEX_TOKEN_EOL)
    {
      /* Однострочный вариант записи. В этом случае пустых альтернатив быть
       * не может. Есть THEN и обязан быть код по THEN. Если есть ELSE,
       * то обязан быть код по ветке ELSE */
 
      /* Метка #then, затем операторы по ветке THEN, затем переход на метку #finish */
      stmt_LinkEmptyLabel (label_then);
      syntax_NecessarySimpleStatementList ();
      stmt_NewStatementBranch (label_finish);
 
      /* Метка #else, затем операторы по ветке ELSE (если они есть) */
      stmt_LinkEmptyLabel (label_else);
      if (lex_CurToken == LEX_TOKEN_KW_ELSE)
        {
          lex_GetToken ();
          syntax_NecessarySimpleStatementList ();
          stmt_NewStatementBranch (label_finish);
        }
    }
  else
    {
      /* Многострочный вариант записи. В данном случае по альтернативе
       * могут быть и пустые строки */
 
    Then:
      /* EOL */
      syntax_Expect (LEX_TOKEN_EOL);
 
      /* Метка #then, затем операторы по ветке THEN, затем переход на метку #finish */
      stmt_LinkEmptyLabel (label_then);
      syntax_ComplexStatementList ();
      stmt_NewStatementBranch (label_finish);
 
      /* Метка #else, относящаяся к последнему сравнению */
      stmt_LinkEmptyLabel (label_else);
 
      /* В случае наличия ELSEIF по большому счёту повторяем код для IF'а,
       * единственно, что уже не допускаем однострочной записи. Веток ELSEIF
       * может быть несколько штук */
      if (lex_CurToken == LEX_TOKEN_KW_ELSEIF)
        {
          lex_GetToken ();
 
          /* Текущий условный переход. Метки label_then и label_else будут
           * воткнуты уже после исполнения 'goto Then' (см. ниже) */
          cond_expr = syntax_CondExpr ();
          label_then = stmt_NewStatementLabelEmpty ("#then");
          label_else = stmt_NewStatementLabelEmpty ("#else");
          stmt_NewStatementCBranch (cond_expr, label_then, label_else);
 
          /* THEN */
          syntax_Expect (LEX_TOKEN_KW_THEN);
 
          /* Далее повторяем код для THEN от IF, т.к. для ELSEIF всё то же самое */
          goto Then;
        }
 
      /* Альтернатива по ветке ELSE может и не присутсвовать */
      if (lex_CurToken == LEX_TOKEN_KW_ELSE)
        {
          lex_GetToken ();
          syntax_Expect (LEX_TOKEN_EOL);
          syntax_ComplexStatementList ();
        }
 
      /* END IF */
      syntax_Expect (LEX_TOKEN_KW_END);
      syntax_Expect (LEX_TOKEN_KW_IF);
    }
 
  /* Метка #finish */
  stmt_LinkEmptyLabel (label_finish);
} /* syntax_StatementIF */
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru