2010-08-16 91 views
4

我一直在努力學習使用OMeta/JS的OMeta,我似乎陷入了一些應該非常簡單的事情。如果我有一個語法如何使用OMetaJS匹配單詞?

ometa L <: Parser { 
    l letter:l -> l 
} 
L.match('h', 'l') 

它產生預期的輸出

h 

我還可以使用

ometa W1 <: Parser { 
    ls letter*:ls -> ls 
} 
W1.matchAll('hi', 'ls') 

將會產生

[h, i] 

但是,當我嘗試解析整個單詞使用

ometa W2 <: Parser { 
    word letter:l word:w -> (l + w) 
    | letter:l -> l 
} 
W2.match('hi', 'word') 
//Also tried W2.matchAll('hi', 'word') 

我得到一個錯誤

match failed { errorPos=61 } 

我是什麼誤會,我怎麼解決W2語法輸出「喜」?

回答

4

嗯,我想出瞭如何得到我想要的結果。答案在這裏,但我仍不明白爲什麼W2不起作用。我會暫時將其公開,並希望有人能夠回答這個問題。

ometa W3 <: Parser { 
    word letter*:w -> w.join('') 
} 
W3.matchAll('hi', 'word') 

再次回來:似乎可能使用速記使等號失效導致錯誤。添加它會產生正確的答案。

ometa W2 <: Parser { 
    word = letter:l word:w -> (l + w) 
     | letter:l -> l 
} 
W2.matchAll('hi', 'word') 
+0

這是一個可能已經被解決的錯誤。我在我的oMeta測試頁面(http://ruediger-plantiko.net/ometa/)上檢查了你的例子,它的工作原理沒有等號(必須在我的測試頁面中調用對象M--但這是無關緊要的)。 – rplantiko 2013-06-24 15:10:09