Discard tokens after error detection to find the best repair
* Use GLR stack-splitting to try all numbers of tokens to discard until a repair is found. * Check the validity of repairs by looking at the child trees, rather than the statically-computed 'in-progress symbols' list
This commit is contained in:
parent
9d247e45b2
commit
22c550c9d6
21 changed files with 454 additions and 506 deletions
|
|
@ -100,7 +100,7 @@ describe("Parser", [&]() {
|
|||
|
||||
AssertThat(ts_node_name(error, doc), Equals("ERROR"));
|
||||
AssertThat(ts_node_start_byte(error), Equals(strlen(" [123, ")));
|
||||
AssertThat(ts_node_end_byte(error), Equals(strlen(" [123, @@@@@")));
|
||||
AssertThat(ts_node_end_byte(error), Equals(strlen(" [123, @@@@@,")));
|
||||
|
||||
AssertThat(ts_node_name(last, doc), Equals("true"));
|
||||
AssertThat(ts_node_start_byte(last), Equals(strlen(" [123, @@@@@, ")))
|
||||
|
|
@ -121,7 +121,7 @@ describe("Parser", [&]() {
|
|||
|
||||
AssertThat(ts_node_name(error, doc), Equals("ERROR"));
|
||||
AssertThat(ts_node_start_byte(error), Equals(strlen(" [123, ")))
|
||||
AssertThat(ts_node_end_byte(error), Equals(strlen(" [123, faaaaalse")))
|
||||
AssertThat(ts_node_end_byte(error), Equals(strlen(" [123, faaaaalse,")))
|
||||
|
||||
AssertThat(ts_node_name(last, doc), Equals("true"));
|
||||
AssertThat(ts_node_start_byte(last), Equals(strlen(" [123, faaaaalse, ")));
|
||||
|
|
@ -159,7 +159,7 @@ describe("Parser", [&]() {
|
|||
|
||||
AssertThat(ts_node_name(error, doc), Equals("ERROR"));
|
||||
AssertThat(ts_node_start_byte(error), Equals(strlen(" [123, ")));
|
||||
AssertThat(ts_node_end_byte(error), Equals(strlen(" [123, ")))
|
||||
AssertThat(ts_node_end_byte(error), Equals(strlen(" [123, ,")))
|
||||
|
||||
AssertThat(ts_node_name(last, doc), Equals("true"));
|
||||
AssertThat(ts_node_start_byte(last), Equals(strlen(" [123, , ")));
|
||||
|
|
@ -378,7 +378,7 @@ describe("Parser", [&]() {
|
|||
|
||||
assert_root_node(
|
||||
"(program "
|
||||
"(expression_statement (ERROR (number) (UNEXPECTED '4')) (number)) "
|
||||
"(expression_statement (number) (ERROR (UNEXPECTED '4') (number))) "
|
||||
"(expression_statement (math_op (number) (number))))");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue