From 8e87f4f56ff3900464bc910ee5f51fe499f4d757 Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Thu, 12 Dec 2002 00:22:16 +0000 Subject: [PATCH 1/1] Add notes svn path=/trunk/mcs/; revision=9579 --- mcs/mcs/NOTES | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 mcs/mcs/NOTES diff --git a/mcs/mcs/NOTES b/mcs/mcs/NOTES new file mode 100644 index 00000000000..ccae274939a --- /dev/null +++ b/mcs/mcs/NOTES @@ -0,0 +1,38 @@ +* Notes on improving error handling in MCS + (from Axel Schreiner ) + + +I included the 'recover' example with C# as well. Currently the package +is at . I did change some +names and the embedding that the user does somewhat, i.e., it is not +directly compatible with what you did. + +Here is the important part about error recovery. To make the typical +iterations bullet-proof, code them as follows: + +opt : // null + | opt WORD { yyErrorFlag = 0; } + | opt error + +seq : WORD + | seq WORD { yyErrorFlag = 0; } + | error + | seq error + +list : WORD + | list ',' WORD { yyErrorFlag = 0; } + | error + | list error + | list error WORD { yyErrorFlag = 0; } + | list ',' error + +i.e., throw in 'error' wherever a token can be. 'yyErrorFlag' need not +be set to zero, but if it is done this way, second errors are caught +earlier. This may introduce s/r conflicts, but they tend to be harmless. + +In your case -- the comment concerning error recovery at the beginning +of your compiler jay file -- just adding 'error' to the different +global things won't work. Your example will already have started to +advance in one of the rules and 'error' is then not in the lookahead of +wherever the parse then is. You need to put 'error' into the iteration +above those global things. \ No newline at end of file -- 2.25.1