2012-11-20 32 views
-1

我想在野牛中做一個分析器,當我在分析器中使用某些單字符終端時,它給了我非常奇怪的編譯錯誤。野牛分析器中的單字面文字

這工作:

nonterminal1: 'a' nonterminal2 'b'; 

但是這並不編譯:

nonterminal1: '{' nonterminal2 '}'; 

我應該以某種方式逃避這些字符?我已經嘗試了不少谷歌搜索,並剔除了O'Reilly的flex &野牛書,但找不到任何關於這方面的內容。

+1

你得到了什麼編譯錯誤,以及從哪裏(C或野牛?)。 – rici

回答

1

證明通過反例:

%% 
nonterminal1: 'a' nonterminal2 'b'; 
nonterminal1: '{' nonterminal2 '}'; 
nonterminal2: '.' | '!'; 

野牛編譯,沒有投訴。我嘗試了Yacc的另外三種變體;所有編譯它沒有投訴。它也編譯沒有a/b行。我只測試了文件上運行的bison;我沒有測試C編譯器,但是如果Bison生成的代碼無效,那將是令人驚訝的。

這個問題並不像你減少的那麼簡單。因此,請提供實際的SSCCE(Short, Self-Contained, Correct Example)以及來自Bison的錯誤消息。如果您有指定bison的選項,請告訴我們關於這些的選項。如果問題是將bison(一個C文件)的輸出編譯成一個目標文件,那麼你也應該說明這一點。

(根據記錄,野牛的版本是2.3,在Mac OS X 10.7.5上運行。)

請注意,如果您正在使用某些非編程編輯器,它有可能是引號字符被轉換成非ASCII '(39; Unicode U + 0027)。這會拋出一些東西。然而,目前尚不清楚爲什麼一條線路被拆除而另一條線路不被拆除。您必須向我們顯示錯誤消息,以便我們能夠提供幫助。