public static BinaryFileSchema ParseBfs(BinaryFileSchema schema, string source, IBfsErrorHandler errorHandler) { gotError = false; handler = errorHandler; BinaryFileSchemaParser.BinaryFileSchemaParser parser = new BinaryFileSchemaParser.BinaryFileSchemaParser(); parser.Construct(source, new StreamErrorHandler(errorHandler) ); bool matches = false; try { matches = parser.bfschema(); } catch (PegException ex) { errorHandler.HandleMessage(ex.Message); } if (!matches) { ReportMessage("Schema didn't parse."); return null; } AstConvert converter = new AstConvert(schema,source); schema = converter.GetBFSTree(parser.GetRoot()); schema = CheckBfs(schema,errorHandler); return schema; }
public static BinaryFileSchema CheckBfs(BinaryFileSchema schema, IBfsErrorHandler errorHandler) { handler = errorHandler; IPhase[] phases = new IPhase[] { new Environments(), new TypeLinking(), new Hierarchy(), new TypeChecking(), new DefiniteAssignment() }; gotError = false; foreach (IPhase phase in phases) { phase.Check(schema); if (gotError && errorHandler != null) { errorHandler.HandleMessage("Schema has errors. Compilation stopped."); return null; } } return schema; }
public StreamErrorHandler(IBfsErrorHandler errorhandler) : base(CultureInfo.InvariantCulture) { this.errorhandler = errorhandler; }
public static BinaryFileSchema ParseBfs(string source, IBfsErrorHandler errorHandler) { return ParseBfs(new BinaryFileSchema(), source, errorHandler); }
public BinaryFileSchema(string filename, IBfsErrorHandler errorHandler) : this() { StreamReader reader = new StreamReader(filename); BfsCompiler.ParseBfs(this,reader.ReadToEnd(), errorHandler); }