2011-10-03 17 views
7

yacc ऐसा प्रतीत नहीं होता है जब मेरे टोकन एक प्रकार के होते हैं जिसे मैंने परिभाषित किया था।yacc - फ़ील्ड में अपूर्ण प्रकार

मेरी व्याकरण (.y) एक %{ ... %} ब्लॉक में फ़ाइल के शीर्ष पर, मैं एक हेडर फाइल कि निम्नलिखित संरचना को परिभाषित करता है में शामिल हैं:

typedef struct _spim_register { 
    spim_register_type type; /* This is a simple enumeration, already defined */ 
    int number;    
} spim_register; 

नियमों की मेरी सूची से पहले, मैं है:

%token AREG 
... 
%union { 
struct _spim_register reg; 
} 
... 
%type <reg> register AREG 

मैंमें लाइन पर

error: field ‘reg’ has incomplete type

मिल बाइसन द्वारा उत्पादित कोड संकलित करने की कोशिश करते समयखंड। मेरी %union बयान में spim_register reg; लिख कर reg घोषित करने के लिए कोशिश कर त्रुटि देता है:

unknown type name ‘spim_register’ 

ऐसा लगता है कि वहाँ कुछ विशेष के बारे में %union { ... } है जैसे, क्योंकि मैं के लिए कार्रवाई में मेरी हेडर फाइल से डेटा संरचनाओं उपयोग करने में सक्षम हूँ नियम।

+3

[संभावित रूप से संबंधित] (http://stackoverflow.com/questions/1430390/include-struct-in-the-union-def-with-bison-yacc) – user786653

उत्तर

9

यह मदद मिलेगी अगर मेरे #includes सही क्रम में थे ...

जवाब था, के रूप में user786653 संकेत दिया, here। मुझे .l फ़ाइल में .tab.h फ़ाइल समेत से पहले मेरी कस्टम संरचना परिभाषित करने वाली हेडर फ़ाइल को शामिल करने की आवश्यकता थी।

+0

मेरे लिए भी काम किया। धन्यवाद! –

5

मुझे एक ही समस्या से मुलाकात हुई। मेरे * इस तरह फ़ाइल एल क्योंकि:

"y.tab.h"

"FP.h" शामिल

शामिल तो, मैं इसे इस तरह दुबारा लिखा:

में शामिल हैं "एफपी .h "

में" y.tab.h "

यह काम करता है। आपका बहुत बहुत धन्यवाद। @ArIck

+0

एक्सकोड में काम करना मैंने पाया कि मुझे वास्तव में होने के लिए पुनरीक्षण के लिए मेरे प्रोजेक्ट के लिए व्युत्पन्न डेटा को हटाने की आवश्यकता है। किसी कारण से, एक्सकोड वास्तव में नई फ़ाइल सहित नहीं था। – Jbryson

संबंधित मुद्दे