slasheq = '/=';
percenteq = '%=';
starstareq = '**=';
+pipeeq = '|=';
+careteq = '^=';
+ampeq = '&=';
lleq = '<<=';
ggeq = '>>=';
dotdotdot = '...';
starstar = '**';
slash = '/';
percent = '%';
+pipe = '|';
+caret = '^';
+amp = '&';
+tilde = '~';
eq = '==';
ne = '!=';
lt = '<';
| {starstar} starstar {-> New methid.starstar(starstar)}
| {slash} slash {-> New methid.slash(slash)}
| {percent} percent {-> New methid.percent(percent)}
+ | {pipe} pipe {-> New methid.pipe(pipe)}
+ | {caret} caret {-> New methid.caret(caret)}
+ | {amp} amp {-> New methid.amp(amp)}
+ | {tilde} tilde {-> New methid.tilde(tilde)}
| {eq} eq {-> New methid.eq(eq)}
| {ne} ne {-> New methid.ne(ne)}
| {le} le {-> New methid.le(le)}
| {slash} slasheq
| {percent} percenteq
| {starstar} starstareq
+ | {pipe} pipeeq
+ | {caret} careteq
+ | {amp} ampeq
| {ll} lleq
| {gg} ggeq
;
;
expr_eq~nopar~nobra {-> expr}
- = expr_add~nopar~nobra {-> expr_add~nopar~nobra.expr}
- | {:eq} expr_add~nopar~nobra eq :no [expr2]:expr_add~nopar~nobra
- | {:ne} expr_add~nopar~nobra ne :no [expr2]:expr_add~nopar~nobra
- | {:lt} expr_add~nopar~nobra lt :no [expr2]:expr_add~nopar~nobra
- | {:le} expr_add~nopar~nobra le :no [expr2]:expr_add~nopar~nobra
- | {:ll} expr_eq~nopar~nobra ll :no [expr2]:expr_add~nopar~nobra
- | {:gt} expr_add~nopar~nobra gt :no [expr2]:expr_add~nopar~nobra
- | {:ge} expr_add~nopar~nobra ge :no [expr2]:expr_add~nopar~nobra
- | {:gg} expr_eq~nopar~nobra gg :no [expr2]:expr_add~nopar~nobra
- | {:starship} expr_add~nopar~nobra starship :no [expr2]:expr_add~nopar~nobra
- | {:isa} expr_add~nopar~nobra kwisa :no type~nobra
+ = expr_bitor~nopar~nobra {-> expr_bitor~nopar~nobra.expr}
+ | {:eq} expr_bitor~nopar~nobra eq :no [expr2]:expr_bitor~nopar~nobra
+ | {:ne} expr_bitor~nopar~nobra ne :no [expr2]:expr_bitor~nopar~nobra
+ | {:lt} expr_bitor~nopar~nobra lt :no [expr2]:expr_bitor~nopar~nobra
+ | {:le} expr_bitor~nopar~nobra le :no [expr2]:expr_bitor~nopar~nobra
+ | {:gt} expr_bitor~nopar~nobra gt :no [expr2]:expr_bitor~nopar~nobra
+ | {:ge} expr_bitor~nopar~nobra ge :no [expr2]:expr_bitor~nopar~nobra
+ | {:starship} expr_bitor~nopar~nobra starship :no [expr2]:expr_bitor~nopar~nobra
+ | {:isa} expr_bitor~nopar~nobra kwisa :no type~nobra
+ ;
+
+expr_bitor~nopar~nobra {-> expr}
+ = [expr]:expr_bitxor~nopar~nobra {-> expr.expr}
+ | {:pipe} expr_bitor~nopar~nobra pipe :no [expr2]:expr_bitxor~nopar~nobra
+ ;
+
+expr_bitxor~nopar~nobra {-> expr}
+ = [expr]:expr_bitand~nopar~nobra {-> expr.expr}
+ | {:caret} expr_bitxor~nopar~nobra caret :no [expr2]:expr_bitand~nopar~nobra
+ ;
+
+expr_bitand~nopar~nobra {-> expr}
+ = [expr]:expr_shift~nopar~nobra {-> expr.expr}
+ | {:amp} expr_bitand~nopar~nobra amp :no [expr2]:expr_shift~nopar~nobra
+ ;
+
+expr_shift~nopar~nobra {-> expr}
+ = [expr]:expr_add~nopar~nobra {-> expr.expr}
+ | {:ll} expr_shift~nopar~nobra ll :no [expr2]:expr_add~nopar~nobra
+ | {:gg} expr_shift~nopar~nobra gg :no [expr2]:expr_add~nopar~nobra
;
expr_add~nopar~nobra {-> expr}
= expr_new~nopar~nobra {-> expr_new~nopar~nobra.expr}
| {:uminus} minus expr_minus~nobra
| {:uplus} plus expr_minus~nobra
+ | {:utilde} tilde expr_minus~nobra
| {:once} kwonce :no expr_minus~nobra
;
| {ll} [op]:ll
| {gg} [op]:gg
| {starship} [op]:starship
+ | {pipe} [op]:pipe
+ | {caret} [op]:caret
+ | {amp} [op]:amp
+ | {tilde} [op]:tilde
| {bra} obra cbra
| {assign} id assign
| {braassign} obra cbra assign
| {starstar} expr [op]:starstar [expr2]:expr
| {slash} expr [op]:slash [expr2]:expr
| {percent} expr [op]:percent [expr2]:expr
+ | {pipe} expr [op]:pipe [expr2]:expr
+ | {caret} expr [op]:caret [expr2]:expr
+ | {amp} expr [op]:amp [expr2]:expr
| {uminus} [op]:minus expr
| {uplus} [op]:plus expr
+ | {utilde} [op]:tilde expr
| {new} kwnew type id? [args]:exprs
| {attr} expr [id]:attrid
| {attr_assign} expr [id]:attrid assign [value]:expr
| {slash} [op]:slasheq
| {percent} [op]:percenteq
| {starstar} [op]:starstareq
+ | {pipe} [op]:pipeeq
+ | {caret} [op]:careteq
+ | {amp} [op]:ampeq
| {ll} [op]:lleq
| {gg} [op]:ggeq
;
super TokenOperator
end
+# The operator `|=`
+class TPipeeq
+ super TokenOperator
+end
+
+# The operator `^=`
+class TCareteq
+ super TokenOperator
+end
+
+# The operator `&=`
+class TAmpeq
+ super TokenOperator
+end
+
# The operator `<<=`
class TLleq
super TokenOperator
super TokenOperator
end
-# The operator `+%
+# The operator `%`
class TPercent
super TokenOperator
end
+# The operator `|`
+class TPipe
+ super TokenOperator
+end
+
+# The operator `^`
+class TCaret
+ super TokenOperator
+end
+
+# The operator `&`
+class TAmp
+ super TokenOperator
+end
+
+# The operator `~`
+class TTilde
+ super TokenOperator
+end
+
# The operator `==`
class TEq
super TokenOperator
# A method name `%`
class APercentMethid
super AOperatorMethid
+end
+# A method name `|`
+class APipeMethid
+ super AOperatorMethid
+end
+
+# A method name `^`
+class ACaretMethid
+ super AOperatorMethid
+end
+
+# A method name `&`
+class AAmpMethid
+ super AOperatorMethid
+end
+
+# A method name `~`
+class ATildeMethid
+ super AOperatorMethid
end
# A method name `==`
redef fun operator do return "%"
end
+# A `|` expression
+class APipeExpr
+ super ABinopExpr
+ redef fun operator do return "|"
+end
+
+# A `^` expression
+class ACaretExpr
+ super ABinopExpr
+ redef fun operator do return "^"
+end
+
+# A `&` expression
+class AAmpExpr
+ super ABinopExpr
+ redef fun operator do return "&"
+end
+
# A unary operation on a method
class AUnaryopExpr
super ASendExpr
class AUplusExpr
super AUnaryopExpr
redef fun operator do return "+"
+end
+# A unary `~` expression
+class AUtildeExpr
+ super AUnaryopExpr
+ redef fun operator do return "~"
end
# An explicit instantiation. eg `new T`
redef fun operator do return "**"
end
+# A `|=` assignment operation
+class APipeAssignOp
+ super AAssignOp
+
+ redef fun operator do return "|"
+end
+
+# A `^=` assignment operation
+class ACaretAssignOp
+ super AAssignOp
+
+ redef fun operator do return "^"
+end
+
+# A `&=` assignment operation
+class AAmpAssignOp
+ super AAssignOp
+
+ redef fun operator do return "&"
+end
+
# A `<<=` assignment operation
class ALlAssignOp
super AAssignOp