diff --git a/cli/src/generate/build_tables/build_parse_table.rs b/cli/src/generate/build_tables/build_parse_table.rs index 729e3f3a..d37fce33 100644 --- a/cli/src/generate/build_tables/build_parse_table.rs +++ b/cli/src/generate/build_tables/build_parse_table.rs @@ -443,13 +443,10 @@ impl<'a> ParseTableBuilder<'a> { .unwrap(); write!(&mut msg, "Possible interpretations:\n\n").unwrap(); - let interpretions = conflicting_items + let mut interpretions = conflicting_items .iter() - .enumerate() - .map(|(i, item)| { + .map(|item| { let mut line = String::new(); - write!(&mut line, " {}:", i + 1).unwrap(); - for preceding_symbol in preceding_symbols .iter() .take(preceding_symbols.len() - item.step_index as usize) @@ -505,8 +502,9 @@ impl<'a> ParseTableBuilder<'a> { .map(|i| i.0.chars().count()) .max() .unwrap(); - - for (line, prec_suffix) in interpretions { + interpretions.sort_unstable(); + for (i, (line, prec_suffix)) in interpretions.into_iter().enumerate() { + write!(&mut msg, " {}:", i + 1).unwrap(); msg += &line; if let Some(prec_suffix) = prec_suffix { for _ in line.chars().count()..max_interpretation_length { diff --git a/test/fixtures/test_grammars/associativity_missing/expected_error.txt b/test/fixtures/test_grammars/associativity_missing/expected_error.txt index 6f9b5824..f9cc955d 100644 --- a/test/fixtures/test_grammars/associativity_missing/expected_error.txt +++ b/test/fixtures/test_grammars/associativity_missing/expected_error.txt @@ -4,8 +4,8 @@ Unresolved conflict for symbol sequence: Possible interpretations: - 1: expression '+' (math_operation expression • '+' expression) - 2: (math_operation expression '+' expression) • '+' … + 1: (math_operation expression '+' expression) • '+' … + 2: expression '+' (math_operation expression • '+' expression) Possible resolutions: diff --git a/test/fixtures/test_grammars/conflict_in_repeat_rule/expected_error.txt b/test/fixtures/test_grammars/conflict_in_repeat_rule/expected_error.txt index 94d1caa4..4357c5cf 100644 --- a/test/fixtures/test_grammars/conflict_in_repeat_rule/expected_error.txt +++ b/test/fixtures/test_grammars/conflict_in_repeat_rule/expected_error.txt @@ -4,8 +4,8 @@ Unresolved conflict for symbol sequence: Possible interpretations: - 1: '[' (array_type_repeat1 identifier) • identifier … - 2: '[' (array_repeat1 identifier) • identifier … + 1: '[' (array_repeat1 identifier) • identifier … + 2: '[' (array_type_repeat1 identifier) • identifier … Possible resolutions: diff --git a/test/fixtures/test_grammars/conflict_in_repeat_rule_after_external_token/expected_error.txt b/test/fixtures/test_grammars/conflict_in_repeat_rule_after_external_token/expected_error.txt index 4a81f0ef..4d0bdebc 100644 --- a/test/fixtures/test_grammars/conflict_in_repeat_rule_after_external_token/expected_error.txt +++ b/test/fixtures/test_grammars/conflict_in_repeat_rule_after_external_token/expected_error.txt @@ -4,8 +4,8 @@ Unresolved conflict for symbol sequence: Possible interpretations: - 1: _program_start '[' (array_type_repeat1 identifier) • identifier … - 2: _program_start '[' (array_repeat1 identifier) • identifier … + 1: _program_start '[' (array_repeat1 identifier) • identifier … + 2: _program_start '[' (array_type_repeat1 identifier) • identifier … Possible resolutions: diff --git a/test/fixtures/test_grammars/conflicting_precedence/expected_error.txt b/test/fixtures/test_grammars/conflicting_precedence/expected_error.txt index ea23b072..92ae2157 100644 --- a/test/fixtures/test_grammars/conflicting_precedence/expected_error.txt +++ b/test/fixtures/test_grammars/conflicting_precedence/expected_error.txt @@ -4,9 +4,9 @@ Unresolved conflict for symbol sequence: Possible interpretations: - 1: expression '+' (product expression • '*' expression) (precedence: 1, associativity: Left) + 1: (sum expression '+' expression) • '*' … (precedence: 0, associativity: Left) 2: expression '+' (other_thing expression • '*' '*') (precedence: -1, associativity: Left) - 3: (sum expression '+' expression) • '*' … (precedence: 0, associativity: Left) + 3: expression '+' (product expression • '*' expression) (precedence: 1, associativity: Left) Possible resolutions: diff --git a/test/fixtures/test_grammars/partially_resolved_conflict/expected_error.txt b/test/fixtures/test_grammars/partially_resolved_conflict/expected_error.txt index a8699897..d5d2c1bf 100644 --- a/test/fixtures/test_grammars/partially_resolved_conflict/expected_error.txt +++ b/test/fixtures/test_grammars/partially_resolved_conflict/expected_error.txt @@ -4,8 +4,8 @@ Unresolved conflict for symbol sequence: Possible interpretations: - 1: (unary_b '!' expression) • '<' … (precedence: 2) - 2: (unary_a '!' expression) • '<' … (precedence: 2) + 1: (unary_a '!' expression) • '<' … (precedence: 2) + 2: (unary_b '!' expression) • '<' … (precedence: 2) Possible resolutions: diff --git a/test/fixtures/test_grammars/precedence_on_single_child_missing/expected_error.txt b/test/fixtures/test_grammars/precedence_on_single_child_missing/expected_error.txt index 557f1837..281439ea 100644 --- a/test/fixtures/test_grammars/precedence_on_single_child_missing/expected_error.txt +++ b/test/fixtures/test_grammars/precedence_on_single_child_missing/expected_error.txt @@ -4,8 +4,8 @@ Unresolved conflict for symbol sequence: Possible interpretations: - 1: identifier (function_call identifier • block) (precedence: 0, associativity: Right) - 2: identifier (expression identifier) • '{' … + 1: identifier (expression identifier) • '{' … + 2: identifier (function_call identifier • block) (precedence: 0, associativity: Right) Possible resolutions: