Наверх

Предыдущая

 

Описание получившегося языка.

 

Здесь мы наконец-то остановимся и подведем итоги. У нас получился интерпретатор некоторого языка программирования. Концом строки, точнее оператора, который он обрабатывает, служит не конец обычной текстовой строки, то-есть не пара байт (13,10), а точка с запятой. Опишем вкратце основные правила.

Напомню, что на этом этапе программа транслятора просматривает файл Pr_Str.txt и выполняет содержащиеся там инструкции. Разумеется, переделать ее так, чтоб она просматривала любой файл, не составляет труда.

Если есть ошибки, то в том же каталоге создаются файлы, содержащие в названии фрагмент Error (например ErrorLex.txt). В них описываются ошибки.

Данные этого языка могут быть двух типов. Числовые и строковые. Числовые – это действительные числа с десятичной точкой, соответствуют типу double языка Си. Строковые берутся в кавычки.

Есть еще переменные. Имя переменной должно начинаться с большой латинской буквы, далее могут идти латинские буквы, цифры, знак подчеркивания, даже русские буквы.

Операторы заканчиваются точкой с запятой. Можно ввести несколько ; подряд. Это соответствует пустым операторам.

Основной оператор – оператор присваивания.

A=1;

B=1.5;

C=”Good!”;

;;

А вот неправильный пример. Строка такого типа (без присваивания) не допускается:

A+5;

Есть комментарии – как в языке Си.

/* Это комментарий */

Нюанс – два комментария один за другим идти не могут (даже если разделены пробелами или концом строки). Между ними должен стоять какой-нибудь знак (или число, переменная), хотя бы точка с запятой.

Есть оператор печати на экран. Мы увидим результат его работы, если программа запущена в режиме командной строки (или в окошке сессии DOS).

PRINT(5+10.8);

PRINT(“AAA”);

PRINT(A);

Бинарные операции:  это +,-,*,/ (обычные арифметические действия), а также операции сравнения =,<,<=,>,>=,!= (не равно).

Результатом таких операций сравнения является 1 в случае истинности или 0 в случае ложности.

1=1  это истинно, поэтому результат единица.

1>0            это ложно, поэтому результат есть ноль.

Видно, что знак «равно» играет двоякую роль. Если он второй в строке и идет после имени переменной, значит он часть оператора присваивания. Если он встречается в строке более одного раза (правее первого «равно») или входит в условный оператор (IF(A=3) например), то он есть знак сравнения.

Есть и логические операции: || (или), &&(и) и унарная операция !(не).

Есть также унарные плюс и минус.

Нюанс: знак унарной операции перед числом или переменной может быть лишь один. Если нужно больше, используйте скобки

!(-(-A))

Сложение, вычитание и унарный минус могут относиться не только к числам, но и к строкам (см. подробнее главу 6). Если в одной операции задействованы число и строка, это будет ошибкой.

Есть встроенные функции (после тире – тип возвращаемого результата):

StrToDbl(str) - float

CharToStr(float) - str

DblToStr(float) -  str

RoundStr(DblToStr(str,float) - str

            StrToFile(str,str) – float

            Подробнее (что они делают) смотри главу 7.

            Пример использования:

D=2.3+StrToDbl(“1.1”);

Big1=RoundStr(  DblToStr(-5*10),0)+”H”;

            Кстати, заменять маленькие буквы на большие нельзя (ни в названиях переменных, ни в названиях функций).

 

            Вначале программы могут идти функции (не встроенные, а программируемые нами самими). Заканчивается функция ключевым словом ENDFUNCTION. Внутри функции обязательно должен быть оператор RETURN(переменная или число или строка). Функция должна иметь хотя бы один параметр.

FUNCTION Fname(A,B)

C=A+B;

RETURN( C);

ENDFUNCTION;

            Имена функций составляются по такому же принципу, как и имена переменных (см. выше).

В начале основного «тела» программы должен стоять оператор START.

Есть операторы IF (IF-ELSE) и WHILE. Они должны заканчиваться ключевыми словами ENDIF и ENDWHILE. Из WHILE можно выходить с помощью BREAK (есть также и оператор CONTINUE).

После ключевых слов ENDIF, ENFWHILE, ENDFUNCTION обязательно должна ставиться точка с запятой (как и после других операторов).

Есть и оператор безусловного перехода (и метка)

GOTO L;

L: VAR=5+7;

 

Пример программы c 2 функциями:

 

FUNCTION A1(R,D,D1)

;

PRINT  (  "AAAAAAAAAAA");

R1=A2("function");

PRINT(R1);

PRINT(R);

PRINT(D);

PRINT(D1);

PRINT("BBBBBBBBBBB");

;

RETURN(100);

ENDFUNCTION

;

 

FUNCTION A2(HHHH);

PRINT(HHHH);

G=5;

WHILE(1=1)

G=G-1;

PRINT("+++");

IF(G=3)

BREAK;

ENDIF;

ENDWHILE;

RETURN(HHHH+"  Good!");

PRINT("$$$$$$$$$$$$$$$$$$$$$");

ENDFUNCTION

;

 

PRINT("Out!!!");

 

START

A=1;

PRINT( A);

IF(1)

/*E=5;*/

PRINT("Inside if");

E=A1(4.5,100,-20);

ENDIF;

PRINT("AFTER");

 

Как же назвать наш язык? Пусть называется 0-цикл.

 

Скачать исполняемый файл

 

Китаев А.Е.

 

 

 

 

Хостинг от uCoz