В качестве основы языка программирования в LabPP_Automat используется широко известный, простой и гибкий язык Си++.
Достоинствами этого языка являются:
- высокая скорость выполнения;
- орошая читаемость, лаконичность и понятность кода;
- простота создания и обращения к функциям;
- большая библиотека разнообразных процедур.
- его освоение намного легче и он более удобный для работы.

Для большего удобства использования конструкций языка в LabPP_Automat добавлен тип данных string.
Если Вы задали функцию MyStringFunc, которая возвращает строковое значение, то можно писать так:

string MyString = MyStringFunc();

Здесь мы сразу объявляем переменную типа "строка" MyString и сразу же записываем в нее значение из функции MyStringFunc().

Имеются ограничения при помощи которых создание программ значительно упрощено:

1. можно использовать только встроенные классы через дескрипторы.
2. отсутствуют указатели.
3. отсутствует тип данных "ссылка".

Программные модули создаются в виде отдельных текстовых файлов.

Функция main()

Каждый файл должен содержать базовую функцию main().
Ниже приведен пример функции main() с вызовом другой функции.

int main()
{
// Комментарий
/* Большой комментарий
    на несколько строк */
string s;   // - объявление переменной типа "строка"
int i;        // - объявление переменной типа "целое"
double d; // - объявление переменной типа "число с плавающей точкой"
char c;    // - объявление переменной типа "символ"
i = 12;    // присвоить переменной i значение 12
i++;       // увеличить i на 1;
i--;         // уменьшить i на 1;

string mystr;
mystr = "моя "+"строка";
myfunc(1, 0.2, mystr); // обращение к функции
}

// Объявление собственной функции
int myfunc(int ii, double dd, string str)
{
return 0; // вернуть значение 0
}


Организация циклов

Цикл for

for(int i=0;i<10;i++)         // выполнить фрагмент программы, заключенный между
   {                              // фигурными скобками пока i меньше 10 и, при каждом выполнении цикла, i увеличивать на 1
   cout << i;    // вывести значение i в окно сообщений LabPP_Automat
   if(i==5)       // если i равно 5 - выполнить фрагмент между фигурными скобками.
      {
      break;      // прервать цикл
      }
   }


Цикл do-while

int i;
i=0;
do {
     cout << i;        // Вывести в окно сообщений LabPP_Automat значение i
     i++;                // Увеличить i на 1
    } while (i<10)   // Выполнять цикл покуда i меньше 10

Цикл while

int i;
i=0;
while(i<10) {
    cout << i;
    i++;
}

Логические операции

==     Равенство     Истинно, если число или строка слева равно числу или строке справа
!=     Неравенство     Истинно, если число или строка слева НЕ равно числу или строке справа
<     Меньше     Истинно, если число слева меньше числа справа
<=     Меньше или равно     Истинно, если число слева меньше или равно числу справа
>     Больше     Истинно, если число слева больше числа справа
>=     Больше или равно     Истинно, если число слева больше или равно числу справа
&&     Логическое И    

Если выражение слева и справа истинны, то результат - истинно. Если хотя бы одно из выражений слева или справа ложно, то результат - ложно
||     Логическое ИЛИ     Если хотя бы одно выражение слева и справа истинны, то результат - истина. Если оба выражения ложны, то результат - ложно.


Условные переходы

Оператор if

if(i<0)
{
    cout << "да";
}

Конструкция if-else

if(i<0)          // Если выражение в скобках истинно, то выполняется первый фрагмент
{
    cout << "да";
}
else             // Если выражение в скобках ложно, то выполняется второй фрагмент
{
    cout << "нет";
}

Конструкция if-else if-else

if(i<0)            // Если выражение в скобках истинно, то выполняется первый фрагмент
{
    cout << "i<0";
}
else if(i==0)   // Если выражение в скобках истинно, то выполняется второй фрагмент
{
    cout << "i=0";
}
else              // Если ни одно из выражений скобках не истинно (пунктов else if может быть много), то выполняется последний фрагмент
{
    cout << "i=0";
}

Оператор switch

В зависимости от значения числа в скобках выполняется соответствующих фрагмент программы.

switch(i)
{
case 1:
         cout << "i=1";
         break;
case 2:
         cout << "i=2";
         break;
case 10:
         cout << "i=10";
         break;
 default:
          // операторы, выполняемые при любом другом значении i
}

Подключение дополнительных файлов
Директива #include

Если имеются функции или переменные, которые используются в нескольких программах, то их можно размещать в так называемых "заголовочных файлах". Обычно заголовочному файлу, чтобы отличать от других, присваивается расширение .h (например header.h).

Перед тем, как отдать программу на выполнение, она собирается в единый блок препроцессором.

Вот пример файла header.h

/***********/
/* header.h  */
/***********/

int iGlobalValue=0;  // так можно объявлять глобальную переменную

// здесь описан пример функции, которая может использоваться в различных программах
double iMyCommonFunction(double var1, double var2)
{
return var1*var2;
}

Вот пример файла программы с использованием заголовочного файла header.h

/**************/
/* my_prg1.cpp */
/**************/

#include "header.h"   // подключить заголовочный файл header.h

int main()
{
cout << iMyCommonFunction(100, 50);  // функция описана в заголовочном файле header.h
}


Переменные

Типы переменных

Интерпретатор поддерживает следующие типы переменных:

char
int
double
string

Видимость переменных

Переменные могут быть локальные, глобальные и суперглобальные.

Локальные переменные видятся внутри функции и не видятся за пределами функции.

Глобальные переменные видимы внутри любой функции не зависимо от глубины вложения.

Глобальные переменные объявляются до тела функции main().

Суперглобальные переменные - те, которые существуют в течении всего сеанса работы AddOns.

При их помощи можно передавать данные из одной программы в другую.

Следующий фрагмент инициализирует переменную my_var строкой:

/***********/
/* prgfile1.cpp   */
/***********/
int main() {
    int ires;
    ires = var_extern_set("Моя Переменная", 100);
}

А этот фрагмент находится в другой программе (запускаемой другой кнопкой) и считывает значение переменной my_var:

/**************/
/* prgfile2.cpp */
/**************/
int main()
{
int ires;

string extern_var;
ires = var_extern_get("my_var", extern_var);
cout << "ires=" << ires << " my_var = " << extern_var;
}