1. A method of recovering from syntax errors encountered by a parser during a parsing procedure, wherein the parser includes a tuple defining at least one of a head, a middle, an end, and a synchronization point, the method comprising: receiving a token M that corresponds to the head of the tuple, recording an indentation characteristic of the token M, and placing a state corresponding to the token M in a stack; receiving a token N characterized by being first on a line; examining the stack to find a most recent head state that has not been matched with a corresponding end state, and comparing the recorded indentation characteristic of the most recent unmatched head state to an indentation characteristic of the token N; proceeding with the parsing procedure when the indentation characteristic of the token N is greater than the recorded indentation characteristic of the most recent unmatched head state; placing in the stack a token corresponding to the end of the tuple, and inserting token N in the stack when the indentation characteristic of the token N is less than the recorded indentation characteristic of the most recent unmatched head state; proceeding with the parsing procedure when the indentation characteristic of the token N is equal to the recorded indentation characteristic of the most recent unmatched head state, and the token N corresponds to the middle or end of the tuple; placing in the stack a token corresponding to the end of the tuple, and inserting token N in the stack when the indentation characteristic of the token N is equal to the recorded indentation characteristic of the most recent unmatched head state, and the token N corresponds to neither the middle nor the end of the tuple; receiving a token P that corresponds to the synchronization point of the tuple, examining the stack to detect any unmatched head states, and placing in the stack one or more tokens corresponding to the end of the tuple necessary to match the unmatched head states; and, placing the token P on the stack.
1. A method of recovering from syntax errors encountered by a parser during a parsing procedure, wherein the parser includes a tuple defining at least one of a head, a middle, an end, and a synchronization point, the method comprising: receiving a token M that corresponds to the head of the tuple, recording an indentation characteristic of the token M, and placing a state corresponding to the token M in a stack; receiving a token N characterized by being first on a line; examining the stack to find a most recent head state that has not been matched with a corresponding end state, and comparing the recorded indentation characteristic of the most recent unmatched head state to an indentation characteristic of the token N; proceeding with the parsing procedure when the indentation characteristic of the token N is greater than the recorded indentation characteristic of the most recent unmatched head state; placing in the stack a token corresponding to the end of the tuple, and inserting token N in the stack when the indentation characteristic of the token N is less than the recorded indentation characteristic of the most recent unmatched head state; proceeding with the parsing procedure when the indentation characteristic of the token N is equal to the recorded indentation characteristic of the most recent unmatched head state, and the token N corresponds to the middle or end of the tuple; placing in the stack a token corresponding to the end of the tuple, and inserting token N in the stack when the indentation characteristic of the token N is equal to the recorded indentation characteristic of the most recent unmatched head state, and the token N corresponds to neither the middle nor the end of the tuple; receiving a token P that corresponds to the synchronization point of the tuple, examining the stack to detect any unmatched head states, and placing in the stack one or more tokens corresponding to the end of the tuple necessary to match the unmatched head states; and, placing the token P on the stack. 4. The method of claim 1 , further including modifying at least one aspect of a user interface that presents the parsing procedure to a user, to illustrate actions taken by the parser.