МУЛЬТИПЛИКАТИВНЫЕ ВЫРАЖЕНИЯ
Процедуры для работы с мультипликативными операторами почти такие же. Фактически, на первом уровне они почти идентичны, так что я просто покажу их здесь без особых фанфар. Первая - наша общая форма для Factor, которая включает подвыражения в скобках:
Code: |
{ 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. И снова, код не будет корректным в данный момент, но синтаксический анализатор должен обрабатывать выражения произвольной сложности.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!