2014-04-04 64 views
0

所以,我遇到了問題,我的解析器與我編譯的編譯器。錯誤是說我沒有一個工會或結構內的成員,它是。這是我收到的錯誤代碼:解析器錯誤與聯盟結構

parser.y:123: error: request for member ‘funcName’ in something not a structure or union 
與我parser.y文件中的代碼

然後:

%union { 
    int val; 
    char *funcName; 
} 

%token <funcName> ID 

,這裏是哪裏,我嘗試使用工會我parser.y文件:

f_def: FUNCTION ID '(' arg_list ')' ':' type '{' stat_list '}' 
{create_function_info_item(&headFunctionInfo, func_arg_list_count(), $2.funcName);} 

回答

1

令牌有哪個工會會員的你分配給他們與%token聲明的類型 - 而不是聯合類型本身。所以$2char*類型,您不需要.funcName - 它已經擁有funcName成員的值。

+0

我還是有點困惑。我只是想傳遞函數名稱的$ 2字符。因爲我正在構建一個包含所有函數信息的結構來檢查我的.c文件中的內容。 – pmac89

+0

@ pmac89我在說'$ 2'包含函數名,它是一個'char *'。然後你在'char *'上調用'.funcName',這是一個類型錯誤。正如我所說的,解決方案是不使用'.funcName'。 – sepp2k

+0

啊,謝謝。這工作。 – pmac89