Базовые элементы
В настоящей главе рассматриваются базовые элементы Maple-языка в предположении, что читатель в определенной мере имеет представление о работе в Windows-среде и с самим пакетом в режиме его графического меню.
Определение Maple-языка можно условно разбить на четыре базовые составляющие, а именно: алфавит, лексемы, синтаксис и семантику. Именно две последние составляющие и определяют суть того или иного языка. Синтаксис составляют правила образования корректных предложений из слов языка, которые должны строго соблюдаться. В случае обнаружения на входе Maple-предложения с синтаксической ошибкой выводится диагностическое сообщение, сопровождаемое “^”-указателем на место возможной ошибки или установкой в место ошибки |-курсора, как это иллюстрирует следующий фрагмент:
> A:= sqrt(x^2+y^2+z^2); V:=x*56 |Z:= sin(x)/(a+b);
>Error, missing operator or `;`
> A:= sqrt(x^2+y^2+z^2): V:= x**|*56: Z:= sin(x)/(a+b);
Error, `*` unexpected
> read `C:\\ARM_Book\\Grodno\\Academy.99`:
on line 0, syntax error, `*` unexpected:
VGS:=56***sin(x)/sqrt(Art^2+Kr^2)-98*F(x,y);
________^
Error, while reading `C:\ARM_Book\Grodno\Academy.99`
При этом следует иметь в виду два обстоятельства:
1) идентифицируется только первая встреченная ошибка
2) при наличии синтаксических ошибок (например, несогласования открывающих и закрывающих скобок) в сложных выражениях язык может затрудняться с точной их диагностикой, идентифицируя ошибочную ситуацию сообщением вида “ `;` unexpected”, носящим в целом ряде случаев весьма приблизительный характер.
Maple-язык производит синтаксический контроль не только на входе конструкций в интерактивном режиме работы, но и в момент считывания их из файлов. В последнем случае синтаксическая ошибка инициирует вывод соответствующего диагностического сообщения указанного выше вида с указанием номера первой считанной строки, содержащей ошибку, и идентификацией спецификатора файла, как это иллюстрирует последний пример фрагмента.
В отличие от синтаксиса, определяющего правила составления корректных языковых конструкций, семантика языка определяет алгоритмы их обработки, т.е. определяет их понятийное назначение с точки зрения самого языка. Например, результатом обработки конструкции вида “W:= 57*sin(19.99);” является присвоение W-переменной результата произведения целого числа “57” и значения sin-функции в точке “19.99” ее вызова. При этом, определяется как собственно результат, так и его тип. В связи со сказанным наряду с синтаксическими, как правило, распознаваемыми языком, могут возникать и семантические ошибки, которые язык не распознает, если они при этом, не инициируют, в свою очередь, ошибок выполнения. Типичным примером семантических ошибок является конструкция вида “A/B*C”, трактуемая языком как “(A*C)/B”, а не как “A/(B*C)” на первый взгляд. Как правило, семантические ошибки выявляются на стадии выполнения Maple-программы или вычисления отдельных Maple-выражений и данная процедура относится к этапу отладки программ и процедур.
Синтаксис Maple-языка определяется выбранным набором базовых элементов и грамматикой, содержащей правила композиции корректных конструкций языка из базовых элементов. Рассмотрение базовых элементов начнем со входного алфавита языка, в качестве элементов которого используются следующие символы:
♦ заглавные и прописные буквы латинского алфавита (A .. ÷Z; a .. ÷z; 52);
♦ десятичные цифры (0 .. 9; 10);
♦ специальные символы (` ! @ # $ % ^ & * ( ) _ + { } : “ < > ? | - = [ ] ; ‘ ,
♦ заглавные и прописные буквы русского алфавита (кириллицы: A .. Я;
Синтаксис Maple-языка объединяет символы входного алфавита в лексемы, ключевых (зарезервированных) слов, операторов, строк, натуральных чисел туации. Рассмотрим несколько детальнее каждую из составляющих. В качестве вых Maple-язык использует слова, представленные в следующей табл. 1.
| Ключевые слова: | Смысловая нагрузка: |
| if, then, else, elif, fi | условное if-предложение языка |
| for, from, in, by, to, while, do, od | предложения циклических конструкций |
| proc, local, global, option, description, end | процедурные выражения языка |
| read, save | функции чтения и записи выражений |
| done, quit, stop | функции завершения работы |
| union, minus, intersect | операторы над множествами |
| and, or, not | операторы над множествами |
| mod | оператор вычисления по модулю |
Так как ключевые слова несут определенную смысловую нагрузку, то они не могут ис- пользоваться в качестве переменных, в противном случае инициируется ошибка:
> local:= 64;
Error, reserved word `local` unexpected