2013-06-22 42 views

回答

2

不確定您的問題是關於PetitParser的JavaDart

無論如何,您需要將char('@')word().plus().flatten()連接到一個序列。然後選擇列表結果列表的第二個元素,忽略第一個字符。

在Java中,這看起來是這樣的:

def("invokation", character('@') 
    .seq(word().plus().flatten()) 
    .map(Functions.nthOfList(1)); 

,並在DART是這樣的:

def("invokation", char('@') 
    .seq(word().plus().flatten()) 
    .pick(1)); 

順便說一句,我只是犯了一個改進PetitParser爲Java,這樣就可以在Java中使用pick(int)太。

+0

非常感謝你! – Freewind

+0

我們可以添加一個API,如「drop()」,這意味着一些匹配器應該消耗輸入,但會丟失結果嗎?所以代碼可以是:'def(「invokation」,char('@')。drop().seq(word()。plus()。flatten())' – Freewind

+0

這當然是可行的,但恕我直言導致所有例如,在上面的'seq(...)'中,單個單詞仍然會被包裝到一個列表中。一般來說,可組合性會受到很大影響。也就是說,沒有任何東西阻止你形成介紹放下其他新組合運營商。 –

相關問題