public bool SyntaxError(lr_parser parser, Symbol curToken)
        {
            TypeCobolProgramParser tcpParser = parser as TypeCobolProgramParser;

            if (tcpParser.IsTrial)
            {
                return(true);
            }
            List <string> expected    = ExpectedSymbols(parser, curToken);
            string        symName     = CodeElementTokenizer.CupTokenToString(curToken.sym);
            Symbol        validSymbol = GetParserValidStackSymbol(parser, curToken);
            string        text        = validSymbol != null ? (validSymbol.value as CodeElement).Text : "";
            string        msg         = string.Format("extraneous input '{0}' expecting {{{1}}}", text, string.Join(", ", expected));

            System.Diagnostics.Debug.WriteLine(msg);
            CupParserDiagnostic diagnostic = new CupParserDiagnostic(msg, validSymbol, null);

            AddDiagnostic(diagnostic);
            //Try to add the last encountered statement in the stack if it is not already entered.
            StackList <Symbol> stack = tcpParser.getParserStack();

            foreach (var symbol in stack)
            {
                if (symbol.value is StatementElement)
                {
                    lr_parser stmtParser = CloneParser(parser, TypeCobolProgramSymbols.StatementEntryPoint,
                                                       symbol.value as CodeElement, true);
                    stmtParser.parse();
                    break;
                }
            }
            return(true);
        }
        /// <summary>
        /// Create a new parser using a clone.
        /// </summary>
        /// <param name="parser">The parser to be cloned</param>
        /// <param name="start">The start entry point to use</param>
        /// <param name="firstSymbol">The First Symbol</param>
        /// <param name="trial">If we are creating atrial parser, fals eo therwise</param>
        /// <returns>The new parser</returns>
        public lr_parser CloneParser(lr_parser parser, int start, CodeElement firstSymbol, bool trial)
        {
            TypeCobolProgramParser tcpParser = parser as TypeCobolProgramParser;
            ProgramClassBuilder    builder   = tcpParser.Builder as ProgramClassBuilder;
            var errorReporter = tcpParser.ErrorReporter;
            var tokenizer     = parser.getScanner() as CodeElementTokenizer;
            CodeElementTokenizer   newTokenizer = new CodeElementTokenizer(start, firstSymbol);
            TypeCobolProgramParser newParser    = new TypeCobolProgramParser(newTokenizer);

            newParser.Builder       = builder;
            newParser.ErrorReporter = errorReporter;
            newParser.IsTrial       = trial;
            return(newParser);
        }