Traits on expression tokens can be useful here
# addition
proto sub infix:<+>
is looser(infix:<*>)
is pirop('add') # use PIR 'add'
{ ... }
# handle parentheses
proto sub circumfix:<( )>
is equiv('term:')
is pirop('set') # use PIR 'set'
{ ... }
# short-circuiting &&
proto sub infix:<&&>
is pasttype('if')
{ ... }