単純なレクサーとして .NET Regex を使用しています。
var pattern = new Regex("(?<if>if)|(?<then>then)|(?<int>\-?\d+)...");
var tokens = pattern.Matches(input).Cast<Match>()
.Select(m => new Token { Text = m.Value, Type = TokenTypes.First(tt => !string.IsNullOrEmpty(m.Groups[tt].Value) });
照合後、トークンの種類を表すすべての名前付きグループを反復処理し、実際に一致したものを見つけることで、各トークンの種類を特定できます。ただし、これは少し遅くて不器用に思えます。.NET Regex API を使用して、一致するすべてのグループを見つけるより良い方法はありますか?