2014-07-10 49 views
0

我試圖寫C.樹頂看起來

的一個子集解析器樹梢的行爲是很難分析這個簡單的(進一步簡化)語法一個簡單的語法失敗(5條規則)。

grammar Shyc 

rule functionDef 
    type space identifier '(' ')' bloc 
end 

rule type 
    'int' 
end 

rule bloc 
    '{' '}' 
end 

rule identifier 
    [a-zA-Z] [a-zA-Z_]* 
end 

rule space 
    [\s]+ 
end 

end 

我的測試用例是 「int main()的{}」

而且從樹梢的錯誤信息是:

error at line 1, column 9 
failure reason : Expected [a-zA-Z_] at line 1, column 9 (byte 9) after 
compiler.rb:25:in `parse': Parse error (RuntimeError) 
from compiler.rb:73:in `<main>'enter 

問題是由此圍繞標識符規則...

樹頂版本:1.5.3和Ruby 2.1.1

任何想法?

+0

這對我的作品(TT 1.4.10,紅寶石2.0.0p353)。也許你有一個原因導致您無法加載了最新.treetop文件遺留下來的TT-編譯.RB文件?之前我曾經咬過我。 – wdebeaum

+0

對我的作品還有,可能是與你的文件被設置方式問題。 –

回答

0

的問題是,我的測試案例是在一個單獨的文件,並在最後補充結束線\ n和這裏測試的語法沒有規定如何消費這一點。

下面是解決該問題的代碼。由於樹頂的郵件列表上討論here,錯誤是奇怪,以某種方式誤導,但也很難在一般的自動化一個明確的信息的發射。

grammar Shyc 

rule functionDef 
    type space identifier '(' ')' bloc space? 
end 

rule type 
    'int' 
end 

rule bloc 
    '{' '}' 
end 

rule identifier 
    [a-zA-Z] [a-zA-Z_]* 
end 

rule space 
    [\s\n]+ 
end