Rascal で、プロダクションのオプション部分の位置にレイアウトがあると曖昧になるのはなぜですか? たとえば、"{ }"
はあいまいですが、次の文法からのようStart1
にうまく解析Start2
されますが、まったく同じであると予想されます。
layout Layout = " "?;
start syntax Start1 = "{" "c"? "}";
start syntax Start2 = "{" "c" "}"
| "{" "}";
さらに、同じあいまいさを引き起こさない、Start2
以外の重複なしで表す別の方法があるかどうかを知りたいです。Start1
明らかに、このコードには大量の重複はなくStart2
、ここでは適切なオプションですが、これは単なる例です。私は、3 つまたは 4 つのオプション部分を含む多くのプロダクションを含む文法を扱っています。最後のケースでは、表示されている表記法でStart2
すでにプロダクションのオプションではない部分を 2^4=16 回複製する必要があり、これは私の意見では本当に面倒です。 .