我一直在尝试使用OMeta/JS学习OMeta,但我似乎被一些本应非常简单的东西卡住了。如果我有一个语法
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语法以输出“hi”?
发布于 2010-08-17 02:27:04
好吧,我想出了如何得到我想要的结果。答案就在这里,尽管我仍然不明白为什么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')https://stackoverflow.com/questions/3495650
复制相似问题