From 4e189349517ce41f04e8f79462f5452101ba36dd Mon Sep 17 00:00:00 2001
From: Graham Nelson
-void ActionNameLists::join_to(anl_entry *earlier, anl_entry *later) { +void ActionNameLists::join_to(anl_entry *earlier, anl_entry *later) { if (ActionNameLists::precedes(later, earlier)) internal_error("misordering"); earlier->next_entry = later; } @@ -246,7 +246,7 @@ are in the list.-int ActionNameLists::precedes(anl_entry *e1, anl_entry *e2) { +int ActionNameLists::precedes(anl_entry *e1, anl_entry *e2) { if (e1 == NULL) return FALSE; if (e2 == NULL) return TRUE; @@ -269,7 +269,7 @@ are in the list. return FALSE; } -anl_entry *ActionNameLists::join_entry(anl_entry *further, anl_entry *tail) { +anl_entry *ActionNameLists::join_entry(anl_entry *further, anl_entry *tail) { if (further == NULL) return tail; if (tail == NULL) return further; anl_entry *entry = tail; @@ -333,7 +333,7 @@ anything" — a completely unrestricted action. return item; } -void ActionNameLists::clear_item_data(anl_entry *entry, action_name *an) { +void ActionNameLists::clear_item_data(anl_entry *entry, action_name *an) { entry->item.action_listed = an; entry->item.nap_listed = NULL; } @@ -430,7 +430,7 @@ the text leading to a list: return parsing_data; } -void ActionNameLists::clear_parsing_data(anl_entry *entry, wording W) { +void ActionNameLists::clear_parsing_data(anl_entry *entry, wording W) { entry->parsing_data.anl_clauses = NULL; int at = -1; if (Wordings::nonempty(W)) at = Wordings::first_wn(W); @@ -452,12 +452,12 @@ the text leading to a list: return EMPTY_WORDING; } -void ActionNameLists::set_clause_wording(anl_entry *entry, int C, wording W) { +anl_entry *ActionNameLists::set_clause_wording(anl_entry *entry, int C, wording W) { if (entry == NULL) internal_error("no entry"); anl_clause_text *prev = NULL; for (anl_clause_text *c = (entry)?(entry->parsing_data.anl_clauses):NULL; c; c = c->next_clause) { if (c->clause_ID == C) { - c->clause_text = W; return; + c->clause_text = W; return entry; } if (c->clause_ID > C) Insert clause here14.1; prev = c; @@ -475,6 +475,7 @@ the text leading to a list: nc->clause_text = W; if (prev) { nc->next_clause = prev->next_clause; prev->next_clause = nc; } else { nc->next_clause = NULL; entry->parsing_data.anl_clauses = nc; } + return entry;
- ==> { TRUE, ActionNameLists::add_in_clause(RP[1], GET_RW(<text-of-in-clause>, 1)) } + if (experimental_anl_system == FALSE) { + ==> { TRUE, ActionNameLists::add_in_clause(RP[1], GET_RW(<text-of-in-clause>, 1)) } + } else { + ==> { TRUE, ActionNameLists::options(RP[1], R[2], GET_RW(<text-of-clause>, 1), FALSE) } + }
§24. This matches a comma/or-separated list of items: +
+ ++anl_entry *ActionNameLists::options(anl_entry *entry, int C, wording W, int compulsory) { + anl_entry *original = entry; + if (compulsory == FALSE) { + ActionNameLists::dup(entry); + entry = entry->next_entry; + } + ActionNameLists::set_clause_wording(entry, C, W); + LOG("So: "); ActionNameLists::log_entry(original); LOG("\n"); + if (original != entry) { LOG("And: "); ActionNameLists::log_entry(entry); LOG("\n"); } + return original; +} + +void ActionNameLists::dup(anl_entry *entry) { + anl_entry *saved = entry->next_entry; + anl_entry *new_entry = ActionNameLists::new_entry_at(EMPTY_WORDING); + new_entry->parsing_data = entry->parsing_data; + new_entry->item = entry->item; + entry->next_entry = new_entry; + new_entry->next_entry = saved; +} ++
§25. This matches a comma/or-separated list of items:
@@ -786,17 +829,17 @@ for instance, we don't want to count the "in" from "fixed in place". _,/or <anl> ==> { pass 1 }
§25. Items can be named action patterns, so let's get those out of the way first: +
§26. Items can be named action patterns, so let's get those out of the way first:
<anl-entry> ::= - <named-action-pattern> | ==> Make a NAP entry25.1 - <named-action-pattern> <text-of-in-clause> | ==> Make a NAP entry with an in clause25.2 + <named-action-pattern> | ==> Make a NAP entry26.1 + <named-action-pattern> <text-of-in-clause> | ==> Make a NAP entry with an in clause26.2 <anl-entry-with-action> ==> { pass 1 }
§25.1. Make a NAP entry25.1 = +
@@ -804,18 +847,21 @@ for instance, we don't want to count the "in" from "fixed in place". entry->item.nap_listed = RP[1]; ==> { 0, entry };-
§25.2. Make a NAP entry with an in clause25.2 = +
§26.2. Make a NAP entry with an in clause26.2 =
anl_entry *entry = ActionNameLists::new_entry_at(W); entry->item.nap_listed = RP[1]; - ActionNameLists::add_in_clause(entry, GET_RW(<text-of-in-clause>, 1)); + if (experimental_anl_system) + ActionNameLists::options(entry, R[2], GET_RW(<text-of-clause>, 1), TRUE); + else + ActionNameLists::add_in_clause(entry, GET_RW(<text-of-in-clause>, 1)); ==> { 0, entry };-
§26. Which reduces us to an internal nonterminal for an entry in this list. +
§27. Which reduces us to an internal nonterminal for an entry in this list. It actually produces multiple matches: for example,
@@ -832,7 +878,7 @@ end, but it's syntactically valid.)<anl-entry-with-action> internal { anl_entry *results = NULL; - Parse the wording into a list of results26.1; + Parse the wording into a list of results27.1; if (results) { ==> { -, results }; return TRUE; } @@ -840,7 +886,7 @@ end, but it's syntactically valid.) }
§26.1. Parse the wording into a list of results26.1 = +
§27.1. Parse the wording into a list of results27.1 =
@@ -849,16 +895,16 @@ end, but it's syntactically valid.) action_name *an; LOOP_OVER(an, action_name) { - Ready the trial entry for another test26.1.1; + Ready the trial entry for another test27.1.1; wording RW = EMPTY_WORDING; - Make the trial entry fit this action, if possible, leaving remaining text in RW26.1.2; - Consider the trial entry for inclusion in the results list26.1.3; + Make the trial entry fit this action, if possible, leaving remaining text in RW27.1.2; + Consider the trial entry for inclusion in the results list27.1.3; NoMatch: ; } LOGIF(ACTION_PATTERN_PARSING, "Parsing ANL from %W resulted in:\n$8\n", W, results);-
§26.1.1. Ready the trial entry for another test26.1.1 = +
§27.1.1. Ready the trial entry for another test27.1.1 =
@@ -866,14 +912,14 @@ end, but it's syntactically valid.) ActionNameLists::clear_item_data(trial_entry, an); ActionNameLists::clear_parsing_data(trial_entry, W);-
§26.1.2. Here XW will be the wording of the action name, say "removing it from"; +
§27.1.2. Here XW will be the wording of the action name, say "removing it from"; we try to fit W to this, say "removing a heavy thing from something in the Dining Room"; and if we cannot, we run away to the label NoMatch, which is inelegant, but there's no elegant way to break out of nested loops in C.
-Make the trial entry fit this action, if possible, leaving remaining text in RW26.1.2 = +
Make the trial entry fit this action, if possible, leaving remaining text in RW27.1.2 =
@@ -907,30 +953,34 @@ inelegant, but there's no elegant way to break out of nested loops in C. trial_entry->parsing_data.abbreviation_level = Wordings::last_wn(XW)-x_m+1; RW = Wordings::from(W, w_m);-
§26.1.3. Consider the trial entry for inclusion in the results list26.1.3 = +
§27.1.3. Consider the trial entry for inclusion in the results list27.1.3 =
+ int C = -1; wording CW = EMPTY_WORDING; if (Wordings::empty(RW)) { - Include the trial entry26.1.3.2; + Include the trial entry27.1.3.2; } else if (<text-of-in-clause>(RW)) { - ActionNameLists::add_in_clause(trial_entry, GET_RW(<text-of-in-clause>, 1)); - Include the trial entry26.1.3.2; + if (experimental_anl_system) { + C = <<r>>; CW = GET_RW(<text-of-clause>, 1); + } else + ActionNameLists::add_in_clause(trial_entry, GET_RW(<text-of-in-clause>, 1)); + Include the trial entry27.1.3.2; } else if ((ActionSemantics::can_have_noun(an)) && - (ActionNameLists::parse_to_tail(trial_entry, RW))) { - Include the trial entry26.1.3.2; + (ActionNameLists::parse_to_tail(trial_entry, RW))) { + Include the trial entry27.1.3.2; }-
§26.1.3.1. As an aside, the following code runs a specially adapted form of <anl-to-tail>: +
§27.1.3.1. As an aside, the following code runs a specially adapted form of <anl-to-tail>: not one which parses any differently, just one which uses the trial entry and not newly-created ones (which would be expensive on memory).
anl_entry *to_tail_entry_being_parsed = NULL; -anl_entry *ActionNameLists::entry_for_to_tail(wording W) { +anl_entry *ActionNameLists::entry_for_to_tail(wording W) { anl_entry *entry; if ((!preform_lookahead_mode) && (to_tail_entry_being_parsed)) entry = to_tail_entry_being_parsed; @@ -939,7 +989,7 @@ newly-created ones (which would be expensive on memory). return entry; } -int ActionNameLists::parse_to_tail(anl_entry *entry, wording W) { +int ActionNameLists::parse_to_tail(anl_entry *entry, wording W) { int result = FALSE; to_tail_entry_being_parsed = entry; if (<anl-to-tail>(W)) result = TRUE; @@ -947,12 +997,12 @@ newly-created ones (which would be expensive on memory). return result; }-
§26.1.3.2. So this is the happy ending. We don't copy the trial entry; we insertion-sort +
§27.1.3.2. So this is the happy ending. We don't copy the trial entry; we insertion-sort the structure itself into the results list, and make a fresh structure to be the trial entry for future trials.
-Include the trial entry26.1.3.2 = +
Include the trial entry27.1.3.2 =
@@ -965,9 +1015,11 @@ the trial entry for future trials. if (prev) ActionNameLists::join_to(prev, trial_entry); else results = trial_entry; ActionNameLists::join_to(trial_entry, pos); } + if (C != -1) + ActionNameLists::options(trial_entry, C, CW, TRUE); trial_entry = ActionNameLists::new_entry_at(EMPTY_WORDING);-
-wording ActionNameNames::tensed(action_name *an, int tense) { +wording ActionNameNames::tensed(action_name *an, int tense) { if (tense == IS_TENSE) return an->naming_data.present_name; if (tense == HASBEEN_TENSE) return an->naming_data.past_name; internal_error("action tense unsupported"); @@ -211,7 +211,7 @@ preposition can be abbreviated is under the author's control:-int ActionNameNames::it_optional(action_name *an) { +int ActionNameNames::it_optional(action_name *an) { return an->naming_data.it_optional; } @@ -219,7 +219,7 @@ preposition can be abbreviated is under the author's control: an->naming_data.abbreviable = TRUE; } -int ActionNameNames::abbreviable(action_name *an) { +int ActionNameNames::abbreviable(action_name *an) { return an->naming_data.abbreviable; }diff --git a/docs/if-module/4-as.html b/docs/if-module/4-as.html index 91b5274f2..de597925a 100644 --- a/docs/if-module/4-as.html +++ b/docs/if-module/4-as.html @@ -185,7 +185,7 @@ preferred way to do that is to use activities for selecting missing parameters.-int ActionSemantics::can_have_noun(action_name *an) { +int ActionSemantics::can_have_noun(action_name *an) { if (an->semantics.max_parameters >= 1) return TRUE; return FALSE; } diff --git a/docs/if-module/4-pc.html b/docs/if-module/4-pc.html index 9998ced65..cf7c85652 100644 --- a/docs/if-module/4-pc.html +++ b/docs/if-module/4-pc.html @@ -546,9 +546,9 @@ We treat words like "something" specially to avoid them being read asaction_pattern *ParseClauses::experiment(wording W) { LOG("Experiment on: %W\n", W); - disable_anl_in = TRUE; + experimental_anl_system = TRUE; action_name_list *anl = ActionNameLists::parse(W, IS_TENSE, NULL); - disable_anl_in = TRUE; + experimental_anl_system = FALSE; LOG("$L\n", anl); action_name *chief_an = ActionNameLists::get_best_action(anl); if (chief_an == NULL) chief_an = ActionNameNames::longest_nounless(W, IS_TENSE, NULL); diff --git a/inform7/Downloads/preform-diagnostics.txt b/inform7/Downloads/preform-diagnostics.txt index 73ee08523..a07c2ae7e 100644 --- a/inform7/Downloads/preform-diagnostics.txt +++ b/inform7/Downloads/preform-diagnostics.txt @@ -1,10 +1,10 @@ -internal nti 23 constraint (none) extremes [1, 1] + internal nti 24 constraint (none) extremes [1, 1] - internal hits 1165/6388 nti 24 constraint (none) extremes [0, 0] + internal hits 1168/6396 nti 25 constraint (none) extremes [0, 0] - internal hits 3873/7958 nti 25 constraint (none) extremes [0, 0] + internal hits 3873/7958 nti 26 constraint (none) extremes [0, 0] - hits 746/1492 nti 26 constraint (none) extremes [1, infinity) + hits 746/1492 nti 27 constraint (none) extremes [1, infinity) English: {......} (hits 746/746) (matched long text) constraint (none) extremes [1, infinity) @@ -14,17 +14,17 @@ {......} , {......} (hits 6/13) (matched long text) constraint DS = {15} extremes [3, infinity) - internal nti 27 constraint (none) extremes [1, 1] + internal nti 28 constraint (none) extremes [1, 1] - internal hits 2894/22722 nti 28 constraint (none) extremes [1, 1] + internal hits 2894/22722 nti 29 constraint (none) extremes [1, 1] - internal nti 29 constraint (none) extremes [1, 1] + internal nti 30 constraint (none) extremes [1, 1] - internal hits 25/50 nti 30 constraint (none) extremes [1, 1] + internal hits 25/50 nti 31 constraint (none) extremes [1, 1] - internal nti 31 constraint (none) extremes [1, 1] + internal nti 6 constraint (none) extremes [1, 1] - internal hits 2/12958 nti 6 constraint (none) extremes [0, 0] + internal hits 2/12958 nti 7 constraint (none) extremes [0, 0] hits 0/18 nti 16 constraint DS = {16} extremes [3, infinity) English: @@ -73,11 +73,11 @@ {...} than constraint DS = {22} extremes [2, infinity) - internal nti 7 constraint (none) extremes [1, infinity) + internal nti 8 constraint (none) extremes [1, infinity) - internal nti 8 constraint (none) extremes [1, infinity) + internal nti 9 constraint (none) extremes [1, infinity) - nti 9 constraint CW = {23, 24, 25} extremes [2, 2] + nti 10 constraint CW = {23, 24, 25} extremes [2, 2] English: constraint CS = {23} extremes [2, 2] @@ -339,7 +339,7 @@ yw* an constraint CS = {25} extremes [2, 2] - nti 10 constraint DW = {6, 7, 26, 27, 28, 29, 30, 31} extremes [3, infinity) + nti 11 constraint DW = {6, 7, 26, 27, 28, 29, 30, 31} extremes [3, infinity) English: {...} constraint DS = {26} extremes [3, infinity) @@ -1499,7 +1499,7 @@ shouldn't shouldn't constraint CS = {25} extremes [2, 2] - nti 11 constraint DW = {12, 13, 14, 15, 16} extremes [3, infinity) + nti 12 constraint DW = {12, 13, 14, 15, 16} extremes [3, infinity) English: {...} constraint DS = {12} extremes [3, infinity) @@ -2025,7 +2025,7 @@ * 0ing constraint CS = {16} extremes [2, 2] - nti 12 constraint DW = {17, 18, 19, 20, 21, 22} extremes [2, infinity) + nti 13 constraint DW = {17, 18, 19, 20, 21, 22} extremes [2, infinity) English: constraint CS = {17} extremes [2, 2] @@ -2337,7 +2337,7 @@ write written constraint CS = {17} extremes [2, 2] - nti 13 constraint DW = {6, 7, 26, 27, 28, 29, 30, 31} extremes [2, infinity) + nti 14 constraint DW = {6, 7, 26, 27, 28, 29, 30, 31} extremes [2, infinity) English: constraint CS = {30} extremes [2, 2] @@ -2353,7 +2353,7 @@ do does constraint CS = {30} extremes [2, 2] - nti 14 constraint DW = {18, 19, 20, 21, 22} extremes [3, infinity) + nti 15 constraint DW = {18, 19, 20, 21, 22} extremes [3, infinity) English: {...} constraint DS = {18} extremes [3, infinity) @@ -3595,7 +3595,7 @@ * 0ed constraint CS = {22} extremes [2, 2] - nti 15 constraint DW = {9, 10, 11} extremes [2, infinity) + nti 16 constraint DW = {9, 10, 11} extremes [2, infinity) English: constraint CS = {9} extremes [2, 2] @@ -4642,7 +4642,7 @@ * 1 constraint CS = {21} extremes [2, 2] - nti 16 constraint CS = {22} extremes [1, 1] + nti 17 constraint CS = {22} extremes [1, 1] English: constraint CS = {22} extremes [1, 1] @@ -4728,45 +4728,45 @@ twelfth constraint CS = {27} extremes [1, 1] - internal hits 200/22490 nti r0 constraint CS = {r0} extremes [1, 1] + internal hits 200/24654 nti r0 constraint CS = {r0} extremes [1, 1] internal nti r1 constraint CS = {r1} extremes [1, 1] - internal hits 36/72 nti 17 constraint (none) extremes [1, 1] + internal hits 36/72 nti 18 constraint (none) extremes [1, 1] - internal hits 0/258 nti 22 constraint (none) extremes [1, infinity) + internal hits 0/258 nti 23 constraint (none) extremes [1, infinity) - hits 36371/72742 nti 18 constraint (none) extremes [1, infinity) + hits 36370/72740 nti 19 constraint (none) extremes [1, infinity) English: {...} - (hits 7816/36371) (matched long text) constraint (none) extremes [2, infinity) + (hits 7816/36370) (matched long text) constraint (none) extremes [2, infinity) {...} - (hits 28555/28555) (matched long text) constraint (none) extremes [1, infinity) + (hits 28554/28554) (matched long text) constraint (none) extremes [1, infinity) - nti 19 constraint (none) extremes [1, infinity) + nti 20 constraint (none) extremes [1, infinity) English: {...} constraint (none) extremes [2, infinity) {...} constraint (none) extremes [1, infinity) - hits 82268/164536 nti 20 constraint (none) extremes [1, infinity) + hits 82260/164520 nti 21 constraint (none) extremes [1, infinity) English: {...} - (hits 16034/46972) (matched long text) constraint (none) extremes [2, infinity) + (hits 16033/46968) (matched long text) constraint (none) extremes [2, infinity) {...} - (hits 66234/66234) (matched long text) constraint (none) extremes [1, infinity) + (hits 66227/66227) (matched long text) constraint (none) extremes [1, infinity) - nti 21 constraint (none) extremes [2, infinity) + nti 22 constraint (none) extremes [2, infinity) English: {...} constraint (none) extremes [2, infinity) - internal hits 16483/97518 nti r2 constraint (none) extremes [1, 1] + internal hits 16481/97508 nti r2 constraint (none) extremes [1, 1] - internal hits 20287/236966 nti r2 constraint (none) extremes [1, 1] + internal hits 20287/236948 nti r2 constraint (none) extremes [1, 1] - internal hits 2011/40530 nti r2 constraint (none) extremes [1, 1] + internal hits 2305/41132 nti r2 constraint (none) extremes [1, 1] nti r2 constraint CS = {r2} extremes [6, 6] English: @@ -4827,10 +4827,10 @@ other than constraint CS = {28} extremes [2, 2] - hits 16/21920 nti 29 constraint DS = {29} extremes [2, infinity) + hits 16/21918 nti 29 constraint DS = {29} extremes [2, infinity) English: not {...} - (hits 16/6096) (matched long text) constraint DS = {29} extremes [2, infinity) + (hits 16/6074) (matched long text) constraint DS = {29} extremes [2, infinity) hits 79/158 nti 30 constraint (none) extremes [1, infinity) English: @@ -4841,26 +4841,26 @@ {...} (hits 79/79) (matched: 'dvd carried by the person asked') constraint (none) extremes [1, infinity) - hits 0/21636 nti 31 constraint DS = {31} extremes [2, infinity) + hits 0/21634 nti 31 constraint DS = {31} extremes [2, infinity) English: no one {***} - (hits 0/6466) constraint DS = {31} extremes [2, infinity) + (hits 0/6895) constraint DS = {31} extremes [2, infinity) - internal hits 92/1206 nti 22 constraint (none) extremes [1, 1] + internal hits 92/1206 nti 23 constraint (none) extremes [1, 1] - internal hits 7/56 nti 23 constraint (none) extremes [1, 1] + internal hits 7/56 nti 24 constraint (none) extremes [1, 1] - internal hits 490/20500 nti 24 constraint (none) extremes [1, 1] + internal hits 490/20500 nti 25 constraint (none) extremes [1, 1] - internal nti 25 constraint (none) extremes [1, 1] + internal nti 26 constraint (none) extremes [1, 1] - internal nti 26 constraint (none) extremes [1, 1] + internal nti 27 constraint (none) extremes [1, 1] - internal hits 0/444 nti 27 constraint (none) extremes [1, 1] + internal hits 0/444 nti 28 constraint (none) extremes [1, 1] - internal hits 0/176 nti 28 constraint (none) extremes [1, 1] + internal hits 0/176 nti 29 constraint (none) extremes [1, 1] - internal hits 0/690 nti 29 constraint (none) extremes [1, 1] + internal hits 0/690 nti 30 constraint (none) extremes [1, 1] nti 6 constraint CS = {6} extremes [6, 6] English: @@ -4915,47 +4915,47 @@ internal hits 16/128 nti 7 constraint FS = {7} extremes [1, infinity) - internal hits 1/8314 nti 8 constraint FS = {8} extremes [1, infinity) + internal hits 1/8462 nti 8 constraint FS = {8} extremes [1, infinity) - internal hits 0/1564 nti 9 constraint FS = {9} extremes [1, infinity) + internal hits 0/1478 nti 9 constraint FS = {9} extremes [1, infinity) internal nti 10 constraint FS = {10} extremes [1, infinity) internal nti 11 constraint FS = {11} extremes [1, infinity) - internal hits 210/5162 nti 30 constraint (none) extremes [1, infinity) + internal hits 210/5162 nti 31 constraint (none) extremes [1, infinity) - internal hits 59/4030 nti 31 constraint (none) extremes [1, infinity) + internal hits 59/4030 nti 6 constraint (none) extremes [1, infinity) - internal hits 1/2 nti 6 constraint (none) extremes [1, infinity) + internal hits 1/2 nti 7 constraint (none) extremes [1, infinity) - internal nti 7 constraint (none) extremes [1, infinity) + internal nti 8 constraint (none) extremes [1, infinity) - internal hits 58/118 nti 8 constraint (none) extremes [1, infinity) + internal hits 58/118 nti 9 constraint (none) extremes [1, infinity) internal nti 12 constraint DS = {12} extremes [1, infinity) - internal hits 635/18350 nti 13 constraint DS = {13} extremes [1, infinity) + internal hits 635/16964 nti 13 constraint DS = {13} extremes [1, infinity) - internal hits 258/8472 nti 14 constraint DS = {14} extremes [1, infinity) + internal hits 258/8498 nti 14 constraint DS = {14} extremes [1, infinity) - hits 67/4408 nti 13 constraint CS = {13} extremes [1, 1] + hits 67/4426 nti 13 constraint CS = {13} extremes [1, 1] English: always/certainly - (hits 10/1075) (matched: 'always') constraint CS = {13} extremes [1, 1] + (hits 10/1042) (matched: 'always') constraint CS = {13} extremes [1, 1] usually/normally - (hits 53/1065) (matched: 'usually') constraint CS = {13} extremes [1, 1] + (hits 53/1032) (matched: 'usually') constraint CS = {13} extremes [1, 1] rarely/seldom - (hits 0/1012) constraint CS = {13} extremes [1, 1] + (hits 0/979) constraint CS = {13} extremes [1, 1] never - (hits 4/1012) (matched: 'never') constraint CS = {13} extremes [1, 1] + (hits 4/979) (matched: 'never') constraint CS = {13} extremes [1, 1] initially - (hits 0/1008) constraint CS = {13} extremes [1, 1] + (hits 0/975) constraint CS = {13} extremes [1, 1] hits 0/4304 nti 14 constraint DS = {14} extremes [1, infinity) English: {***} once/twice/thrice/turn/turns/time/times - (hits 0/1800) constraint DS = {14} extremes [1, infinity) + (hits 0/1802) constraint DS = {14} extremes [1, infinity) nti 18 constraint DW = {15, 16, 17, 18} extremes [1, 9] English: @@ -4983,7 +4983,7 @@ constraint DW = {15, 16} extremes [1, 6] - nti 9 constraint DW = {15, 16} extremes [1, 6] + nti 10 constraint DW = {15, 16} extremes [1, 6] English: constraint DS = {15} extremes [1, 6] @@ -5010,7 +5010,7 @@ turn/turns constraint DS = {16} extremes [2, 3] - nti 10 constraint (none) extremes [1, 2] + nti 11 constraint (none) extremes [1, 2] English: constraint (none) extremes [2, 2] @@ -5019,24 +5019,24 @@ constraint CS = {r0} extremes [1, 1] - hits 3152/6304 nti 11 constraint (none) extremes [1, infinity) + hits 3152/6304 nti 12 constraint (none) extremes [1, infinity) English: {...} (hits 3152/3152) (matched long text) constraint (none) extremes [1, infinity) - hits 60/120 nti 12 constraint (none) extremes [0, infinity) + hits 60/120 nti 13 constraint (none) extremes [0, infinity) English: ^ (hits 0/60) constraint (none) extremes [0, infinity) (hits 60/60) (matched: 'fixed in place') constraint (none) extremes [1, infinity) - hits 33/109608 nti 19 constraint CS = {19} extremes [1, 1] + hits 33/109976 nti 19 constraint CS = {19} extremes [1, 1] English: there - (hits 33/271) (matched: 'there') constraint CS = {19} extremes [1, 1] + (hits 33/277) (matched: 'there') constraint CS = {19} extremes [1, 1] - hits 2081/4162 nti 13 constraint (none) extremes [1, infinity) + hits 2081/4162 nti 14 constraint (none) extremes [1, infinity) English: {...} (hits 99/2081) (matched: '"(considering the first sixteen objects only)[command clarification break]" ( a )') constraint (none) extremes [1, infinity) @@ -5047,14 +5047,14 @@ (hits 999/999) (matched long text) constraint (none) extremes [1, infinity) - hits 255/510 nti 14 constraint (none) extremes [0, infinity) + hits 255/510 nti 15 constraint (none) extremes [0, infinity) English: ^ (hits 0/255) constraint (none) extremes [0, infinity) (hits 255/255) (matched long text) constraint (none) extremes [1, infinity) - hits 279/558 nti 15 constraint (none) extremes [1, infinity) + hits 279/558 nti 16 constraint (none) extremes [1, infinity) English: {...} (hits 99/279) (matched long text) constraint (none) extremes [1, infinity) @@ -5070,7 +5070,7 @@ _{,/and} (hits 198/566) (matched long text) constraint DS = {20} extremes [2, infinity) - hits 103/206 nti 16 constraint (none) extremes [1, infinity) + hits 103/206 nti 17 constraint (none) extremes [1, infinity) English: {...} (hits 30/103) (matched: 'unmarked for listing') constraint (none) extremes [1, infinity) @@ -5086,7 +5086,7 @@ _{,/or} (hits 60/69) (matched: 'or unmarked for listing') constraint DS = {21} extremes [2, infinity) - hits 460/920 nti 17 constraint (none) extremes [1, infinity) + hits 460/920 nti 18 constraint (none) extremes [1, infinity) English: constraint CS = {19} extremes [1, 1] @@ -5095,14 +5095,14 @@ (hits 460/460) (matched long text) constraint (none) extremes [1, infinity) - hits 576/1152 nti 18 constraint (none) extremes [1, infinity) + hits 576/1152 nti 19 constraint (none) extremes [1, infinity) English: (hits 0/576) constraint (none) extremes [1, infinity) (hits 576/576) (matched long text) constraint (none) extremes [1, infinity) - hits 0/920 nti 19 constraint (none) extremes [1, infinity) + hits 0/920 nti 20 constraint (none) extremes [1, infinity) English: (hits 0/3) constraint CS = {22} extremes [1, 2] @@ -5111,7 +5111,7 @@ (hits 0/375) constraint DS = {14} extremes [2, infinity) - hits 0/1962 nti 20 constraint (none) extremes [1, infinity) + hits 0/1962 nti 21 constraint (none) extremes [1, infinity) English: constraint CS = {22} extremes [1, 2] @@ -5123,7 +5123,7 @@ thing/something (hits 85/85) (matched: 'thing') constraint CS = {29} extremes [1, 1] - internal hits 476/23938 nti 21 constraint (none) extremes [1, 1] + internal hits 476/23938 nti 22 constraint (none) extremes [1, 1] hits 0/6 nti 22 constraint CS = {22} extremes [1, 2] English: @@ -5141,20 +5141,20 @@ _,/and (hits 0/660) constraint DS = {14, 28} extremes [2, infinity) - (hits 0/919) constraint DS = {14} extremes [2, infinity) + (hits 0/932) constraint DS = {14} extremes [2, infinity) hits 1467/2934 nti 27 constraint (none) extremes [1, infinity) English: {...} (hits 174/1467) (matched long text) constraint (none) extremes [1, infinity) {called} - (hits 57/558) (matched long text) constraint DS = {27} extremes [1, infinity) + (hits 57/407) (matched long text) constraint DS = {27} extremes [1, infinity) - (hits 0/746) constraint DS = {24} extremes [2, infinity) + (hits 0/750) constraint DS = {24} extremes [2, infinity) - (hits 87/751) (matched long text) constraint DS = {25} extremes [1, infinity) + (hits 87/501) (matched long text) constraint DS = {25} extremes [1, infinity) - (hits 30/220) (matched: 'a kind of supporter that is portable') constraint DS = {26} extremes [1, infinity) + (hits 30/521) (matched: 'a kind of supporter that is portable') constraint DS = {26} extremes [1, infinity) (hits 4/349) (matched: 'it') constraint (none) extremes [1, 1] @@ -5162,7 +5162,7 @@ (hits 1115/1115) (matched long text) constraint (none) extremes [1, infinity) - hits 431/862 nti 22 constraint (none) extremes [0, infinity) + hits 431/862 nti 23 constraint (none) extremes [0, infinity) English: (hits 0/431) constraint (none) extremes [1, infinity) @@ -5171,7 +5171,7 @@ (hits 431/431) (matched long text) constraint (none) extremes [1, infinity) - hits 0/10892 nti 24 constraint DS = {24} extremes [2, infinity) + hits 0/10908 nti 24 constraint DS = {24} extremes [2, infinity) English: it with action {***} (hits 0/3906) constraint DS = {24} extremes [3, infinity) @@ -5182,7 +5182,7 @@ {with/having} (hits 0/4107) constraint DS = {24} extremes [2, infinity) - nti 23 constraint (none) extremes [1, infinity) + nti 24 constraint (none) extremes [1, infinity) English: {...} constraint (none) extremes [1, infinity) @@ -5198,52 +5198,52 @@ _{,/and} constraint DS = {23} extremes [2, infinity) - nti 24 constraint (none) extremes [1, infinity) + nti 25 constraint (none) extremes [1, infinity) English: {...} constraint (none) extremes [1, infinity) - hits 174/4372 nti 25 constraint DS = {25} extremes [1, infinity) + hits 174/3552 nti 25 constraint DS = {25} extremes [1, infinity) English: , _{and} - (hits 8/980) (matched: ', and didn't understand addressee's last name error') constraint DS = {25} extremes [2, infinity) + (hits 8/935) (matched: ', and didn't understand addressee's last name error') constraint DS = {25} extremes [2, infinity) _{,/and} - (hits 166/1030) (matched long text) constraint DS = {25} extremes [1, infinity) + (hits 166/948) (matched long text) constraint DS = {25} extremes [1, infinity) - hits 30/440 nti 25 constraint DS = {26} extremes [1, infinity) + hits 30/1042 nti 26 constraint DS = {26} extremes [1, infinity) English: - (hits 30/216) (matched: 'a kind of supporter that is portable') constraint DS = {26} extremes [2, infinity) + (hits 30/515) (matched: 'a kind of supporter that is portable') constraint DS = {26} extremes [2, infinity) - (hits 0/190) constraint DS = {26} extremes [1, infinity) + (hits 0/491) constraint DS = {26} extremes [1, infinity) - hits 30/466 nti 26 constraint DS = {26} extremes [1, infinity) + hits 30/1646 nti 26 constraint DS = {26} extremes [1, infinity) English: kind/kinds - (hits 4/8) (matched: 'kind') constraint CS = {26} extremes [1, 1] + (hits 4/42) (matched: 'kind') constraint CS = {26} extremes [1, 1] kind/kinds of - (hits 26/225) (matched: 'kind of supporter that is portable') constraint DS = {26} extremes [2, infinity) + (hits 26/543) (matched: 'kind of supporter that is portable') constraint DS = {26} extremes [2, infinity) - internal nti 26 constraint (none) extremes [1, infinity) + internal nti 27 constraint (none) extremes [1, infinity) - internal hits 1357/2714 nti 27 constraint (none) extremes [1, infinity) + internal hits 1357/2714 nti 28 constraint (none) extremes [1, infinity) - hits 0/2764 nti 28 constraint DS = {13} extremes [2, infinity) + hits 0/2764 nti 29 constraint DS = {13} extremes [2, infinity) English: {...} - (hits 0/1024) constraint DS = {13} extremes [2, infinity) + (hits 0/1029) constraint DS = {13} extremes [2, infinity) - hits 67/2764 nti 29 constraint DS = {13} extremes [2, infinity) + hits 67/2764 nti 30 constraint DS = {13} extremes [2, infinity) English: {...} - (hits 67/1180) (matched: 'usually table of general chitchat') constraint DS = {13} extremes [2, infinity) + (hits 67/1184) (matched: 'usually table of general chitchat') constraint DS = {13} extremes [2, infinity) - hits 691/24842 nti 30 constraint CS = {30} extremes [1, 1] + hits 691/24986 nti 30 constraint CS = {30} extremes [1, 1] English: which/who/that - (hits 691/5701) (matched: 'which') constraint CS = {30} extremes [1, 1] + (hits 691/5787) (matched: 'which') constraint CS = {30} extremes [1, 1] - hits 2/2742 nti 30 constraint DS = {30} extremes [2, infinity) + hits 2/2742 nti 31 constraint DS = {30} extremes [2, infinity) English: {...} (hits 2/821) (matched: 'answering it that') constraint DS = {30} extremes [2, infinity) @@ -5256,7 +5256,7 @@ hits 196/9062 nti 6 constraint DS = {6} extremes [2, infinity) English: of {...} - (hits 196/2491) (matched: 'of day -- documented at var_time --') constraint DS = {6} extremes [2, infinity) + (hits 196/2489) (matched: 'of day -- documented at var_time --') constraint DS = {6} extremes [2, infinity) hits 5/60 nti 7 constraint CS = {7} extremes [2, 2] English: @@ -5271,9 +5271,9 @@ grammatical case (hits 1/1) (matched: 'grammatical case') constraint CS = {7} extremes [2, 2] - internal hits 2474/41934 nti 31 constraint (none) extremes [0, 0] + internal hits 2474/41926 nti 6 constraint (none) extremes [0, 0] - internal hits 164/328 nti 6 constraint (none) extremes [1, infinity) + internal hits 164/328 nti 7 constraint (none) extremes [1, infinity) hits 24/68 nti 9 constraint DS = {9} extremes [3, infinity) English: @@ -5297,22 +5297,22 @@ (hits 5/5) (matched: 'value of kind k') constraint (none) extremes [1, infinity) - hits 5777/103758 nti r5 constraint (none) extremes [1, infinity) + hits 5775/103750 nti r5 constraint (none) extremes [1, infinity) English: ( ) (hits 0/2059) constraint DS = {r5} & CW = {r2, r5} extremes [3, infinity) ^ - (hits 1589/11278) (matched: 'k') constraint CW = {r2, r5} extremes [1, infinity) + (hits 1589/11276) (matched: 'k') constraint CW = {r2, r5} extremes [1, infinity) - (hits 201/9689) (matched: 'sayable value of kind k') constraint CW = {r2, r5} extremes [1, infinity) + (hits 201/9687) (matched: 'sayable value of kind k') constraint CW = {r2, r5} extremes [1, infinity) - (hits 3626/9488) (matched: 'an ice cream cone') constraint CW = {r2, r5} extremes [1, infinity) + (hits 3624/9486) (matched: 'an ice cream cone') constraint CW = {r2, r5} extremes [1, infinity) - (hits 2/16005) (matched: 'object-based rulebook') constraint DS = {r5} extremes [2, infinity) + (hits 2/16003) (matched: 'object-based rulebook') constraint DS = {r5} extremes [2, infinity) (hits 359/5860) (matched long text) constraint CW = {r2, r5} extremes [1, infinity) - hits 40/338 nti 7 constraint (none) extremes [1, infinity) + hits 40/338 nti 8 constraint (none) extremes [1, infinity) English: (hits 32/55) (matched: 'an object') constraint (none) extremes [2, infinity) @@ -5326,9 +5326,9 @@ of kind