情況是我寫了一個非常非常簡單的語法,但編譯時,我得到了衝突。 我不知道爲什麼這樣一個簡單的語法可以發生衝突。yacc有一個轉換/減少衝突
%token SCRIPT_ID
%token STRING
%start functions
%%
functions: SCRIPT_ID '(' STRING ')' {printf("script_id is %s", $3);};
%%
我只想用yacc來解析我的文件。在我的文件中有些東西像script_id(「1232444」)。
我在yacc手冊上進行搜索,並在討論shift/reduce衝突時發現,它引發了一個例如'if and else'的例子。我明白,爲什麼'如果和別人'有衝突,如果沒有指定的權利。 但我不知道如果其他衝突與我遇到的衝突有什麼關係。
有人能告訴我我的代碼有什麼問題嗎?
您能展示如何定義SCRIPT_ID和STRING標記嗎? – Zuljin 2012-01-17 11:56:33
yacc的詳細輸出可能會顯示詳細信息。用'-v'選項編譯語法。這會生成一個文件'y.output'(或類似的東西)和其中的信息。 – 2012-01-17 11:56:42