我有这个具体的语法:
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 = …
。可能是由于三元运算符模糊不清?
答案 0 :(得分:0)
我发现了一种解决方法,并不理想,但它确实有效。
似乎类型中的?
引入了一些困难,但可以使用此类别的“别名”来规避:
我将语法改为:
syntax SomeMore = [...] MaybeSyncBlock sync;
syntax MaybeSyncBlock = SyncBlock?;
syntax SyncBlock = "sync" "{" SyncStatement* stats "}";
syntax SyncStatement = [...];
现在可行:
MaybeSyncBlock syncBlock = [MaybeSyncBlock]"sync { <syncStrings> }";