在FParsec中使用预处理函数和标识符解析器



我使用FParsec的identifier解析器来解析变量和函数的名称,这些名称通常是Unicode和ASCII字符的混合。但有时我会在开头(如u03C0)或标识符内(如swipe_boardu003A_b)转义Unicode字符。我仍然可以使用isAsciiIdStartisAsciiIdContinue选项使它们可解析,但我不能定义自己的自定义函数来进行规范化前的预处理。这里有什么解决方案?

identifier解析器首先在内部解析字符串,然后将其传递给IdentifierValidator实例进行验证。由于C#IdentifierValidator类是可公开访问的(尽管没有文档记录),因此可以很容易地根据需要调整identifier解析器(通过使初始字符串解析步骤也识别转义)。

标识符解析有点复杂,因为它支持UTF-16代理项对、规范化和Unicode XID字符类别,而.NET本身并不支持这些功能。也许您只需要支持根据CharUnicodeInfo.GetUnicodeCategory支持的字符类别指定的ASCII或UCS-2标识符,在这种情况下,您可能只需使用many1Satisfy2many1Chars2一步即可实现解析和验证。

最新更新