diff --git a/src/fancy-parser.mly b/src/fancy-parser.mly index e12ec837e50a1731851c52e5b7676e1ff0e54d94..3287e66d22b87279d69a0bb02be445d32e83d71e 100644 --- a/src/fancy-parser.mly +++ b/src/fancy-parser.mly @@ -90,7 +90,7 @@ declaration: (List.map Parameters.with_pos ss) } | k = priority_keyword ss = clist(symbol) - { let prec = ParserAux.current_token_precedence $startpos(k) $endpos(k) in + { let prec = ParserAux.new_precedence_level $startpos(k) $endpos(k) in List.map (Positions.map (fun symbol -> DTokenProperties (symbol, k, prec))) ss } | PARAMETER t = OCAMLTYPE diff --git a/src/parserAux.ml b/src/parserAux.ml index a044a850f6d87b097c75d47060ec645dc6170ce3..273e5611c535bad81e6cc44b87998012eae99a77 100644 --- a/src/parserAux.ml +++ b/src/parserAux.ml @@ -1,7 +1,7 @@ open Positions open Syntax -let current_token_precedence = +let new_precedence_level = let c = ref 0 in fun pos1 pos2 -> incr c; diff --git a/src/parserAux.mli b/src/parserAux.mli index bd0259d837cd412ac5a2fe75c33ad2cfc6121b92..de2eb452dab5114456ef7c5bd651df0e46e6dcef 100644 --- a/src/parserAux.mli +++ b/src/parserAux.mli @@ -3,9 +3,16 @@ open Syntax +(* [new_precedence_level pos1 pos2] creates a new precendence level, + which is stronger than any previously created levels, for tokens. + It should be called every time a [%left], [%right], or [%nonassoc] + declaration is found. The positions are the positions of this + declaration in the source code. *) + +val new_precedence_level: Lexing.position -> Lexing.position -> precedence_level + (* TEMPORARY document *) -val current_token_precedence: Lexing.position -> Lexing.position -> precedence_level val current_reduce_precedence: unit -> precedence_level (* [check_production_group] accepts a production group and checks that all diff --git a/src/yacc-parser.mly b/src/yacc-parser.mly index b656f5b2ff4eb488beea33007e8682f0ef39b2ea..0730c9ec90a11615ede8904845445bbdeee25740 100644 --- a/src/yacc-parser.mly +++ b/src/yacc-parser.mly @@ -86,7 +86,7 @@ declaration: Positions.mapd (fun nt -> DStart nt, DType ($2, ParameterVar ntloc)) ntloc) $3 } | priority_keyword symbols - { let prec = ParserAux.current_token_precedence (rhs_start_pos 1) (rhs_end_pos 1) in + { let prec = ParserAux.new_precedence_level (rhs_start_pos 1) (rhs_end_pos 1) in List.map (Positions.map (fun symbol -> DTokenProperties (symbol, $1, prec))) $2 } | PARAMETER OCAMLTYPE