C# で非常に単純なパーサーを作成しようとしています。
正規表現をトークンに関連付けることができるレクサーが必要です。これにより、正規表現を読み取ってシンボルを返すことができます。
正規表現を使用して実際の重い作業を行うことができるように思われますが、それを行う簡単な方法がわかりません。一つには、Regex はストリームではなく文字列でのみ動作するようです (なぜですか!?!?)。
基本的に、次のインターフェースの実装が必要です。
interface ILexer : IDisposable
{
/// <summary>
/// Return true if there are more tokens to read
/// </summary>
bool HasMoreTokens { get; }
/// <summary>
/// The actual contents that matched the token
/// </summary>
string TokenContents { get; }
/// <summary>
/// The particular token in "tokenDefinitions" that was matched (e.g. "STRING", "NUMBER", "OPEN PARENS", "CLOSE PARENS"
/// </summary>
object Token { get; }
/// <summary>
/// Move to the next token
/// </summary>
void Next();
}
interface ILexerFactory
{
/// <summary>
/// Create a Lexer for converting a stream of characters into tokens
/// </summary>
/// <param name="reader">TextReader that supplies the underlying stream</param>
/// <param name="tokenDefinitions">A dictionary from regular expressions to their "token identifers"</param>
/// <returns>The lexer</returns>
ILexer CreateLexer(TextReader reader, IDictionary<string, object> tokenDefinitions);
}
だから、codzを送ってください...
いいえ、真剣に、私は上記のインターフェースの実装を書き始めようとしていますが、.NET (2.0) でこれを行う簡単な方法が既にないことを信じるのは難しいと思います. .
それで、上記を行う簡単な方法についての提案はありますか?(また、「コード ジェネレーター」も必要ありません。パフォーマンスは重要ではなく、ビルド プロセスを複雑にしたくありません。)