Книга: Давайте создадим компилятор!
Мультипликативные выражения
Мультипликативные выражения
Процедуры для работы с мультипликативными операторами почти такие же. Фактически, на первом уровне они почти идентичны, так что я просто покажу их здесь без особых фанфар. Первая – наша общая форма для Factor, которая включает подвыражения в скобках:
{–}
{ Parse and Translate a Factor }
function Expression: char; Forward;
function Factor: char;
begin
if Look = '(' then begin
Match('(');
Factor := Expression;
Match(')');
end
else if IsAlpha(Look) then
Factor := Load(GetName)
else
Factor := LoadNum(GetNum);
end;
{–}
{ Recognize and Translate a Multiply }
Function Multiply(T1: char): char;
begin
Match('*');
Multiply := PopMul(T1, Factor);
end;
{–}
{ Recognize and Translate a Divide }
function Divide(T1: char): char;
begin
Match('/');
DIvide := PopDiv(T1, Factor);
end;
{–}
{ Parse and Translate a Math Term }
function Term: char;
var Typ: char;
begin
Typ := Factor;
while IsMulop(Look) do begin
Push(Typ);
case Look of
'*': Typ := Multiply(Typ);
'/': Typ := Divide(Typ);
end;
end;
Term := Typ;
end;
{–}
Эти подпрограммы соответствуют аддитивным почти полностью. Как и прежде, сложность изолирована в PopMul и PopDiv. Если вам захочется протестировать программу прежде чем мы займемся ими, вы можете написать их пустые версии, аналогичные PopAdd и PopSub. И снова, код не будет корректным в данный момент, но синтаксический анализатор должен обрабатывать выражения произвольной сложности.
- Введение
- Что будет дальше?
- Таблица идентификаторов
- Добавление записей
- Распределение памяти
- Объявление типов
- Присваивания
- Трусливый выход
- Более приемлемое решение
- Литеральные аргументы
- Аддитивные выражения
- Почему так много процедур?
- Мультипликативные выражения
- Умножение
- Деление
- Завершение
- Приводить или не приводить
- Заключение
- Снова выражения
- Скобочные выражения
- A7.6. Мультипликативные операторы
- Индексы по выражениям
- Выражения в значениях по умолчанию для доменов
- Выражения в EXCEPTION
- 6. Выражения реляционной алгебры
- Мультипликативные операции
- 3.13.7. Рекурсия в регулярных выражениях
- 6. Лекция: Обработка текстов. Регулярные выражения. Unicode.
- Применение лямбда-выражения в качестве задачи
- 4.2.2. Возвращаясь к строкам и регулярным выражениям