I7: Disambiguation and plurals

So I decided to track down the automatic parsing of possessive pronouns and switch it off. I’m not sure this is entirely safe; delving into the parser is like a pub crawl full of honey badgers, and all the globals make tidy changes a difficult proposition. But I was convinced to post this anyway, so here goes.

Include (-
[ Descriptors  o x flag cto type n;
	ResetDescriptors();
	if (wn > num_words) return 0;

	for (flag=true : flag :) {
		o = NextWordStopped(); flag = false;

	   for (x=1 : x<=LanguageDescriptors-->0 : x=x+4)
			if (o == LanguageDescriptors-->x) {
				flag = false;
				type = LanguageDescriptors-->(x+2);
				if (type ~= DEFART_PK) indef_mode = true;
				indef_possambig = true;
				indef_cases = indef_cases & (LanguageDescriptors-->(x+1));

				if (type == light)  indef_type = indef_type | LIT_BIT;
				if (type == -light) indef_type = indef_type | UNLIT_BIT;
			}

		if (o == OTHER1__WD or OTHER2__WD or OTHER3__WD) {
			indef_mode = 1; flag = 1;
			indef_type = indef_type | OTHER_BIT;
		}
		if (o == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) {
			indef_mode = 1; flag = 1; indef_wanted = INDEF_ALL_WANTED;
			if (take_all_rule == 1) take_all_rule = 2;
			indef_type = indef_type | PLURAL_BIT;
		}
		if (allow_plurals) {
			if (NextWordStopped() ~= -1 or THEN1__WD) { wn--; n = TryNumber(wn-1); } else { n=0; wn--; }
			if (n == 1) { indef_mode = 1; flag = 1; }
			if (n > 1) {
				indef_guess_p = 1;
				indef_mode = 1; flag = 1; indef_wanted = n;
				indef_nspec_at = wn-1;
				indef_type = indef_type | PLURAL_BIT;
			}
		}
		if (flag == 1 && NextWordStopped() ~= OF1__WD or OF2__WD or OF3__WD or OF4__WD)
			wn--;  ! Skip 'of' after these
	}
	wn--;
	return 0;
];

[ SafeSkipDescriptors;
	@push indef_mode; @push indef_type; @push indef_wanted;
	@push indef_guess_p; @push indef_possambig; @push indef_owner;
	@push indef_cases; @push indef_nspec_at;
	
	Descriptors();
	
	@pull indef_nspec_at; @pull indef_cases;
	@pull indef_owner; @pull indef_possambig; @pull indef_guess_p;
	@pull indef_wanted; @pull indef_type; @pull indef_mode;
];
-) instead of "Parsing Descriptors" in "Parser.i6t".


A cyber-commando is a kind of man.

Some cybernetics are a kind of thing.
Some cybernetics are part of every cyber-commando.

A subject is a kind of thing. Regular cybernetics is a subject.

Rex is a cyber-commando. The printed name is "Rex 'Power' Colt". The description is "Just your average Mark IV Cyber-Commando." Understand "power" and "colt" as Rex.

There is a room. Rex is here. 

Quizzing it about is an action applying to one thing and one visible thing. Understand "quiz [someone] about [any subject]" as quizzing it about.
Personal-quizzing it about is an action applying to one thing and one thing. Understand "quiz [someone] about [any cybernetics]" as personal-quizzing it about.

Understand "his" as a thing when the item described is enclosed by a man.

After quizzing Rex about regular cybernetics, say "'I don't remember what happened during the War, but those things saved the lives of a hell of a lot of Americans.'"

After personal-quizzing Rex about a random cybernetics part of Rex, say "'Me and Spider never got the latest upgrades.'"

Test me with "quiz rex about cybernetics/quiz rex about his cybernetics/quiz Rex about rex's cybernetics".

There is a room.

Another approach is to dig into the LanguageDescriptors array (in I6 code) and replace the pronoun entries with ‘nonword,’ .