Skip to content

Instantly share code, notes, and snippets.

@LaylBongers
Created October 12, 2014 19:53
Show Gist options
  • Select an option

  • Save LaylBongers/64632d7b6b5b828368d3 to your computer and use it in GitHub Desktop.

Select an option

Save LaylBongers/64632d7b6b5b828368d3 to your computer and use it in GitHub Desktop.
public IEnumerable<TOutData> Process(IEnumerable<TInData> inData)
{
// Verify function call requirements
if (inData == null)
{
throw new ArgumentNullException("inData");
}
// Set up the metadata class
var data = new TMetaData();
// Set up the helper class to walk over our data
var walker = new DataWalker<TInData>(inData);
walker.Moved += (s, e) => InputMove(this, new ParseStagePipeEventArgs<TInData, TMetaData>(walker, data));
// Create our output stream
var outData = new List<TOutData>();
// Actually perform the lexing
walker.Next();
while (!walker.AtEnd)
{
Func<DataWalker<TInData>, TMetaData, TOutData> handler;
var lexeme = Handlers.TryGetValue(SelectLookupKey(walker.Current), out handler)
? handler(walker, data)
: DefaultHandler(walker, data);
outData.Add(lexeme);
}
return outData;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment