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
パーサーを中置演算子で停止させるにはどうすればよいですか?