@@ -68,6 +68,11 @@ sub _reduce {
6868 $self -> swapOps
6969 if (($self -> {rop }-> class eq ' Number' && $self -> {lop }-> class ne ' Number' && $reduce -> {' x*n' })
7070 || ($self -> {lop }-> class eq ' Function' && $self -> {rop }-> class ne ' Function' && $reduce -> {' fn*x' }));
71+ $self = $self -> associateOps(' left' )
72+ if ($reduce -> {' m*(n*x)' }
73+ && $self -> {lop }-> class eq ' Number'
74+ && $self -> {rop }-> isa(' Parser::BOP::multiply' )
75+ && $self -> {rop }{lop }-> class eq ' Number' );
7176 return $self ;
7277}
7378
@@ -78,14 +83,15 @@ sub makeNeg {
7883 return $self ;
7984}
8085
81- $Parser::reduce -> {' 1*x' } = 1;
82- $Parser::reduce -> {' x*1' } = 1;
83- $Parser::reduce -> {' 0*x' } = 1;
84- $Parser::reduce -> {' x*0' } = 1;
85- $Parser::reduce -> {' (-x)*y' } = 1;
86- $Parser::reduce -> {' x*(-y)' } = 1;
87- $Parser::reduce -> {' x*n' } = 1;
88- $Parser::reduce -> {' fn*x' } = 1;
86+ $Parser::reduce -> {' 1*x' } = 1;
87+ $Parser::reduce -> {' x*1' } = 1;
88+ $Parser::reduce -> {' 0*x' } = 1;
89+ $Parser::reduce -> {' x*0' } = 1;
90+ $Parser::reduce -> {' (-x)*y' } = 1;
91+ $Parser::reduce -> {' x*(-y)' } = 1;
92+ $Parser::reduce -> {' x*n' } = 1;
93+ $Parser::reduce -> {' fn*x' } = 1;
94+ $Parser::reduce -> {' m*(n*x)' } = 1;
8995
9096sub string {
9197 my ($self , $precedence , $showparens , $position , $outerRight ) = @_ ;
0 commit comments