Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ParseUnit / MCADoc.doc
Скачиваний:
29
Добавлен:
31.05.2015
Размер:
1.53 Mб
Скачать

3. Преобразование дерева синтаксического разбора в дерево синтаксической структуры.

Разработка транслирующей или интерпретирующей программы не исчерпывается созданием автоматного синтаксического анализатора, как процесс трансляции не заканчивается построением дерева синтаксического разбора. Результатом процесса синтаксического анализа согласно [5, 6] является так называемая глубинная структура анализируемой цепочки. Формально глубинная структура может быть выражена деревом синтаксической структуры (ДСС) входной цепочки.

Под деревом синтаксической структуры заданного выражения понимается дерево, терминальными узлами которого являются аргументы выражения, а нетерминальные узлы соответствуют знакам операций. Для выражения i+i*i+i, синтаксис которого задан грамматикой G, дерево синтаксической структуры приведено на рис. 2.

Рис.2. Дерево синтаксической структуры входной цепочки i+i*i+i

Дерево синтаксической структуры строится из дерева синтаксического разбора. Для этой цели для каждого правила грамматики задается процедура преобразования соответствующей части дерева синтаксического разбора в дерево синтаксической структуры. Перечень и описание этих процедур приведено в табл.4. Закрепление процедур преобразования ДСР в ДСС для грамматики G приведено в табл. 5.

Процедуры преобразования дерева синтаксического разбора в дерево синтаксического разбора исполняются при его обходе в концевом порядке [7]. Кроме того, при завершении обхода всякого нетерминального узла дерева синтаксического разбора следует контролировать его принадлежность дереву синтаксической структуры. Если этот узел на момент завершения его обработки не помечен терминальным символом, следует переместить на место этого узла непосредственного подчиняемые ему узлы уже помеченные терминальными символами. На рис. 3 приведено преобразование ДСР в ДСС исполнением процедур, заданных в качестве атрибутов правил грамматики.

Таблица 4. Команды преобразования ДСР в ДСС

п/п

Обозначение атрибута правила грамматики

Описание

Графическое описание

1.

del();

Удаление текущего узла и всех подчиненных ему узлов

2.

del(a);

Удаление узла а,подчиненного текущему узлу

3.

up(a,n);

Перемещение узла, непосредственно подчиненного текущему узлу, на nуровней вверх

Таблица 5. Закрепление команд преобразования ДСР в ДСС за правилами грамматики G

п/п

Правило

Команда

1.

A->CB

-

2.

B->+CB

up(+,2);

3.

B->

del();

4.

C->ED

-

5.

D->*ED

up(*,2);

6.

D-> 

del();

7.

E->(A)

del(();del());

8.

E->i

Рис. 3. Преобразование ДСР цепочки i+i*i+iв ДСС.

4. Технология и средства решения учебных задач

Квинтэссенция практикума – разработка учебной транслирующей программы. Эта программа должна обеспечивать определенное преобразование заданного выражения или его вычисление. Предполагается, что синтаксис этого выражения задан LL(1)-грамматикой, на основании которой построен автоматный синтаксический анализатор.

Распознаванию подлежит коллекция лексем, построенная лексическим анализатором [8]. Соответствующая процедура лексического анализа составляет неотъемлемую часть транслирующей программы.

Как и в случае лексического анализатора, для разработки синтаксического анализатора имеется специальный компонент PDMUnit. Его настройка на конкретную грамматику и особенности применения этой грамматики осуществляется в диалоговом режиме при проектировании учебной транслирующей программы (Windows-приложения). Предполагается, что это приложение разрабатывается на Visual Basic.Net.

Построенный таким образом автоматный синтаксический анализатор может быть испытан в диалоговом режиме на примерах различных входных цепочек при проектировании приложения или использован в программе. Результатом обработки входной цепочки автоматным синтаксическим анализатором является дерево синтаксического разбора. Узлы этого дерева – экземпляры класса CNode. С помощью специального метода компонента PDMUnit ДСР преобразуется в ДСС. Далее, студент должен разработать процедуру обхода ДСС, которая осуществляет его преобразование в заданный вид или вычисляет значение выражения, синтаксическая структура которого представлена ДСС.

Ниже описаны компоненты PDMUnit и CNode (п.п. 4.1 и 4.2) и структура транслирующей программы (п.п. 4.3).

В разделах 5 и 6 приведены примеры настройки компонента PDMUnit на грамматику, задающую синтаксис одной вида арифметических выражений, и транслирующей программы, обеспечивающей компиляцию и вычисление этих выражений.

Соседние файлы в папке ParseUnit