Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

СИНТАКСИЧЕСКИЙ РАЗБОР 

              Напомним, что существует целый ряд  методов  синтаксического
         разбора и вычисления выражений. Для целей данной статьи предполо-
         жим,  что выражения являются рекурсивными  структурными  данными,
         которые определяются в терминах самих себя.  Если вы ограничитесь
         использованием в выражениях только операторов +,  -,  *, / и ско-
         бок,  то сможете сказать, что все выражения могут быть определены
         в терминах следующих правил:
              выражение=>терм[+терм][-терм]
              терм=>множитель[*множитель][/множитель]
              множитель=>переменная, число или (выражение)
         где любая часть может быть пустой.  Квадратные скобки  обозначают
         необязательность,  а => - порождение. Фактически правила являются
         правилами порождения выражений. Предшествование операторов подра-
         зумевается способом порождения выражений.
              Выражение
               10+5*В
         состоит из двух термов: 10 и 5*В. Однако, включает три множителя:
         10,  5 и В.  Этими множителями являются два числа и одна перемен-
         ная.
              С другой стороны выражение
               14*(7-С)
         имеет два  терма 10 и (7-С),  один из которых является числом,  а
         другая дочерним выражением. Дочернее выражение распадается на од-
         но число и одну переменную.
              Данный процесс формирует основу для рекурсивного нисходящего
         синтаксического  разбора,  который представляет собой набор общих
         рекурсивных процедур,  носящих цепочный характер. На каждом соот-
         ветствующем  шаге  синтаксический разбор может выполнять заданные
         операции в алгебраически правильной последовательности.  Для при-
         мера рассмотрим синтаксический разбор входного выражения 9/3-(100
         +56) и выполнение операций по шагам.

              Шаг 1. Взять первую лексему: 9/3
              Шаг 2. Взять оба множителя и выполнить операцию деления.
                     В результате получается 3.
              Шаг 3. Взять вторую лексему: (100+56). В данной точке вы
                     должны рекурсивно  проанализировать второе выражение.
              Шаг 4. Взять оба числа и сложить. В результате получается
                     156.
              Шаг 5. Возвратиться из рекурсивного вызова и вычесть 156 из
                     3, что дает ответ - 153.

         Если вы немного запутались,  не беспокойтесь. Это сложная концеп-
         ция.  Нужно  усвоить  два момента о данном рекурсивном взгляде на
         выражения: во-первых, предшествование операторов является неявным
         при заданных правилах порождения выражений; во-вторых, данный ме-
         тод синтаксического разбора и вычисления выражений очень похож на
         то, как это делается вручную.

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz