我怎样才能构造一个“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> }";
我有这个具体语法:
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> }";