From c6766f6f9598081a472342626702c1ad6983e529 Mon Sep 17 00:00:00 2001
From: Graham Nelson
<s-sentence> ::=
- <existential-np> <s-existential-verb-tail> | ==> Make SV provided object is descriptive4.2;
+ <np-existential> <s-existential-verb-tail> | ==> Make SV provided object is descriptive4.2;
<s-noun-phrase> <s-general-verb-tail> ==> Make SV4.1;
<s-existential-verb-tail> ::=
diff --git a/docs/core-module/6-nv.html b/docs/core-module/6-nv.html
index 3ff2d0817..e998d5284 100644
--- a/docs/core-module/6-nv.html
+++ b/docs/core-module/6-nv.html
@@ -1442,7 +1442,7 @@ usages to the debugging log.
define TRACING_LINGUISTICS_CALLBACK NewVerbs::trace_parsing
-int NewVerbs::trace_parsing(void) {
+int NewVerbs::trace_parsing(int A) {
if (SyntaxTree::is_trace_set(Task::syntax_tree())) return TRUE;
return FALSE;
}
diff --git a/docs/core-module/7-ptu.html b/docs/core-module/7-ptu.html
index b2dd5e9b9..658d25e0e 100644
--- a/docs/core-module/7-ptu.html
+++ b/docs/core-module/7-ptu.html
@@ -489,6 +489,7 @@ be such that their head nodes each pass this test:
WRITE("'%S'", text);
DISCARD_TEXT(text)
}
+ Diagrams::log_node(OUT, pn);
if ((pn->node_type >= UNKNOWN_NT) && (pn->node_type <= TEST_VALUE_NT))
Log annotations of specification nodes14.1
@@ -523,18 +524,14 @@ be such that their head nodes each pass this test:
case HEADING_NT: WRITE(" (level %d)", Annotations::read_int(pn, heading_level_ANNOT)); break;
case COMMON_NOUN_NT: show_refers = TRUE; break;
case KIND_NT: show_refers = TRUE; break;
- case RELATIONSHIP_NT:
- Diagrams::log_node(OUT, pn);
- break;
+ case RELATIONSHIP_NT: break;
case PROPER_NOUN_NT:
- Diagrams::log_node(OUT, pn);
if (Annotations::read_int(pn, multiplicity_ANNOT))
WRITE(" (x%d)", Annotations::read_int(pn, multiplicity_ANNOT));
show_refers = TRUE;
break;
case VERB_NT:
WRITE(" ($V)", Annotations::read_int(pn, verb_id_ANNOT));
- Diagrams::log_node(OUT, pn);
break;
case TOKEN_NT: WRITE(" [%d/%d]", Annotations::read_int(pn, slash_class_ANNOT),
Annotations::read_int(pn, slash_dash_dash_ANNOT)); break;
diff --git a/docs/core-module/9-tbath.html b/docs/core-module/9-tbath.html
index c15c8e7d6..a822c44ce 100644
--- a/docs/core-module/9-tbath.html
+++ b/docs/core-module/9-tbath.html
@@ -288,7 +288,7 @@ the massive Assertions::Maker
void Assertions::Copular::make_assertion(parse_node *px, parse_node *py) {
if (traverse == 1) {
int pc = problem_count;
- if (!(<existential-np>(Node::get_text(px))))
+ if (!(<np-existential>(Node::get_text(px))))
Assertions::Refiner::refine(px, ALLOW_CREATION);
Assertions::Refiner::refine(py, ALLOW_CREATION);
if (problem_count > pc) return;
@@ -296,7 +296,7 @@ the massive Assertions::Maker
}
if (SyntaxTree::is_trace_set(Task::syntax_tree())) LOG("$T", current_sentence);
- if (<existential-np>(Node::get_text(px))) {
+ if (<np-existential>(Node::get_text(px))) {
if (traverse == 1) Assertions::Copular::make_existential_assertion(py);
px = py;
} else {
diff --git a/docs/core-module/9-tc.html b/docs/core-module/9-tc.html
index 0e58a44d9..59847734f 100644
--- a/docs/core-module/9-tc.html
+++ b/docs/core-module/9-tc.html
@@ -109,7 +109,7 @@ message had to be issued during its work.
int Assertions::Creator::consult_the_creator(parse_node *px, parse_node *py) {
problem_count_when_creator_started = problem_count;
- if (<existential-np>(Node::get_text(px)))
+ if (<np-existential>(Node::get_text(px)))
Perform creation duties on a "There is..." sentence1.1
else
Perform creation duties on a copular sentence1.2;
diff --git a/docs/linguistics-module/1-dgr.html b/docs/linguistics-module/1-dgr.html
index bf1a2c214..9824dda6f 100644
--- a/docs/linguistics-module/1-dgr.html
+++ b/docs/linguistics-module/1-dgr.html
@@ -271,7 +271,7 @@ first place: a lesson there for all of us.
return Diagrams::new_arity0(UNPARSED_NOUN_NT, W);
}
-parse_node *Diagrams::new_DEFECTIVE(wording W) {
+parse_node *Diagrams::new_DEFECTIVE(wording W) {
if (preform_lookahead_mode) return NULL;
return Diagrams::new_arity0(DEFECTIVE_NOUN_NT, W);
}
@@ -281,25 +281,25 @@ first place: a lesson there for all of us.
return Diagrams::new_arity0(PROPER_NOUN_NT, W);
}
-parse_node *Diagrams::new_PROPERTY_LIST(wording W) {
+parse_node *Diagrams::new_PROPERTY_LIST(wording W) {
if (preform_lookahead_mode) return NULL;
return Diagrams::new_arity0(PROPERTY_LIST_NT, W);
}
-parse_node *Diagrams::new_PRONOUN(wording W, pronoun_usage *pro) {
+parse_node *Diagrams::new_PRONOUN(wording W, pronoun_usage *pro) {
if (preform_lookahead_mode) return NULL;
parse_node *PN = Diagrams::new_arity0(PRONOUN_NT, W);
Node::set_pronoun(PN, pro);
return PN;
}
-parse_node *Diagrams::new_KIND(wording W, parse_node *O) {
+parse_node *Diagrams::new_KIND(wording W, parse_node *O) {
if (preform_lookahead_mode) return NULL;
if (O == NULL) return Diagrams::new_arity0(KIND_NT, W);
return Diagrams::new_arity1(KIND_NT, W, O);
}
-parse_node *Diagrams::new_RELATIONSHIP(wording W, VERB_MEANING_LINGUISTICS_TYPE *R,
+parse_node *Diagrams::new_RELATIONSHIP(wording W, VERB_MEANING_LINGUISTICS_TYPE *R,
parse_node *O) {
if (preform_lookahead_mode) return NULL;
parse_node *P = Diagrams::new_arity1(RELATIONSHIP_NT, W, O);
@@ -307,22 +307,22 @@ first place: a lesson there for all of us.
return P;
}
-parse_node *Diagrams::new_implied_RELATIONSHIP(wording W, VERB_MEANING_LINGUISTICS_TYPE *R) {
+parse_node *Diagrams::new_implied_RELATIONSHIP(wording W, VERB_MEANING_LINGUISTICS_TYPE *R) {
if (preform_lookahead_mode) return NULL;
return Diagrams::new_RELATIONSHIP(W, R, Diagrams::new_PRONOUN(W, Pronouns::get_implied()));
}
-parse_node *Diagrams::new_AND(wording W, parse_node *X, parse_node *Y) {
+parse_node *Diagrams::new_AND(wording W, parse_node *X, parse_node *Y) {
if (preform_lookahead_mode) return NULL;
return Diagrams::new_arity2(AND_NT, W, X, Y);
}
-parse_node *Diagrams::new_WITH(wording W, parse_node *X, parse_node *Y) {
+parse_node *Diagrams::new_WITH(wording W, parse_node *X, parse_node *Y) {
if (preform_lookahead_mode) return NULL;
return Diagrams::new_arity2(WITH_NT, W, X, Y);
}
-parse_node *Diagrams::new_CALLED(wording W, parse_node *X, parse_node *Y) {
+parse_node *Diagrams::new_CALLED(wording W, parse_node *X, parse_node *Y) {
if (preform_lookahead_mode) return NULL;
return Diagrams::new_arity2(CALLED_NT, W, X, Y);
}
diff --git a/docs/linguistics-module/3-apoo.html b/docs/linguistics-module/3-apoo.html
index 8a66d103e..ec3d905af 100644
--- a/docs/linguistics-module/3-apoo.html
+++ b/docs/linguistics-module/3-apoo.html
@@ -163,7 +163,7 @@ its used wording "for the second time", and unused wording "X is 7".
return tp->used_wording;
}
-wording Occurrence::unused_wording(time_period *tp) {
+wording Occurrence::unused_wording(time_period *tp) {
if (tp == NULL) internal_error("no time period");
return tp->unused_wording;
}
@@ -263,7 +263,7 @@ cannot contain any HR; this cuts down our parsing time considerably.
-time_period *Occurrence::parse(wording W) { +time_period *Occurrence::parse(wording W) { if (<historical-reference-possible>(W)) { LOOP_THROUGH_WORDING(k, W) { <<to>> = -1; diff --git a/docs/linguistics-module/3-vm.html b/docs/linguistics-module/3-vm.html index 72018fd2c..ab1f3e48a 100644 --- a/docs/linguistics-module/3-vm.html +++ b/docs/linguistics-module/3-vm.html @@ -88,7 +88,7 @@ to ask for a reversal to be performed when needed.-VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::reverse_VMT(VERB_MEANING_LINGUISTICS_TYPE *recto) { +VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::reverse_VMT(VERB_MEANING_LINGUISTICS_TYPE *recto) { #ifdef VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK return VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK(recto); #endif @@ -142,7 +142,7 @@ has been specified. return vm; } -int VerbMeanings::is_meaningless(verb_meaning *vm) { +int VerbMeanings::is_meaningless(verb_meaning *vm) { vm = VerbMeanings::follow_indirection(vm); if (vm == NULL) return TRUE; if ((vm->regular_meaning == NULL) && (vm->special_meaning == NULL)) return TRUE; @@ -235,7 +235,7 @@ have to follow any indirection, and reverse if necessary.-VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::get_regular_meaning(verb_meaning *vm) { +VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::get_regular_meaning(verb_meaning *vm) { if (vm == NULL) return NULL; int rev = vm->take_meaning_reversed; vm = VerbMeanings::follow_indirection(vm); @@ -245,7 +245,7 @@ have to follow any indirection, and reverse if necessary. return rel; } -VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::get_regular_meaning_of_form(verb_form *vf) { +VERB_MEANING_LINGUISTICS_TYPE *VerbMeanings::get_regular_meaning_of_form(verb_form *vf) { return VerbMeanings::get_regular_meaning( VerbMeanings::first_unspecial_meaning_of_verb_form(vf)); } @@ -257,13 +257,13 @@ whether to reverse what that function does.-special_meaning_holder *VerbMeanings::get_special_meaning_fn(verb_meaning *vm) { +special_meaning_holder *VerbMeanings::get_special_meaning_fn(verb_meaning *vm) { vm = VerbMeanings::follow_indirection(vm); if (vm == NULL) return NULL; return vm->special_meaning; } -int VerbMeanings::get_reversal_status_of_smf(verb_meaning *vm) { +int VerbMeanings::get_reversal_status_of_smf(verb_meaning *vm) { if (vm == NULL) return FALSE; return vm->take_meaning_reversed; } diff --git a/docs/linguistics-module/3-vrb.html b/docs/linguistics-module/3-vrb.html index ed08d9d0e..0321bdc7d 100644 --- a/docs/linguistics-module/3-vrb.html +++ b/docs/linguistics-module/3-vrb.html @@ -301,7 +301,7 @@ of verb and two prepositions: return NULL; } -verb_form *Verbs::find_form(verb *V, preposition *prep, preposition *second_prep) { +verb_form *Verbs::find_form(verb *V, preposition *prep, preposition *second_prep) { if (V) for (verb_form *vf = V->first_form; vf; vf = vf->next_form) if ((vf->preposition == prep) && (vf->second_clause_preposition == second_prep)) diff --git a/docs/linguistics-module/3-vu.html b/docs/linguistics-module/3-vu.html index 0a2407a98..7ab20b600 100644 --- a/docs/linguistics-module/3-vu.html +++ b/docs/linguistics-module/3-vu.html @@ -529,7 +529,7 @@ list, with lower priority numbers before higher ones. return root; } -verb *VerbUsages::get_verb(verb_usage *vu) { +verb *VerbUsages::get_verb(verb_usage *vu) { if (vu) return Verbs::from_lcon(Stock::first_form_in_usage(vu->usage)); return NULL; } @@ -559,7 +559,7 @@ confine ourselves to words flagged in the vocabulary as being used in verbs.-int VerbUsages::parse_against_verb(wording W, verb_usage *vu) { +int VerbUsages::parse_against_verb(wording W, verb_usage *vu) { if ((vu->vu_allow_unexpected_upper_case == FALSE) && (Word::unexpectedly_upper_case(Wordings::first_wn(W)))) return -1; return WordAssemblages::parse_as_strictly_initial_text(W, &(vu->vu_text)); diff --git a/docs/linguistics-module/4-np.html b/docs/linguistics-module/4-np.html index 18209d541..62822d0ed 100644 --- a/docs/linguistics-module/4-np.html +++ b/docs/linguistics-module/4-np.html @@ -79,9 +79,9 @@ MathJax = { -To construct noun-phrase subtrees for assertion sentences found in the parse tree.
+To construct noun-phrase subtrees for assertion sentences.
-
§1. Hierarchy of noun phrases. Noun phrase nodes are built at four levels of elaboration, which we take in
turn:
@@ -114,7 +114,15 @@ used in a balanced way: thus <np-unparsed> ==> 0; *XP = RP[1]
§4. Articled nounphrases (NP2). Now an initial article becomes an annotation and is removed from the text.
+ §4. The noun phrase of an existential sentence is recognised thus:
+ §5. Articled nounphrases (NP2). Now an initial article becomes an annotation and is removed from the text.
Note that
§6. The following function is only occasionally useful (for example, Inform
+ §7. The following function is only occasionally useful (for example, Inform
uses it in Tables of Definitions (in core)); takes an existing raw node
and retrospectively applies <np-articled> to it.
§7. List-divided nounphrases (NP3). An "articled list" matches text like "the lion, a witch, and some wardrobes"
+ §8. List-divided nounphrases (NP3). An "articled list" matches text like "the lion, a witch, and some wardrobes"
as a list of articled noun phrases.
§8. "Alternative lists" divide up at "or" rather than "and", thus matching text
+ §9. "Alternative lists" divide up at "or" rather than "and", thus matching text
such as "voluminous, middling big or poky", and the individual entries are not
articled.
§9. Full nounphrases (NP4). When fully parsing the structure of a nounphrase, we have five different
+ §10. Full nounphrases (NP4). When fully parsing the structure of a nounphrase, we have five different
constructions in play, and need to work out their precedence over each other:
rather as * takes precedence over + in arithmetic expressions in C, so
here we have —
@@ -225,7 +233,7 @@ the word "kind" alone, or "kind of N" for some atomic noun N.
See About Sentence Diagrams for numerous examples.
§10. Full nounphrase parsing varies slightly according to the position of the
+ §11. Full nounphrase parsing varies slightly according to the position of the
phrase, i.e., whether it is in the subject or object position. Thus "X is Y"
or "X is in Y" would lead to X being parsed by <np-as-subject>, Y by <np-as-object>.
They are identical except that:
@@ -238,16 +246,16 @@ looks like a participle.
§11. To explain the limitation here: RPs only exist in the subject position due
+ §12. To explain the limitation here: RPs only exist in the subject position due
to subject-verb inversion in English. Thus, "In the Garden is a tortoise" is a
legal inversion of "A tortoise is in the Garden". Following this logic we ought
to accept Yoda-like inversions such as "Holding the light sabre is the young Jedi",
@@ -267,7 +275,7 @@ called "Area".
<np-relative-phrase-explicit> ==> 0; *XP = RP[1]
§12. Inform guesses above that most English words ending in "-ing" are present
+ §13. Inform guesses above that most English words ending in "-ing" are present
participles — like guessing, bluffing, cheating, and so on. But there is
a conspicuous exception to this; so any word found in <non-participles>
is never treated as a participle.
@@ -286,19 +294,19 @@ is never treated as a participle.
}
§13. An implicit RP is a word like "carried", or "worn", on its own — this
+ §14. An implicit RP is a word like "carried", or "worn", on its own — this
implies a relation to some unspecified noun. We represent that in the tree
using the "implied noun" pronoun. For now, these are fixed.
§13.1. Act on the implicit RP worn13.1 =
+ §14.1. Act on the implicit RP worn14.1 =
§13.2. Act on the implicit RP carried13.2 =
+ §14.2. Act on the implicit RP carried14.2 =
§13.3. Act on the implicit RP initially carried13.3 =
+ §14.3. Act on the implicit RP initially carried14.3 =
§14. An explicit RP is one which uses a preposition and then a noun phrase: for
+ §15. An explicit RP is one which uses a preposition and then a noun phrase: for
example, "on the table" is explicit.
§14.1. Work out a meaning14.1 =
+ §15.1. Work out a meaning15.1 =
§15. We have now disposed of RELATIONSHIP_NT and are left with the constructs:
+ §16. We have now disposed of RELATIONSHIP_NT and are left with the constructs:
§16. The tail of with-or-having parses for instance "with carrying capacity 5"
+ §17. The tail of with-or-having parses for instance "with carrying capacity 5"
in the NP
§17. The "and" tail is much easier:
+ §18. The "and" tail is much easier:
§18. Kind phrases are easier:
+ §2. A new annotation is like a blank luggage ticket, waiting to be filled out
and attached to some suitcase. All is has is its ID:
§18. This is occasionally useful:
-
-
+<np-existential> ::=
+ there ==> 0; *XP = Diagrams::new_DEFECTIVE(W);
+
+
+
-
+
-parse_node *NounPhrases::add_article(parse_node *p, article_usage *au) {
+parse_node *NounPhrases::add_article(parse_node *p, article_usage *au) {
Node::set_article(p, au);
return p;
}
-
-
-
<np-as-subject> ::=
- <existential-np> | ==> 0; *XP = RP[1]
+ <np-existential> | ==> 0; *XP = RP[1]
<if-not-deliberately-capitalised> <np-relative-phrase-limited> | ==> 0; *XP = RP[2]
- <np-nonrelative> ==> 0; *XP = RP[1]
+ <np-nonrelative> ==> 0; *XP = RP[1]
<np-as-object> ::=
<if-not-deliberately-capitalised> <np-relative-phrase-unlimited> | ==> 0; *XP = RP[2]
- <np-nonrelative> ==> 0; *XP = RP[1]
+ <np-nonrelative> ==> 0; *XP = RP[1]
-
-
-
<np-relative-phrase-implicit> ::=
- worn | ==> Act on the implicit RP worn13.1
- carried | ==> Act on the implicit RP carried13.2
- initially carried ==> Act on the implicit RP initially carried13.3
+ worn | ==> Act on the implicit RP worn14.1
+ carried | ==> Act on the implicit RP carried14.2
+ initially carried ==> Act on the implicit RP initially carried14.3
-
@@ -309,8 +317,8 @@ using the "implied noun" pronoun. For now, these are fixed.
*X = 0; *XP = Diagrams::new_implied_RELATIONSHIP(W, R_wearing);
#endif
-
-
+
@@ -321,8 +329,8 @@ using the "implied noun" pronoun. For now, these are fixed.
*X = 0; *XP = Diagrams::new_implied_RELATIONSHIP(W, R_carrying);
#endif
-
-
+
@@ -333,8 +341,8 @@ using the "implied noun" pronoun. For now, these are fixed.
*X = 0; *XP = Diagrams::new_implied_RELATIONSHIP(W, R_carrying);
#endif
-
-
+
-
@@ -360,8 +368,8 @@ directions, in particular, a little better. But it means we do not recognise
if (R == NULL) return FALSE;
*XP = Diagrams::new_RELATIONSHIP(W, VerbMeanings::reverse_VMT(R), RP[2]);
-
-
+
@@ -397,7 +405,7 @@ text like "smile X-)" will in fact match <np-nonrelative>.
<np-nonrelative> ==> 0; *XP = RP[1]
-
-
@@ -443,7 +451,7 @@ bogus object called "locking it".)
{_,/and} <np-operand> ==> Wordings::first_wn(W); *XP= RP[1]
-
diff --git a/docs/linguistics-module/4-vp.html b/docs/linguistics-module/4-vp.html
index c0bef4c3b..f24d934a0 100644
--- a/docs/linguistics-module/4-vp.html
+++ b/docs/linguistics-module/4-vp.html
@@ -12,6 +12,11 @@
+
+
+
+
+
+
@@ -50,6 +58,8 @@
enum VOCABULARY_CLSW
enum TEST_DIAGRAMS_CLSW
enum RAW_DIAGRAMS_CLSW
+enum TRACE_DIAGRAMS_CLSW
+enum VIABILITY_DIAGRAMS_CLSW
enum TEST_ARTICLES_CLSW
enum TEST_PRONOUNS_CLSW
@@ -75,6 +85,10 @@
L"test sentence diagrams from text in X");
CommandLine::declare_switch(RAW_DIAGRAMS_CLSW, L"raw", 2,
L"test raw sentence diagrams from text in X");
+ CommandLine::declare_switch(TRACE_DIAGRAMS_CLSW, L"trace", 2,
+ L"test raw sentence diagrams from text in X with tracing on");
+ CommandLine::declare_switch(VIABILITY_DIAGRAMS_CLSW, L"viability", 2,
+ L"show viability map for sentences in X");
CommandLine::declare_switch(VOCABULARY_CLSW, L"vocabulary", 2,
L"read vocabulary from file X for use in -diagram tests");
CommandLine::declare_switch(TEST_ARTICLES_CLSW, L"test-articles", 2,
@@ -82,7 +96,7 @@
CommandLine::declare_switch(TEST_PRONOUNS_CLSW, L"test-pronouns", 2,
L"test pronoun stock (ignoring X)");
- CommandLine::read(argc, argv, NULL, &Main::respond, &Main::ignore);
+ CommandLine::read(argc, argv, NULL, &Main::respond, &Main::ignore);
WordsModule::end();
InflectionsModule::end();
@@ -92,10 +106,37 @@
Foundation::end();
return 0;
}
+
+
-void Main::respond(int id, int val, text_stream *arg, void *state) {
+
define TRACING_LINGUISTICS_CALLBACK Main::trace_parsing
+
+
+int trace_diagrams_mode = FALSE;
+int viability_diagrams_mode = FALSE;
+int Main::trace_parsing(int A) {
+ if (trace_diagrams_mode) return trace_diagrams_mode;
+ if (A == VIABILITY_VP_TRACE) return viability_diagrams_mode;
+ return FALSE;
+}
+
+
+
+
+void Main::respond(int id, int val, text_stream *arg, void *state) {
+ text_stream *save_DL = DL;
+ DL = STDOUT;
+ Streams::enable_debugging(DL);
switch (id) {
case VOCABULARY_CLSW: Banking::load_from_file(arg); break;
+ case TRACE_DIAGRAMS_CLSW:
+ trace_diagrams_mode = TRUE;
+ Diagramming::test_diagrams(arg, TRUE);
+ break;
+ case VIABILITY_DIAGRAMS_CLSW:
+ viability_diagrams_mode = TRUE;
+ Diagramming::test_diagrams(arg, TRUE);
+ break;
case RAW_DIAGRAMS_CLSW:
Interpreting::go(Diagramming::test_diagrams(arg, TRUE));
break;
@@ -111,9 +152,10 @@
Pronouns::test(STDOUT);
break;
}
+ DL = save_DL;
}
-void Main::ignore(int id, text_stream *arg, void *state) {
+void Main::ignore(int id, text_stream *arg, void *state) {
Errors::fatal("only switches may be used at the command line");
}
diff --git a/docs/syntax-module/2-na.html b/docs/syntax-module/2-na.html
index 16fba04d2..8d16686fc 100644
--- a/docs/syntax-module/2-na.html
+++ b/docs/syntax-module/2-na.html
@@ -81,7 +81,7 @@ annotations in the following.
struct parse_node_annotation *next_annotation;
} parse_node_annotation;
-
+
-void Node::log_with_annotations(parse_node *pn) {
- LOG("Diagnosis $P", pn);
- for (parse_node_annotation *pna = pn->annotations; pna; pna = pna->next_annotation)
- LOG("-%d", pna->annotation_id);
- LOG("\n");
-}
-
diff --git a/inform7/Downloads/preform-diagnostics.txt b/inform7/Downloads/preform-diagnostics.txt
index 1501c7515..beb46ebea 100644
--- a/inform7/Downloads/preform-diagnostics.txt
+++ b/inform7/Downloads/preform-diagnostics.txt
@@ -2,12 +2,12 @@