diff --git a/CHANGES.md b/CHANGES.md index 1e7e80154..ce4482d24 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +# UNRELEASED + +- Parser: + - New accept `→` as `->` since it is found in Elpi tutorials rendered in + HTML + # v3.4.3 (November 2025) Requires Menhir 20211230 and OCaml 4.13 or above. diff --git a/src/parser/gen_token_precedence.ml b/src/parser/gen_token_precedence.ml index 1f19a40f6..a3642c936 100644 --- a/src/parser/gen_token_precedence.ml +++ b/src/parser/gen_token_precedence.ml @@ -6,9 +6,11 @@ let pp_mehir_fixity fmt = function | Infixr -> Format.fprintf fmt "right" let pp_token_names fmt l = - l |> List.iter (function - | Fixed { token; _ } -> Format.fprintf fmt "%s " token - | Extensible { token; _ } -> Format.fprintf fmt "%s " token) + let toks = l |> List.map (function + | Fixed { token; _ } -> Format.asprintf "%s" token + | Extensible { token; _ } -> Format.asprintf "%s" token) in + let toks = Elpi_util.Util.uniq @@ List.sort Stdlib.compare toks in + Format.fprintf fmt "%s" (String.concat " " toks) let () = Format.printf "%%right BIND\n"; diff --git a/src/parser/lexer_config.ml b/src/parser/lexer_config.ml index d8c7dedee..be8d0e0b4 100644 --- a/src/parser/lexer_config.ml +++ b/src/parser/lexer_config.ml @@ -66,7 +66,8 @@ let mixfix_symbols : mixfix list = [ { tokens = [ mkFix "CONJ" "," CONJ; mkFix "CONJ2" "&" CONJ2]; fixity = Infixr }; - { tokens = [ mkFix "ARROW" "->" ARROW]; + { tokens = [ mkFix "ARROW" "->" ARROW; + mkFix "ARROW" "→" ARROW]; fixity = Infixr }; { tokens = [ mkFix "DARROW" "=>" DARROW]; fixity = Infixr }; diff --git a/src/parser/token_precedence.mly b/src/parser/token_precedence.mly index 7d59d47b1..ee44bf4b7 100644 --- a/src/parser/token_precedence.mly +++ b/src/parser/token_precedence.mly @@ -1,22 +1,22 @@ %right BIND -%nonassoc VDASH QDASH -%right OR -%right DDARROW -%right DDARROWBANG -%right CONJ CONJ2 -%right ARROW -%right DARROW -%nonassoc EQ EQ2 FAMILY_LT FAMILY_GT IS -%right CONS -%nonassoc FAMILY_TICK -%left FAMILY_EXP FAMILY_PLUS MINUS MINUSr MINUSi MINUSs -%left FAMILY_TIMES SLASH DIV MOD -%right FAMILY_MINUS -%nonassoc FAMILY_BTICK -%right FAMILY_EQ -%right FAMILY_OR -%right FAMILY_AND -%left FAMILY_SHARP -%nonassoc FAMILY_TILDE -%nonassoc FAMILY_QMARK +%nonassoc QDASH VDASH +%right OR +%right DDARROW +%right DDARROWBANG +%right CONJ CONJ2 +%right ARROW +%right DARROW +%nonassoc EQ EQ2 FAMILY_GT FAMILY_LT IS +%right CONS +%nonassoc FAMILY_TICK +%left FAMILY_EXP FAMILY_PLUS MINUS MINUSi MINUSr MINUSs +%left DIV FAMILY_TIMES MOD SLASH +%right FAMILY_MINUS +%nonassoc FAMILY_BTICK +%right FAMILY_EQ +%right FAMILY_OR +%right FAMILY_AND +%left FAMILY_SHARP +%nonassoc FAMILY_TILDE +%nonassoc FAMILY_QMARK %%