Example #1
0
        public BMC()
        {
            CodeInput = new antlr.LexerSharedInputState(new StringReader(String.Empty));

            Lexer  = new BoolLexer(CodeInput);
            Parser = new BoolParser(Lexer);

            ErrorLog = String.Empty;

            BoolProgAST = (CommonAST)Parser.getAST();

            m_BddManager = new BddManager();

            ProgramCFG = new CFG(BoolProgAST, m_BddManager);

            m_PathEdges = new Dictionary <CFGNode, PathEdges>();

            m_SummaryEdges = new Dictionary <CFGNode, Bdd>();
        }
Example #2
0
        public bool ParseProgram(string BooleanProgram)
        {
            bool Succesful = true;

            try
            {
                ErrorLog = String.Empty;

                Lexer.resetState(new StringReader(BooleanProgram));
                Parser.resetState();

                StringWriter ErrorLogger = new StringWriter();
                Console.SetError(ErrorLogger);

                Parser.prog();

                ErrorLog = ErrorLogger.ToString();

                if (ErrorLog.Equals(String.Empty))
                {
                    ErrorLog   += "Syntax validation completed without errors.\n";
                    BoolProgAST = (CommonAST)Parser.getAST();
                }
                else
                {
                    Succesful = false;
                }
            }
            catch (TokenStreamException err)
            {
                ErrorLog += ("exception: " + err.ToString() + "\n");
                Succesful = false;
            }
            catch (RecognitionException err)
            {
                ErrorLog += ("exception: " + err.ToString() + "\n");
                Succesful = false;
            }

            if (Succesful)
            {
                BoolSemantics.BoolProgramChecker SemanticChecker =
                    new BoolSemantics.BoolProgramChecker(BoolProgAST);

                List <BoolSemantics.SemanticError> Errors = SemanticChecker.Check();

                if (Errors.Count == 0)
                {
                    ErrorLog += "Semantic validation completed without errors.\n";

                    BuildCFG();
                }
                else
                {
                    ErrorLog += "\n";
                    foreach (BoolSemantics.SemanticError Error in Errors)
                    {
                        ErrorLog += Error.ToString() + "\n";
                    }

                    BoolProgAST = null;
                }
            }

            return(Succesful);
        }