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>(); }
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); }