From ae67302a992498a4c3fd16bcfbf6fce501b4e839 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 23 Apr 2015 15:16:54 +0700 Subject: [PATCH] parser: new class AOperatorMethid to factorize operator methods Signed-off-by: Jean Privat --- src/parser/nit.sablecc3xx | 22 ++++++++++- src/parser/parser_nodes.nit | 87 +++++++++++++------------------------------ 2 files changed, 46 insertions(+), 63 deletions(-) diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 5ca0e37..a3f4e6f 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -846,7 +846,27 @@ propdef = {attr} doc? kwredef? visibility kwvar [id2]:id type? expr? annotations | {annot} doc? kwredef? visibility? atid opar? [args]:expr* cpar? annotations? ; -methid = {id} id | {plus} plus | {minus} minus | {star} star | {starstar} starstar | {slash} slash | {percent} percent | {eq} eq | {ne} ne | {le} le | {ge} ge | {lt} lt | {gt} gt | {ll} ll | {gg} gg | {bra} obra cbra | {starship} starship | {assign} id assign | {braassign} obra cbra assign; +methid + = {id} id + | {plus} [op]:plus + | {minus} [op]:minus + | {star} [op]:star + | {starstar} [op]:starstar + | {slash} [op]:slash + | {percent} [op]:percent + | {eq} [op]:eq + | {ne} [op]:ne + | {le} [op]:le + | {ge} [op]:ge + | {lt} [op]:lt + | {gt} [op]:gt + | {ll} [op]:ll + | {gg} [op]:gg + | {starship} [op]:starship + | {bra} obra cbra + | {assign} id assign + | {braassign} obra cbra assign + ; signature = opar? [params]:param* cpar? type?; diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 1525f17..219c396 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -1425,116 +1425,87 @@ class AIdMethid var n_id: TId is writable, noinit end -# A method name `+` -class APlusMethid +# A method name for an operator +class AOperatorMethid super AMethid - # The `+` symbol - var n_plus: TPlus is writable, noinit + # The associated operator symbol + var n_op: Token is writable, noinit +end +# A method name `+` +class APlusMethid + super AOperatorMethid end # A method name `-` class AMinusMethid - super AMethid - - # The `-` symbol - var n_minus: TMinus is writable, noinit + super AOperatorMethid end # A method name `*` class AStarMethid - super AMethid - - # The `*` symbol - var n_star: TStar is writable, noinit + super AOperatorMethid end # A method name `**` class AStarstarMethid - super AMethid - - # The `**` symbol - var n_starstar: TStarstar is writable, noinit + super AOperatorMethid end # A method name `/` class ASlashMethid - super AMethid - - # The `/` symbol - var n_slash: TSlash is writable, noinit + super AOperatorMethid end # A method name `%` class APercentMethid - super AMethid + super AOperatorMethid - # The `%` symbol - var n_percent: TPercent is writable, noinit end # A method name `==` class AEqMethid - super AMethid - - # The `==` symbol - var n_eq: TEq is writable, noinit + super AOperatorMethid end # A method name `!=` class ANeMethid - super AMethid - - # The `!=` symbol - var n_ne: TNe is writable, noinit + super AOperatorMethid end # A method name `<=` class ALeMethid - super AMethid - - # The `<=` symbol - var n_le: TLe is writable, noinit + super AOperatorMethid end # A method name `>=` class AGeMethid - super AMethid - - # The `>=` symbol - var n_ge: TGe is writable, noinit + super AOperatorMethid end # A method name `<` class ALtMethid - super AMethid - - # The `<` symbol - var n_lt: TLt is writable, noinit + super AOperatorMethid end # A method name `>` class AGtMethid - super AMethid - - # The `>` symbol - var n_gt: TGt is writable, noinit + super AOperatorMethid end # A method name `<<` class ALlMethid - super AMethid - - # The `<<` symbol - var n_ll: TLl is writable, noinit + super AOperatorMethid end # A method name `>>` class AGgMethid - super AMethid + super AOperatorMethid +end - # The `>>` symbol - var n_gg: TGg is writable, noinit +# A method name `<=>` +class AStarshipMethid + super AOperatorMethid end # A method name `[]` @@ -1548,14 +1519,6 @@ class ABraMethid var n_cbra: TCbra is writable, noinit end -# A method name `<=>` -class AStarshipMethid - super AMethid - - # The `<=>` symbol - var n_starship: TStarship is writable, noinit -end - # A setter method name with a simple identifier (with a `=`) class AAssignMethid super AMethid -- 1.7.9.5