From c08194f176ddfcac0c11b0f939a538527bdc45fb Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Wed, 15 Apr 2015 10:50:33 +0700 Subject: [PATCH] grammar: add more combined assignment operator Signed-off-by: Jean Privat --- src/parser/nit.sablecc3xx | 18 ++++++++++ src/parser/parser_nodes.nit | 76 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 50fc1cf..5ca0e37 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -158,6 +158,12 @@ quad = '::'; assign = '='; pluseq = '+='; minuseq = '-='; +stareq = '*='; +slasheq = '/='; +percenteq = '%='; +starstareq = '**='; +lleq = '<<='; +ggeq = '>>='; dotdotdot = '...'; dotdot = '..'; dot = '.'; @@ -443,6 +449,12 @@ assignment~nopar {-> expr} assign_op = {plus} pluseq | {minus} minuseq + | {star} stareq + | {slash} slasheq + | {percent} percenteq + | {starstar} starstareq + | {ll} lleq + | {gg} ggeq ; do~withelse {-> expr} @@ -937,6 +949,12 @@ exprs 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; diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 5fa19ce..1525f17 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -730,6 +730,36 @@ class TMinuseq 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 @@ -2559,20 +2589,62 @@ abstract class AAssignOp 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 -- 1.7.9.5