2011-08-04 60 views
1

我正在研究野牛的解析器。解析一個測試用例時,Bison給出了一個語法錯誤,表示它期望$ end,但是有更多的令牌。我已經在Bison手冊中搜索了$ end,但它似乎並沒有表明在什麼條件下它會預期該令牌。我使用了遞歸規則的形式

%start program 

%% 

program 
    : rule 
    | program rule; 

來定義我的語法的根。野牛愉快地匹配rule的前三個調用,但是拋出第四個調用,表示它預計$ end。我如何向Bison表明它應該期望並匹配更多的令牌?

回答

1

聽起來像你的問題是在細節的某個地方。輸入流結尾附近的內容與「規則」不符。打開調試,看看有什麼告訴你(檢查YYDEBUG和YYDEBUG,如果你不熟悉它們)。

只是要清楚:當你說「第四次調用」,我認爲你的意思是「第四次獨立測試情況「(所以事實上,它是第四個是無關緊要的。)或者你的意思是說,匹配」規則「四次的輸入流失敗了,但是匹配三次的輸入流成功了?

+0

我的意思是說,我有一個應該調用約5次規則的測試用例,但Bison在前三個之後拋出提到的錯誤。這都是一項測試。我使用了YYDEBUG,並記錄了詞法分析器提供的令牌。 – Puppy

+0

「規則」確實與實際情況不符。我禁用了一部分語法,忘記重新啓用它。哦,那就是我的測試。 – Puppy

+0

我做了同樣的事情一百次。 (這lex/yacc的東西永遠不會挑戰我。)很高興你把它整理出來。 –