我怎样才能构造一个“X?”的具体语法值?

How can I contruct a `X?` concrete syntax value?

我有这个具体语法:

syntax SomeMore = [...] SyncBlock? sync;
syntax SyncBlock = "sync" "{" SyncStatement* stats "}";
syntax SyncStatement = [...];

[SyncBlock]"sync { <syncStrings> }" 似乎有效,但是当我尝试将它用作 SyncBlock? 并分配它时:

SyncBlock? sync = [SyncBlock?]"sync { <syncStrings> }"

它不起作用:inline parsing not supported on SyncBlock?,建立这种 X? 类型的值的最简单方法是什么?

我可以通过某种方式将 SyncBlock 转换为 SyncBlock? 吗?

像这样也行不通: syncBlock = (SyncBlock?)`sync { <SyncStatement* syncs>}`;

P.S。 SyncBlock? syncBlock = … 结果是 Ambiguous code (internal error), SyncBlock? syncBlock = …。可能是由于三元运算符的歧义?

我找到了一个解决方法,虽然不是很理想,但它确实有效。 似乎类型中的 ? 引入了一些困难,但可以使用此类型的 "alias" 来规避:

我将语法更改为:

syntax SomeMore = [...] MaybeSyncBlock sync;
syntax MaybeSyncBlock = SyncBlock?;
syntax SyncBlock = "sync" "{" SyncStatement* stats "}";
syntax SyncStatement = [...];

现在可以了:

MaybeSyncBlock syncBlock = [MaybeSyncBlock]"sync { <syncStrings> }";