1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 01:54:21 +03:00
inform7/services/linguistics-test/Chapter 1/Program Control.w
2020-08-01 17:16:48 +01:00

120 lines
3.4 KiB
OpenEdge ABL

[Main::] Program Control.
What shall we test?
@ A simple command line:
@d PROGRAM_NAME "linguistics-test"
@e VOCABULARY_CLSW
@e TEST_DIAGRAMS_CLSW
@e RAW_DIAGRAMS_CLSW
@e TRACE_DIAGRAMS_CLSW
@e VIABILITY_DIAGRAMS_CLSW
@e SURGERY_CLSW
@e TEST_ARTICLES_CLSW
@e TEST_PRONOUNS_CLSW
=
int main(int argc, char **argv) {
Foundation::start(argc, argv);
WordsModule::start();
InflectionsModule::start();
SyntaxModule::start();
LexiconModule::start();
LinguisticsModule::start();
pathname *P = Pathnames::from_text(I"services");
P = Pathnames::down(P, I"linguistics-test");
P = Pathnames::down(P, I"Tangled");
filename *S = Filenames::in(P, I"Syntax.preform");
LoadPreform::load(S, NULL);
CommandLine::declare_heading(
L"linguistics-test: a tool for testing the linguistics module\n");
CommandLine::declare_switch(TEST_DIAGRAMS_CLSW, L"diagram", 2,
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(SURGERY_CLSW, L"surgery", 2,
L"show surgeries performed on 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,
L"test pronoun stock (ignoring X)");
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);
WordsModule::end();
InflectionsModule::end();
SyntaxModule::end();
LexiconModule::end();
LinguisticsModule::end();
Foundation::end();
return 0;
}
@ |-trace| turns all verb phrase tracing on; |-viability| just shows the
viability map for each sentence.
@d TRACING_LINGUISTICS_CALLBACK Main::trace_parsing
=
int trace_diagrams_mode = FALSE;
int viability_diagrams_mode = FALSE;
int surgery_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;
if (A == SURGERY_VP_TRACE) return surgery_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 SURGERY_CLSW:
surgery_mode = TRUE;
Diagramming::test_diagrams(arg, TRUE);
break;
case RAW_DIAGRAMS_CLSW:
Interpreting::go(Diagramming::test_diagrams(arg, TRUE));
break;
case TEST_DIAGRAMS_CLSW:
Interpreting::go(Diagramming::test_diagrams(arg, FALSE));
break;
case TEST_ARTICLES_CLSW:
Articles::create_small_word_sets();
Articles::test(STDOUT);
break;
case TEST_PRONOUNS_CLSW:
Pronouns::create_small_word_sets();
Pronouns::test(STDOUT);
break;
}
DL = save_DL;
}
void Main::ignore(int id, text_stream *arg, void *state) {
Errors::fatal("only switches may be used at the command line");
}