next up previous contents
Next: Using Shared Items during Up: Performing Ambiguity Checks within Previous: Determination of Context

Check ambiguity

Next we call the parser (i.e., we run our uniform algorithm in the parsing mode), whose task is to parse the extended string. If the extended string cannot be parsed, we conclude that no revision is necessary, and the call of REVISION_P terminates with false. However, if the parser returns one or more results (which corresponds to semantic readings of the extended string), we apply the ambiguity check performed inside the function AMBIGUOUS (see below). Only if a parsed result exists and the result is ambiguous, REVISION_P returns true which will cause revision of the new string spanned by the passive item.

The ambiguity check is performed as follows. First we delete all spurious ambiguities in the same way as in the non-incremental method, i.e., for a pair of derivation trees which have the same semantics we only retain one. After this operation we may have either only one reading or a set of readings. The latter case means that there are different possibilities to assign a meaning to the extended string, therefore revision for the new string should take place.

The former case is a bit more complicated. Although this case means that the extended string has been analysed as unambiguous (since we have obtained only one result), it might be the case that this reading is the same as that of the semantic expression of the active item's lemma. In this case, we have just detected a spurious ambiguity, and therefore revision should not take place. If on the other side, the semantic expression is not equal to that of the active item, we have found an possible ambiguity, and hence, revision should take place.

The following description of the function AMBIGUOUS summarizes the different cases:

ambiguous(ParsedResult,AL):
 ReducedResult := ``delete spurious ambiguities 
                    in the same way as known from the non-incremental
                    version'';
 if card(ReducedResult) > 1
  then return true
 else
  if sem(ReducedResult) = sem(AL)
   then return false
  else true.



Guenter Neumann
Mon Oct 5 14:01:36 MET DST 1998