2010-08-13 8 views
10

.y dosyasını bison parser.y -d -t ile derlediğimde ve parser.tab.h dosyasını flex dosyama ekledikten sonra gcc "error: sayısal sabitten önce sözdizimi hatası" yazıyor. Bu, yytokentype'ın enumundaki ilk satır olan 32 satırına atıfta bulunuyor.GCC, bison'dan oluşturulan üstbilgi dosyasında "sayısal sabitten önce sözdizimi hatası" yazıyor

enum yytokentype { 
    BREAK = 258, 
    ... } 

Hata, "BREAK = 258." satırı ile ilgilidir. Gerçekten bunun neden olduğunu bilmiyorum - oluşturulan yylvalı kullanmak isterim ve bu başlık dosyasından ihtiyacım var. Esnek dosyamda bunun gibi yytokentype bildirmiş olsam bile, aynı hatayı alırdım. Yanlış yapabileceğim bir şey var mı?

+2

. Gcc'ye '-E' bayrağı bu sorunları yaymak için iyidir. – msw

cevap

19

BREAK kodunuzda başka bir yerde tanımlanmış mı? Aşağıdaki oyuncak örnekten benzer bir hata alıyorum:

#define BREAK 10 
enum yytokentype { 
    BREAK = 258 
}; 

Yapı örnek: Bir yerde Hatalı çizginin üzerinde BREAK` `yeni bir tanımını vardır tahmin ediyorum

$ cc -c file.c 
file.c:4: error: expected identifier before numeric constant 
+0

Hmm? Bu örnek, noktalı virgül yüzünden "# define" ile veya olmadan başarısız olur. –

+0

Evet ... Sorun bu. Tüm #includes'leri kontrol ettim ve onlardan birinde buldum. İkinize de teşekkürler. – Kizaru

+0

@Kinopiko, oops, yeniden yazmak yerine kopya/yapıştırılmış olmalıdır. Şimdi sabit. –

6

Muhtemelen BREAK zaten esnek çıktı dosyasında bir yerde tanımlanmıştır, böylece önişlemci çalıştırıldıktan sonra 99 = 258 veya benzeri bir ifade alırsınız. cpp yy.lex.c veya gcc -E yy.lex.c çıkışlarına bakmayı deneyin. Esnek bir çıktı dosyasına baktım ama BREAK içinde hiçbir yerde bulamadım, sadece YY_BREAK.