2011-06-10 108 views
1

我目前正在使用yecc編寫erlang中的一個小解析器,並且遇到了一些問題。當我用「lbrack」解析規則時會出現問題。下面的規則 是我的問題的說明:yecc語法問題

program -> 'char' 'ident' 'lbrack' 'int_constant' 'rbrack' 'semi' 

它編譯好了,但是當我試圖解析以下令牌:與

{error, 
{1,parser,["syntax error before: ","lbrack"]}}} 

[{char,1}, 
{ident,1,1,t}, 
{lbrack,1}, 
{int_constant,1,10}, 
{rbrack,1}, 
{semi,1}] 

解析器崩潰

回答

3

我試着用以下的yecc文件,yt.yrl:

Nonterminals 
program. 

Terminals 
char ident lbrack int_constant rbrack semi. 

Rootsymbol 
program. 

program -> 'char' 'ident' 'lbrack' 'int_constant' 'rbrack' 'semi'. 

與您的輸入,它工作正常。它沒有返回任何東西,好吧'$undefined',但這是因爲它應該是我的例子不會返回任何東西。請注意,不需要引用任何終端符號,因爲它們只是具有「普通」名稱的普通原子。

+0

謝謝!我不知道我的其他規則是否會受到干擾,但是當我將'lbrack'重命名爲'['(在詞法分析器和我的yecc語法中)它都起作用了。 – Burbas 2011-06-12 11:23:10

+0

這應該沒有什麼區別,因爲yecc檢測到規則之間的干擾並且不允許它。不容許歧義。 – rvirding 2011-06-13 23:00:42