我一直在试着用 OMeta/JS 我似乎被一些本该直截了当的事情困住了。如果我有语法
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语法输出'嗨'?
好吧,我想办法得到我想要的结果。答案就在这里,尽管我仍然不明白为什么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')