assign = '=';
pluseq = '+=';
minuseq = '-=';
+stareq = '*=';
+slasheq = '/=';
+percenteq = '%=';
+starstareq = '**=';
+lleq = '<<=';
+ggeq = '>>=';
dotdotdot = '...';
dotdot = '..';
dot = '.';
assign_op
= {plus} pluseq
| {minus} minuseq
+ | {star} stareq
+ | {slash} slasheq
+ | {percent} percenteq
+ | {starstar} starstareq
+ | {ll} lleq
+ | {gg} ggeq
;
do~withelse {-> expr}
assign_op
= {plus} [op]:pluseq
| {minus}[op]:minuseq
+ | {star} [op]:stareq
+ | {slash} [op]:slasheq
+ | {percent} [op]:percenteq
+ | {starstar} [op]:starstareq
+ | {ll} [op]:lleq
+ | {gg} [op]:ggeq
;
module_name = quad? [path]:id* id;
super TokenOperator
end
+# The operator `*=`
+class TStareq
+ super TokenOperator
+end
+
+# The operator `/=`
+class TSlasheq
+ super TokenOperator
+end
+
+# The operator `%=`
+class TPercenteq
+ super TokenOperator
+end
+
+# The operator `**=`
+class TStarstareq
+ super TokenOperator
+end
+
+# The operator `<<=`
+class TLleq
+ super TokenOperator
+end
+
+# The operator `>>=`
+class TGgeq
+ super TokenOperator
+end
+
# The symbol `...`
class TDotdotdot
super Token
fun operator: String is abstract
end
-# The `+=` assignment operation
+# A `+=` assignment operation
class APlusAssignOp
super AAssignOp
redef fun operator do return "+"
end
-# The `-=` assignment operator
+# A `-=` assignment operation
class AMinusAssignOp
super AAssignOp
redef fun operator do return "-"
end
+# A `*=` assignment operation
+class AStarAssignOp
+ super AAssignOp
+
+ redef fun operator do return "*"
+end
+
+# A `/=` assignment operation
+class ASlashAssignOp
+ super AAssignOp
+
+ redef fun operator do return "/"
+end
+
+# A `%=` assignment operation
+class APercentAssignOp
+ super AAssignOp
+
+ redef fun operator do return "%"
+end
+
+# A `**=` assignment operation
+class AStarstarAssignOp
+ super AAssignOp
+
+ redef fun operator do return "**"
+end
+
+# A `<<=` assignment operation
+class ALlAssignOp
+ super AAssignOp
+
+ redef fun operator do return "<<"
+end
+
+# A `>>=` assignment operation
+class AGgAssignOp
+ super AAssignOp
+
+ redef fun operator do return ">>"
+end
+
# A possibly fully-qualified module identifier
class AModuleName
super Prod