public PipelineController(string sourcefile) { var lineReader = new FastLineReader(sourcefile); //@"C:\Users\Weirdo\source\repos\4Story\Agnares\4Story_5.0_Source\Client\astout\cssender-02.ast") _lineInputChannel = Channel.CreateBounded <BatchLineReadResult>(new BoundedChannelOptions(100) { AllowSynchronousContinuations = false, FullMode = BoundedChannelFullMode.Wait, SingleReader = true, SingleWriter = true }); _reader = new FileToLinesProcessor(lineReader, _lineInputChannel.Writer); _minimalParser = new LineBatchToMinimalInfoProcessor(_lineInputChannel.Reader); }
public List <AstToken> Parse(AstParserInterceptor interceptor) { var fastReader = new FastLineReader(_filePath); var readerContext = new AstFileReaderContext(fastReader.ReadLine()); AstToken currentRoot = null; var rootTokens = new List <AstToken>(); foreach (var rawLine in readerContext) { AstTokenParserUtils.GetEssentialPart(rawLine, out var lineDepth, out var line); var token = new AstToken(true) { Line = readerContext.CurrentLine };; AstTokenParserUtils.ParseTokenDescription(token, line); if (lineDepth == 0) { currentRoot = token; rootTokens.Add(token); continue; } if (currentRoot == null) { currentRoot = new AstToken(true) { unknownName = "Unknown" }; rootTokens.Add(currentRoot); } if (interceptor.OnNodeParsed(readerContext, token, lineDepth)) { continue; } currentRoot.AddChild(token, lineDepth - 1); } return(rootTokens); }
public FastAstTokenizer(FastLineReader lineReader) { _lineReader = lineReader; }
public FileToLinesProcessor(FastLineReader lineReader, ChannelWriter <BatchLineReadResult> lineResultWriter) : base(1) { _lineResultWriter = lineResultWriter; _lineReader = lineReader; }