2013-03-08 32 views
0

我的C語法出現左遞歸錯誤,可以在這裏找到 http://www.archive-host.com/files/1959502/24fe084677d7655eb57ba66e1864081450017dd9/cAST.txt。 當我更換我的C語法的左遞歸錯誤

initializer 
: assignment_expression 
| '{' initializer_list '}' 
; 

initializer 
: assignment_expression 
| '{' initializer_list '}' 
| initializer_list 
; 

我這樣做是因爲我試圖做按Ctrl-d這段代碼

int k [2] = 1,4; 

但是這個代碼不與第一個版本的工作

int k [2] = {1,4}; 

請問有沒有辦法可以{}請?

+1

你在編寫標準的C語法嗎? 'int k [2] = 1,4;'不是C. – deepmax 2013-03-08 21:09:08

+0

是的,但這是唯一的例外。 – Exia0890 2013-03-08 21:11:28

回答

3

要做到這一點,你需要引入上下文敏感性(或按順序)。

問題是1,4已經有了定義的含義。這是一個使用逗號運算符的表達式,用於評估1,放棄結果,然後評估4,這是整個表達式的值。因此,要做到這一點,你必須使用不同於正常表達式的初始化語法(並且在這個過程中,與C當前定義的情況相差甚遠)。從純語法的角度來看,幾乎可以肯定不需要使用上下文敏感性來完成,但是它將涉及基本上爲初始化器定義與正常表達式語法分開或與其並行的語法,而不是使用兩者的通用語法。

+0

感謝您的回答,但我真的不想離開C,只是作爲一種特殊情況,我希望沒有{}的表聲明被接受(僅適用於表格)。當然也必須接受{}的人。是否有可能做到這一點,而不會偏離C標準? – Exia0890 2013-03-08 21:30:57

+1

不,當然這是不可能的,因爲有問題的表單已經有了定義的含義。 – 2013-03-08 21:33:53

+0

我明白了,謝謝你的回答。我認爲我應該避免這樣做^^。 – Exia0890 2013-03-08 21:44:38