Описание
получившегося языка.
Здесь мы наконец-то остановимся и подведем итоги. У нас получился интерпретатор некоторого языка программирования. Концом строки, точнее оператора, который он обрабатывает, служит не конец обычной текстовой строки, то-есть не пара байт (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-цикл.
Скачать исполняемый файл
Китаев А.Е.