Parsing 如何将单词与OMetaJS匹配?

Parsing 如何将单词与OMetaJS匹配?,parsing,ometa,Parsing,Ometa,我一直在努力学习OMeta的使用,我似乎被一些应该非常简单的东西卡住了。如果我有语法 ometa L <: Parser { l letter:l -> l } L.match('h', 'l') 我也可以用 ometa W1 <: Parser { ls letter*:ls -> ls } W1.matchAll('hi', 'ls') 但是当我试图用 ometa W2 <: Parser { word letter:l word:w ->

我一直在努力学习OMeta的使用,我似乎被一些应该非常简单的东西卡住了。如果我有语法

ometa L <: Parser {
  l letter:l -> l
}
L.match('h', 'l')
我也可以用

ometa W1 <: Parser {
  ls letter*:ls -> ls
}
W1.matchAll('hi', 'ls')
但是当我试图用

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

我误解了什么?我该如何修复W2语法以输出“hi”?

好吧,我知道了如何获得我想要的结果。答案就在这里,尽管我仍然不明白为什么W2不工作。我将暂时不公开这个问题,希望有人能来回答这个问题

ometa W3 <: Parser {
  word letter*:w -> w.join('')
}
W3.matchAll('hi', 'word')
ometa W3 w.join(“”)
}
W3.matchAll('hi','word'))
再次回顾:似乎使用速记法省略等号是造成错误的原因。将其添加到中会产生正确的答案

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

这是一个可能已经解决的错误。我在我的oMeta测试页面()上检查了您的示例,它在没有等号的情况下工作(必须在我的测试页面中调用对象M,但这与此无关)。
match failed { errorPos=61 }
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')