2016-12-22 42 views
0

我有這個具體的語法:如何構造一個`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>}`;

附: SyncBlock? syncBlock = …結果爲Ambiguous code (internal error), SyncBlock? syncBlock = …。可能是由於三元運算符含糊不清?

+0

同樣的問題似乎發生在'X *'語法元素上。 – Tim

回答

0

我發現了一個解決方法,並不理想,但它的工作原理。 看來,在類型?引入了一些困難,但可以用一個「別名」對於這種類型的被規避:

我改變了語法:

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

現在這個工程:

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

這是一個已知的問題。我們正在計劃一個通用解決方案。 – jurgenv

相關問題