Как я могу создать конкретный синтаксис `X?`
У меня есть этот конкретный синтаксис:
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>}`;
PS SyncBlock? syncBlock = …
результаты в Ambiguous code (internal error), SyncBlock? syncBlock = …
, Вероятно, из-за неопределенности троичного оператора?
1 ответ
Я нашел обходной путь, не идеальный, но он работает. Кажется, что ?
в типах вводит некоторые трудности, но может быть обойдено с помощью "псевдонима" для этого типа:
Я изменил грамматику на:
syntax SomeMore = [...] MaybeSyncBlock sync;
syntax MaybeSyncBlock = SyncBlock?;
syntax SyncBlock = "sync" "{" SyncStatement* stats "}";
syntax SyncStatement = [...];
Теперь это работает:
MaybeSyncBlock syncBlock = [MaybeSyncBlock]"sync { <syncStrings> }";