我正在为将使用 unicode 符号的标识符名称实现解析器。我面临的问题是我有一些也用 unicode 符号编写的运算符,这些运算符可能直接放在标识符之后,例如:
time→sleep(7);
这里的箭头符号是一个中缀运算符,我将它添加到我的运算符优先级解析器中:
opp.AddOperator(InfixOperator("→", ws, 10, Associativity.Right,
fun left right -> BinaryOperation(Arrow, left, right)))
如果我可以自动排除作为运算符添加到 OPP 的所有符号组合,那就太好了。目前,我使用以下实现为我的标识符手动执行此操作:
let variable =
let isAsciiIdContinue = isNoneOf "→*/+-<>=≠≤≥' ,();"
identifier (IdentifierOptions(
isAsciiIdContinue = isAsciiIdContinue,
normalization = System.Text.NormalizationForm.FormKC,
allowAllNonAsciiCharsInPreCheck = true))
但是,这似乎不起作用。我在尝试解析我的代码时收到以下错误消息:
time→sleep(7);
^
The identifier contains an invalid character at the indicated position.
如何让我的variable
解析器停止在中缀运算符上?