Для вычисления выражения интерпретатор Mini С++ использует синтаксический анализатор выражений. Прежде чем вы сможете уяснить его принцип действия, следует понять, как строятся выражения. Практически во всех языках программирования выражения описываются с помощью набора порождающих правил (production rules), которые описывают взаимосвязь операндов и операций. Далее приведены порождающие правила для описания выражений интерпретатора Mini С++. выражение [присваивание][пзначение] присваивание лзначение = пзначение лзначение переменная пзначение часть/оп-отн часть] В приведенной формальной записи оп-отн обозначает любую операцию отношения языка С++. Термины лзначение и пзначение означают объекты, размешенные соответственно слева и справа от оператора присваивания. Стрелку можно заменить словом "порождает". Вам следует знать, что старшинство операций (или порядок выполнения операций) встроено в порождающие правила. Чем выше старшинство, тем дальше от начала в списке правил указана операция. Как показывают порождающие правила, интерпретатор Mini С++ поддерживает следующие операции: Для того чтобы увидеть, как работают правила, вычислим следующее выражение на С++. count = 10 - 5 * 3; Сначала применим правило 1, разбивающее выражение на три части, count . = 10 - 5 * 3 лзначение приевайвание пзначение Поскольку в правой части выражения нет операций отношения, активизируется правило, разбивающее эту часть выражения на термы. Очевидно, что второй терм состоит из факторов 5 и 3. Оба фактора — константы, а значит, представляют самый низкий уровень порождающих правил. Теперь начнем движение в обратном направлении для вычисления выражения. Сначала найдем произведение 5*3, равное 15. Далее вычтем это значение из 10 и получим -5. И, наконец, эта величина присваивается переменной count и, кроме того, именно она является значением всего выражения. Анализатор выражений интерпретатора Mini С++ вычисляет выражения точно так же. Он просто выполняет порождающие правила. Поскольку синтаксический анализатор выражений очень важен для интерпретатора Mini С++, с него мы и начнем.
|