2012-02-10 4 views
5

FParsecのidentifierパーサーを使用して、変数と関数の名前を解析しています。通常は、UnicodeとASCII文字が混在しています。しかし、時々私は最初に(\u03C0のような)Unicode文字をエスケープしています(swipe_board\u003A_bのように)。私はまだisAsciiIdStartisAsciiIdContinueオプションを使って解析できるようにすることができますが、正規化の前に前処理のために独自のカスタム関数を定義することはできません。ここでは何が解決策ですか?FParsecに識別子パーサを持つ前処理関数を使用していますか?

答えて

4

identifierパーサは内部的に最初に文字列を解析し、それをIdentifierValidatorインスタンスに渡して検証します。 C#IdentifierValidatorクラスは一般に公開されています(文書化されていません)。identifierパーサーを必要に応じて簡単に適合させることができます。

識別子の解析は、UTF-16サロゲートペア、正規化、およびUnicode XID文字カテゴリをサポートしているため、少し複雑です。これは.NETでネイティブにサポートされていません。 CharUnicodeInfo.GetUnicodeCategoryでサポートされている文字カテゴリの用語で指定されたASCIIまたはUCS-2識別子をサポートする必要がある場合があります。その場合は、many1Satisfy2またはmany1Chars2を使用して解析と検証を1ステップで実装できます。

関連する問題