在 Rascal 中,为什么当在产品的可选部分的位置存在布局时,会导致歧义?Eg"{ }"
是模棱两可的Start1
,虽然它Start2
从以下语法中解析得很好,我本来希望它是完全相同的。
layout Layout = " "?;
start syntax Start1 = "{" "c"? "}";
start syntax Start2 = "{" "c" "}"
| "{" "}";
另外,我想知道是否有另一种表示Start2
不重复的方式,而不是Start1
不会导致同样的歧义。
显然,这段代码没有大量的重复,在这里Start2
是一个不错的选择,但这只是一个例子。我正在使用包含三个或四个可选部分的许多产生式的语法,在最后一种情况下,显示的符号Start2
已经需要将产生式的非可选部分复制 2^4=16 次,这在我看来确实很麻烦.