static void Main(string[] args) { var fileStrategy = new FileStrategy(); var rootDirectory = new Directory(Directory.Root, args.First(), fileStrategy); foreach (var file in rootDirectory.AllFiles()) { var stream = new CharacterStream(file.Source()); var include = new Include(); var includes = include.Get(stream); System.Console.WriteLine(string.Join(",",includes)); var define = new Define(); System.Console.WriteLine(define.Get(stream.Reset())); var typeAlias = new TypeAlias(); System.Console.WriteLine(typeAlias.Get(stream.Reset())); var comment = new Comment(); System.Console.WriteLine(comment.Get(stream.Reset())); var given = new Given(); System.Console.WriteLine(given.Get(stream.Reset())); var when = new When(); System.Console.WriteLine(when.Get(stream.Reset())); } }
public List<string> Get(CharacterStream stream) { var current = Tokens.First(); var emitter = new List<string>(); var buffer = new StringBuilder(); while (stream.CanContinue()) { var cursor = stream.Continue(); if (current.Matches(cursor)) { buffer.Append(cursor.Value); } else { current = ResetTokens(); buffer = new StringBuilder(); } if (current.IsWildCard && GetNextToken(current).Matches(cursor)) current = GetNextToken(current); if (current == Tokens.Last()) { current = ResetTokens(); emitter.Add(buffer.ToString()); buffer = new StringBuilder(); } if (current.IsExpired) current = GetNextToken(current); } return emitter; }