Описание (текст) на ФЯ, подлежащее анализу, должно находиться в файле стандартного текстового формата DOS; файл может иметь любое имя и расширение, по умолчанию предлагается расширение "snt". Анализ реализуется в три прохода (фазы): лексический, синтаксический и семантический анализ.
Лексический анализ осуществляется путем посимвольного сканирования описания слева направо, в ходе которого пропускаются комментарии и символы типа пробела, табуляции, конца строки, а также выделяются лексемы следующих пяти видов:
- ключевые слова языка, " •
- разделители языка,
- идентификаторы, не являющиеся ключевыми словами языка,
- целые числа без знака (в диапазоне 0..65535),
- вещественные числа без знака (в диапазоне 2.9е-39.. 1.7е38).
Появление прочих символьных конструкций, например, незакрытых комментариев, выходящих из допустимого диапазона чисел, отсутствующих в языке разделителей, считается лексической ошибкой. В этом случае символы предложения пропускаются до ближайшего пробела, табуляции, конца строки, а далее анализ продолжается.
|
|
Лексический анализатор имеет несколько режимов работы. Так, анализируемое предложение может отображаться или не отображаться на экране дисплея во время анализа, предусмотрен также пошаговый анализ.
Лексический анализ может сопровождаться протоколированием -фиксированием в отдельном файле последовательности принимаемых анализатором решений; файл протокола имеет имя, совпадающее с именем описания, и расширение "lap". Пользователь системы управляет созданием и отображением на экран дисплея протокола.
Синтаксический анализ предложения проводится левосторонним нисходящим методом с ограниченными возвратами (бектрекинг).
Пользователю системы предоставлена возможность управления состоянием грамматики и описания на ФЯ во время анализа. Синтаксический анализ может сопровождаться построением дерева разбора предложения, представляемого в скобочной форме. Особенности такого представления проиллюстрируем на примере.
Грамматика арифметических выражений:
врж::=?_<_терм_>+<_врж_>_|_<_терм_>-<_врж_>_|_<_терм_>_?**
терм::=?_<_мнж_>*<_терм_>_|_<_мнж_>/<_терм_>_|_<_мнж_>_? *
мнж::=?_ (<_врж_>) _|_ <_Numb_> _? **
Предложение, соответствующее этой грамматике:
6-4/2
Две различные графические формы дерева разбора приведены на рис. 2. В случае а) имена продукций не указаны, в случае б) имена продукций указаны.
Дерево разбора этого предложения в скобочной форме имеет вид: (врж (терм (мнж 6 мнж) терм)-(терм (мнж 4 мнж) / (мнж 2 мнж) терм) врж)
Файл, содержащий дерево разбора, имеет расширение "t". Пользователю предоставлена возможность управления созданием, отображением и составом дерева.
|
|
Семантический анализ предложения производится специальными семантическими процедурами (СП), разрабатываемыми и описываемыми пользователем на произвольном языке программирования во внешнем по отношению к данной системе исполняемом файле.
Система "Грамматика" регламентирует связь СП с синтаксисом ФЯ следующим образом. СП нумеруются целыми числами из диапазона 0..65535. В описании грамматики указываются точки вызова и номера СП записью вида (_ N _), где "(_", "_)" - метасимволы языка описания грамматик, N - номер СП.
Просматривая в процессе синтаксического анализа продукции и встречая в них точки вызова СП, система формирует план семантических действий - последовательность записей, содержащих номер СП и параметр СП, которым является последнее на данный момент встреченное в анализируемом описании ключевое слово или разделитель языка, идентификатор, целое или вещественное число. В случае успешного завершения синтаксического анализа полученная последовательность записывается в отдельный файл. План семантических действий может быть сформирован в двоичном или символьном представлении в зависимости от цели, преследуемой пользователем: план в двоичном представлении эффективно обрабатывается компьютером, тогда как план в символьном представлении более удобен для изучения, контроля, понимания принципов его формирования и использования. Файл с планом в двоичном представлении имеет расширение "smb", план в символьном представлении - расширение "sms"; имена обоих файлов совпадают с именем файла, содержащего разбираемое предложение.
Семантический анализ является синтаксически управляемым в том смысле, что последовательность семантических действий полностью определяется синтаксической структурой предложения. В приложении 1 приведена грамматика с вызовами СП, эквивалентная в синтаксическом отношении рассмотренной выше грамматике паскалеподобного языка. Точки вызова расставлены так, что обеспечивают получение всей необходимой для проведения семантического анализа информации: имен, чисел, операций и т.д.
Подчеркнем, что интерпретация плана семантических действий системой не осуществляется, а возлагается на семантический анализатор, разрабатываемый пользователем.
Система "Грамматика" предлагает несложный программный интерфейс для программ семантического анализа, создаваемых на языке Turbo Pascal. Исчерпывающее описание интерфейса приведено в приложении 2. Пример программы на языке Pascal, осуществляющей простейший семантический анализ - вывод на экран дисплея плана семантических действий, приведен в приложении 3.