Семестровая работа по программированию
Провести синтаксический анализ текстового файла на принадлежность к языку условных выражений, в случае принадлежности подсчитать значения идентификаторов и вывести их значения на экран, иначе вывести ошибку с указанием его места и типа.
В языке принимаются следующие обозначения:
< буква > - любая буква латинского алфавита;
< цифра > - любая десятичная цифра;
< иден > - идентификатор длины не более m (m = 2, 3 или 4);
< число > - строка из пяти цифр, перед которой стоит знак «плюс» или «минус» (рассматриваются только целые числа);
< код > - последовательность из 8 нулей и единиц;
< символ > - символ, допускаемый в записи программы на языке;
<языковая программа>- последовательность операторов языка, разделенных точкой с запятой (;) и не имеющих пробелов; первый, встречающийся пробел, в записи программы, трактуется как ее конец.
< символ > : := < буква >| < цифра >| < знак >| < разделитель >
< знак> : := + | - | * | /
< разделитель > : := ; | : | = | < | | [ | ]
< перем> : := < иден >| < число >
< оператор > : := < иден> := < условие > [ < параметр >] [< параметр>]
< условие > : := < перем> < < перем>|<перем> = <перем>
< параметр >: := < перем> = < перем> < знак> < перем>
Выполнение операторов.
Вычисляется <условие>; если оно истинно, то идентификатору левой части присваивается значение первого параметра, в противном случае – значение второго параметра из правой части. Знаки арифметических операций понимаются обычным образом (но деление нацело).
Перечень общих правил, проверка из них предлагается в качестве упрощенной постановки задачи синтаксического контроля:
а) использование в программе только допустимых символов;
б) длина идентификатора не превышает заданного числа m;
в) число содержит ровно пять цифр;
г) после точки с запятой может быть либо буква, либо пробел;
д) после двоеточия может быть только знак равенства;
е) количество открывающих скобок должно совпадать с количеством закрывающих скобок;
ж) если идентификатор входит в правую часть некоторого оператора, то он должен входить и в левую часть какого-нибудь предшествующего оператора.
з) в правой части оператора должен быть либо символ < , либо = ;
и) в правой части оператора две пары квадратных скобок.