コード例 #1
0
ファイル: ScoopTranspiler.cs プロジェクト: Whiteknight/Scoop
        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));
        }
コード例 #2
0
        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);
                }
            }
        }