Prev: 30665 Up: Map Next: 30729
30673: Inglish: Run The Grammar
Used by the routine at Inglish_KeepTheUnknownWord.
Runs the grammar over the tokens and, when they match, performs the action. Reached through the jump table at JumpTable, dispatched from 30160.
InglishRunTheGrammar 30673 LD HL,30079 Point HL at the matcher patch at 30079.
30676 LD (HL),C Store the saved byte in the matcher patch.
30677 INC HL Step to the next byte of the matcher patch.
30678 LD (HL),B Store the saved byte in the matcher patch.
This entry point is used by the routine at Inglish_KeepTheUnknownWord.
InglishRunTheGrammar_0 30679 LD D,80 The class being run is 80.
Test the matcher phase.
30681 LD A,(46873) Jump to InglishRunTheGrammar_FollowTheGrammarFlag if *46873 is not 2.
30684 CP 2
30686 JR NZ,InglishRunTheGrammar_FollowTheGrammarFlag
30688 LD HL,(30075) Jump to InglishRunTheGrammar_ClearTheMatcherPhase if the word at 30075 is not zero.
30691 LD A,H
30692 OR L
30693 JR NZ,InglishRunTheGrammar_ClearTheMatcherPhase
30695 BIT 6,(IY+25) Jump to InglishRunTheGrammar_CopyFourGrammarBytes if bit 6 of the clause byte at offset 25 is set.
30699 JR NZ,InglishRunTheGrammar_CopyFourGrammarBytes
30701 LD BC,65512 Step back one parser record.
30704 ADD IY,BC
30706 CALL Inglish_BlankAParserSlot Call Inglish_BlankAParserSlot to blank a parser slot.
InglishRunTheGrammar_CopyFourGrammarBytes 30709 CALL Inglish_CopyFourGrammarBytes Call Inglish_CopyFourGrammarBytes to copy four grammar bytes.
30712 LD (IY+1),64 Set the clause byte at offset 1 to 64.
30716 JP InglishPrepareTheClause_3 Jump back to InglishPrepareTheClause_3 to clear the matcher scratch.
InglishRunTheGrammar_ClearTheMatcherPhase 30719 CALL Inglish_ClearTheMatcherPhase Call Inglish_ClearTheMatcherPhase to clear the matcher phase.
InglishRunTheGrammar_FollowTheGrammarFlag 30722 CALL Inglish_FollowTheGrammarFlag Call Inglish_FollowTheGrammarFlag to follow the grammar flag.
30725 JP Z,InglishPrepareTheClause_3 Jump back to InglishPrepareTheClause_3. Inglish_FollowTheGrammarFlag always returns zero, so this jump is always taken.
30728 RET Return.
Prev: 30665 Up: Map Next: 30729