public TranspileResult TranspileFile(string inputFileName, string outputFileName = null) { CompilationUnitNode ast; using (var source = new StreamCharacterSequence(inputFileName, Encoding.UTF8)) { var lexicalGrammar = LexicalGrammar.GetParser(); var tokenizer = lexicalGrammar .ToSequence(source) .Where(t => t.Value.Type != TokenType.Comment) .Select(r => r.Value); var result = _grammar.CompilationUnits.Parse(tokenizer); ast = result.Value; ast.FileName = inputFileName; } var validateResults = ast.Validate(); if (validateResults.Any()) { return(TranspileResult.ForValidationFailure(validateResults)); } outputFileName = outputFileName ?? inputFileName + ".cs"; using (var outStream = new StreamWriter(outputFileName, false)) { var preamble = Formatting.GetGeneratedFilePreamble("Scoop", inputFileName); outStream.WriteLine(preamble); new CSharpTranspileVisitor(outStream).Visit(ast); outStream.Flush(); } return(TranspileResult.ForSuccess(outputFileName)); }
public void FileStream_Test() { var fileName = Guid.NewGuid().ToString() + ".txt"; try { File.WriteAllText(fileName, "test"); using var target = new StreamCharacterSequence(new StreamCharacterSequence.Options { FileName = fileName }); target.GetNext().Should().Be('t'); target.GetNext().Should().Be('e'); target.GetNext().Should().Be('s'); target.GetNext().Should().Be('t'); } finally { if (File.Exists(fileName)) { File.Delete(fileName); } } }