2011-11-20 79 views
4

我有隻有兩個規則樹頂語法:最簡單的規則不工作

grammar RCFAE 
    rule num 
     [0-9]+ <Num> 
    end 

    rule identifier 
     [a-zA-Z] [a-zA-Z]* <ID> 
    end 
end 

我試圖解析簡單的字符串(「A」和「5」)。如果我把這個規則放在第一位,那麼「5」被認爲是Num,如果我把這個規則放在第二位,則返回零。同樣,如果我先放置該規則,則將「A」識別爲ID,如果我將該規則放在第二位,則返回零。我無法理解這兩條規則如何以任何方式重疊。這讓我瘋狂!

有什麼我失蹤或不理解樹梢或正則表達式嗎?在此先感謝您的幫助。

回答

6

Treetop希望第一條規則成爲「主要規則」。它不會嘗試應用您定義的所有規則,直到匹配 - 它只適用主規則,如果不匹配,則失敗。

做你想做什麼,你需要添加這可能是一個NUM或標識,像這樣的主要規則:

grammar RCFAE 
    rule expression 
     num/identifier 
    end 

    rule num 
     [0-9]+ <Num> 
    end 

    rule identifier 
     [a-zA-Z] [a-zA-Z]* <ID> 
    end 
end 
+0

工作就像一個魅力!非常感謝。 – timichanga